Javascript 在OpenLayers中定位和/或修改KML区域

Javascript 在OpenLayers中定位和/或修改KML区域,javascript,jquery,geospatial,openlayers,openstreetmap,Javascript,Jquery,Geospatial,Openlayers,Openstreetmap,我已经使用GoogleMaps为地图图表构建了几个Javascript应用程序,我希望在OpenLayers中重新创建这些应用程序。我发现他们网站上的文档非常混乱,很难浏览。 到目前为止,我可以使用以下代码加载我的KML: var map = new OpenLayers.Map({ div: divName, layers: [ new OpenLayers.Layer.OSM(),

我已经使用GoogleMaps为地图图表构建了几个Javascript应用程序,我希望在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。
非常感谢您的帮助。

您可以使用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);
    }
});

我看到您在这里定义了这个变量:var myVectorLayer=map.getLayersByName(“KML”)[0];但我看不出它以后会被引用。这样做的目的是什么?虽然看起来myVectorLayer正在填充,但警报没有发生。此外,我也不完全确定如何修改KML区域的样式。该代码适用于KML内的各个地区还是整个KML?谢谢。如果你是Openlayers的新手,我建议你购买这本书-