2014-03-04 38 views
1

我使用LayerSwitcher將幾個KML圖層(88)添加到OpenLayers地圖中。我已將所有圖層添加到SelectFeature控件。但是,一旦我使用OpenLayers.Map.addLayers向地圖添加超過77層的圖層,SelectFeature的onSelect函數就不會被調用。OpenLayers SelectFeature在幾個圖層上

它似乎與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(); 

回答

0

@ alexdube77感謝您的幫助。你讓我指出了正確的方向。

在創建最小化版本時,我發現問題。我必須移動從Marker,Polyline和Label圖層到上面圖層之前的位置。這導致這些圖層被繪製在上面的圖層下方,並使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'; 
    } 
} 
0

如果您發佈了最小化版本的代碼,那將會更容易幫助您。首先閱讀如何minimize your code,然後您可以使用jsfiddle.net主持一個小演示。