簡體   English   中英

OpenLayers SelectFeature在幾層上

[英]OpenLayers SelectFeature on several layers

我正在使用LayerSwitcher在OpenLayers映射中添加幾個KML層(88)。 我已經將所有圖層添加到SelectFeature控件中。 但是,一旦使用OpenLayers.Map.addLayers在地圖上添加了77多個圖層,就永遠不會調用SelectFeature的onSelect函數。

它似乎與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';
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM