2013-06-11 31 views
2

我有一個OpenLayers.Layer.Vector層,這樣的事情:如何防止OpenLayers.StyleMap和OpenLayers.SelectFeature發生衝突?

layer = new OpenLayers.Layer.Vector("zzzzz", { 
    strategies: [ 
    new OpenLayers.Strategy.Fixed(), 
    ], 
    // styleMap: new OpenLayers.StyleMap({ 
    // 'default': { .. layer styles here ..} 
    // 'select': { .. selected styles here ..} 
    // }), 
    protocol: new OpenLayers.Protocol.HTTP({ 
    url: "/kml/zzzzzz.kml", 
    renderers: ['Canvas','SVG'], 
    format: new OpenLayers.Format.KML({ 
     extractStyles: false, 
     extractAttributes: true, 
     maxDepth: 0 
    }) 
    }) 
}); 

然後,我有一個OpenLayers.Controls.SelectFeature控制,這樣的事情:

selectFeature = new OpenLayers.Control.SelectFeature(
    [layer], 
    { 
     renderIntent: "select", 
     clickout: true, 
     toggle: true 
    } 
); 

然後,我將其添加地圖,就像這樣:

map = new OpenLayers.Map('map'); 
map.addLayer(layer); 
map.addControl(selectFeature); 
selectFeature.activate(); 

現在,即時那我去掉那些StyleMap設定行,我所有的功能變得無法點擊且無響應。這些風格不僅不反映國家,而且各州似乎也沒有改變。

我需要做些什麼來維護自定義樣式並讓圖層具有可移動性和/或可點擊性?

回答

2

你是如何定義意圖的?什麼是你的象徵符號的價值'default': { .. layer styles here ..} ???

我認爲你正在創建一個「空」的對象,並設置只爲默認,並選擇風格的一些屬性,例如:

default: { 
    strokeColor: "red" 
} 

其產生的風格,只有一個屬性,沒有線寬strokeOpacity,用於,等等。

下一個代碼適合我。還要注意renderers必須在協議中的層中指定。

var map = new OpenLayers.Map("map"); 

    // Create an OpenStreeMap raster layer and add to the map 
    var osm = new OpenLayers.Layer.OSM(); 
    map.addLayer(osm); 

    // Set view to zoom maximum map extent 
    map.zoomToMaxExtent(); 

    // Create symbolizers inherited from the predefined styles and change only some properties. 
    var defaultStyleSymbolizer = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
    defaultStyleSymbolizer.strokeColor = "green"; 
    var selectStyleSymbolizer = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['select']); 
    selectStyleSymbolizer.strokeColor = "red"; 

    // Create a vector layer 
    var layer = new OpenLayers.Layer.Vector("zzzzz", { 
     strategies: [ 
     new OpenLayers.Strategy.Fixed(), 
     ], 
     // Set the renderers 
     renderers: ['Canvas','SVG'], 
     // Apply the style map 
     styleMap: new OpenLayers.StyleMap({ 
     'default': defaultStyleSymbolizer, 
     'select': selectStyleSymbolizer 
     }), 
     protocol: new OpenLayers.Protocol.HTTP({ 
     url: "./global_undersea.kml", 
     format: new OpenLayers.Format.KML({ 
      extractStyles: false, 
      extractAttributes: true, 
      maxDepth: 0 
     }) 
     }) 
    }); 

    // The select control 
    var selectFeature = new OpenLayers.Control.SelectFeature([layer], { 
     renderIntent: "select", 
     clickout: true, 
     toggle: true 
    }); 

    // Add layer and control 
    map.addLayer(layer); 
    map.addControl(selectFeature); 
    selectFeature.activate(); 
相關問題