选择要素在多个KML图层中工作

3

我正在使用Openlayers制作自己的KML图层地图。我希望通过弹出窗口访问我的KML文件中的属性,我已经成功实现了这一点,但问题是如何使多个KML图层可选择,我只能选择最上层的图层。我一直在寻找解决方案,但什么都不起作用,非常感谢您的帮助。我的代码如下:

  var map;
  function init() {    
    var options = {   
                      scales: [500, 1000, 2500, 5000, 10000],
                      numZoomLevels: 26,
                      allOverlays: true,
                      projection: new OpenLayers.Projection("EPSG:900913"),
                      displayProjection: new OpenLayers.Projection("EPSG:4326"),
                      controls:[
                        new OpenLayers.Control.Navigation(),
                        new OpenLayers.Control.PanZoomBar(),
                        new OpenLayers.Control.LayerSwitcher({'ascending':false}), 
                        new OpenLayers.Control.ScaleLine(),
                        new OpenLayers.Control.MousePosition(),
                        new OpenLayers.Control.OverviewMap(),
                        new OpenLayers.Control.Attribution(),
                        new OpenLayers.Control.KeyboardDefaults()],};


    map = new OpenLayers.Map('map_element', options);  

    var gsat = new OpenLayers.Layer.Google(
    "Google Satellite",
    {type: google.maps.MapTypeId.SATELLITE} );
    map.addLayer(gsat);
    gsat.mapObject.setTilt(0);            

    var kml = new OpenLayers.Layer.Vector("zahrada", {
                projection: map.displayProjection,
                strategies: [new OpenLayers.Strategy.Fixed()],
                protocol: new OpenLayers.Protocol.HTTP({
                    url: "kml/zahrada.kml",
                    format: new OpenLayers.Format.KML({
                        extractStyles: true,
                        extractAttributes: true,
                    })
                })  
            });

    map.addLayer(kml);     

    var vrstva_dve = new OpenLayers.Layer.Vector("vrstva_dve", {
                projection: map.displayProjection,
                strategies: [new OpenLayers.Strategy.Fixed()],
                protocol: new OpenLayers.Protocol.HTTP({
                    url: "kml/vrstva_dve.kml",
                    format: new OpenLayers.Format.KML({
                        extractStyles: true,
                        extractAttributes: true,
                    })
                })  
            });

    map.addLayer(vrstva_dve);

    select = new OpenLayers.Control.SelectFeature(kml); // here I tried ([kml, vrstva_dve]) , but still only layer kml is selectable 
            kml.events.on({
                "featureselected": onFeatureSelect,
                "featureunselected": onFeatureUnselect
            });
            map.addControl(select);
            select.activate();   


  }

  function onPopupClose(evt) {
        select.unselectAll();
  }

  function onFeatureSelect(event) {
            var feature = event.feature;
            var content = "<h2>"+feature.attributes.name + "</h2>" + feature.attributes.description;
            if (content.search("<script") != -1) {
                content = "Content contained Javascript! Escaped content below.<br>" + content.replace(/</g, "&lt;");
            }
            popup = new OpenLayers.Popup.FramedCloud("chicken", 
                                     feature.geometry.getBounds().getCenterLonLat(),
                                     new OpenLayers.Size(100,100),
                                     content,
                                     null, true, onPopupClose);
            feature.popup = popup;
            map.addPopup(popup);
  }  

  function onFeatureUnselect(event) {
            var feature = event.feature;
            if(feature.popup) {
                map.removePopup(feature.popup);
                feature.popup.destroy();
                delete feature.popup;
            }
  }   
1个回答

4

使用:

select = new OpenLayers.Control.SelectFeature([kml, vrstva_dve])

并添加:
vrstva_dve.events.on({
  "featureselected": onFeatureSelect,
  "featureunselected": onFeatureUnselect
});

非常感谢您如此迅速和有帮助的回答,它已经起作用了 :-) - pavli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接