Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript OpenLayers选择多个层上的功能_Javascript_Openlayers_Gis - Fatal编程技术网

Javascript OpenLayers选择多个层上的功能

Javascript OpenLayers选择多个层上的功能,javascript,openlayers,gis,Javascript,Openlayers,Gis,我正在使用LayerSwitcher向OpenLayers地图添加几个KML层(88)。我已将所有图层添加到SelectFeature控件中。但是,一旦我使用OpenLayers.map.addLayersSelectFeature的onSelect函数向地图添加了超过77个图层,就永远不会调用它 它似乎与KML层无关,因为我可以从addLayers调用中删除任何11层,其余层都可以正常工作。注意:我不必从SelectFeature构造函数中删除任何内容 proprietaryMap.addLa

我正在使用LayerSwitcher向OpenLayers地图添加几个KML层(88)。我已将所有图层添加到SelectFeature控件中。但是,一旦我使用
OpenLayers.map.addLayers
SelectFeature的
onSelect
函数向地图添加了超过77个图层,就永远不会调用它

它似乎与KML层无关,因为我可以从
addLayers
调用中删除任何11层,其余层都可以正常工作。注意:我不必从SelectFeature构造函数中删除任何内容

proprietaryMap.addLayers(
[
  BaseLayer,
  SectionLayer, DistrictLayer, BoroughLayer,
  Business, Hotel, Market, Restaurant,
  Library, Museum, Theater,
  PostSecondary, PrivateEarly, PrivateElementry, PrivateHigh, PrivateJunior, PrivateK8, PrivateK12, 
  PublicElementry, PublicHigh, PublicJunior, PublicK8, PublicK12, PublicBuilding, PublicSecondary,
  Consulate, Court, Embassy, GOffice, Military, PostOffice,
  Hospital, Inpatient, Outpatient,
  Corrections, Battalion, Division, Engine, Special, 
  CCB, Checkpoint, Precinct, NOther,
  Amusement, Beach, Botanical, Garden, Golf, Park, Playground, RecCenter, Sports, Zoo,
  Church, Convent, Mosque, Synagogue, Temple,
  Constituent, Gated, PrivateDev, PublicHousing,
  Adult, Homeless, Nursing,
  Airport, Bridge, Bus, Ferry, Heliport, Marina, Mile, Intersection,
  Subway, Pier, Rail, Toll, Transit, Tunnel, WaterNav,
  Island, Lake, River,
  Center, Cemetery, Landmark, POI, Other
]);

var selectControl = new OpenLayers.Control.SelectFeature(
[ 
  Business,
  Hotel, Market, Restaurant,
  Library, Museum, Theater,
  PostSecondary, PrivateEarly, PrivateElementry, PrivateHigh, PrivateJunior, PrivateK8, PrivateK12, 
  PublicElementry, PublicHigh, PublicJunior, PublicK8, PublicK12, PublicBuilding, PublicSecondary,
  Consulate, Court, Embassy, GOffice, Military, PostOffice,
  Hospital, Inpatient, Outpatient,
  Corrections, Battalion, Division, Engine, Special, 
  CCB, Checkpoint, Precinct, NOther,
  Amusement, Beach, Botanical, Garden, Golf, Park, Playground, RecCenter, Sports, Zoo,
  Church, Convent, Mosque, Synagogue, Temple,
  Constituent, Gated, PrivateDev, PublicHousing,
  Adult, Homeless, Nursing,
  Airport, Bridge, Bus, Ferry, Heliport, Marina, Mile, Intersection,
  NYPDSubway, Pier, Rail, Toll, Transit, Tunnel, WaterNav,
  Island, Lake, River,
  Center, Cemetery, Landmark, POI, Other
],
{ onSelect: onFeatureSelect, onUnselect: onFeatureUnselect });

proprietaryMap.addControl(selectControl);
selectControl.activate();

如果您发布了代码的最小化版本,将更容易帮助您。首先阅读如何,然后您可以使用jsfiddle.net来主持一个小演示。

@alexdube77谢谢您的帮助。你给我指出了正确的方向

在创建最小化版本时,我发现了问题。我必须移动添加标记、多段线和标签层的位置,从上面的层之后移动到上面的层之前。这使得这些图层被绘制在上面图层的下方,并使KML图层可以单击。我还必须添加以下代码,并在添加所有层后调用它,以使标记可单击:

function checkMarkerZIndex() {
  var olDivs = document.querySelectorAll('.olLayerDiv');
  for (var i = 0; i < olDivs.length; i++) {
  if (olDivs[i].id.indexOf('OpenLayers_Layer_Markers') > -1)
    olDivs[i].style.zIndex = '2000';
  }
}
函数checkerMarkerzindex(){
var olDivs=document.querySelectorAll('.olLayerDiv');
对于(变量i=0;i-1)
olDivs[i].style.zIndex='2000';
}
}