2011-12-19 59 views
0

我已經爲使用Google地圖的地圖繪製了多個Javascript應用程序,並且我希望能夠在OpenLayers中重新創建這些應用程序。我發現他們網站上的文檔非常混亂,難以瀏覽。 到目前爲止,我能夠在我的KML加載,使用下面的代碼:在OpenLayers中定位和/或修改KML區域

var map = new OpenLayers.Map({ 
      div: divName, 
      layers: [ 
       new OpenLayers.Layer.OSM(), 
       new OpenLayers.Layer.Vector("KML", { 
        strategies: [new OpenLayers.Strategy.Fixed()], 
        protocol: new OpenLayers.Protocol.HTTP({ 
         url: "data.kml", 
         format: new OpenLayers.Format.KML({ 
          extractStyles: true, 
          extractAttributes: true, 
          maxDepth: 4 
         }) 
        }) 
       }) 
      ], 
      zoom: 4 
     }); 
     map.setCenter(
      new OpenLayers.LonLat(-97, 38).transform(
       new OpenLayers.Projection("EPSG:4326"), 
       map.getProjectionObject() 
      ), 4 
     ); 

我希望做的是能夠修改或針對個別KML區域。例如,只需附加點擊事件,或更改區域的背景顏色。
我環顧四周,似乎無法找到一個很好的例子。 我也有jQuery加載,如果有幫助。 任何幫助將不勝感激。

+1

如果您是Openlayers的新手,我會建議您購買此書 - https://www.packtpub.com/openlayers-2 -1-javascript-web-mapping-library-beginners-guide/book – 2011-12-21 08:58:24

回答

1

你可以使用OpenLayers.Control.SelectFeature對象

要改變對象的背景事件添加到地圖的OpenLayers這樣的事情應該工作

var myVectorLayer = map.getLayersByName("KML")[0]; 

var highlightCtrl = new OpenLayers.Control.SelectFeature(myVectorLayer , { 
       hover: true, 
       highlightOnly: true, 
       renderIntent: "temporary"     
      }); 

    var selectCtrl = new OpenLayers.Control.SelectFeature(myVectorLayer , 
     {clickout: true} 
    ); 

    map.addControl(highlightCtrl); 
    map.addControl(selectCtrl); 

爲了進一步激發事件/獲取更多詳情從您可以選擇的功能

myVectorLayer.events.on({ 
      "featureselected": function (e) { 
       alert(e.type + " - " + e.feature.id); 
    } 
}); 
+0

我看到你在這裏定義這個var: var myVectorLayer = map.getLayersByName(「KML」)[0]; 但我沒有看到它後面引用。這樣做的目的是什麼? – Munzilla 2011-12-20 18:29:59

+0

我更改了代碼以反映此情況。 – AlexC 2011-12-20 19:49:55

+0

雖然看起來像myVectorLayer正在填充,但警報沒有發生。另外,我不完全確定如何去修改KML區域的樣式。此代碼是否適用於整個KML或KML中的各個區域? 謝謝。 – Munzilla 2011-12-22 16:01:17