2016-02-05 3 views
4

Я работаю над OpenLayers 3 с Geoserver, у меня есть четыре векторных слоя, я использую событие singleclick, чтобы получить свойства для каждой функции и показать их во всплывающем окне ,Получить свойства свойств для слоя, который был нажат в OpenLayers 3

Теперь моя проблема в том, что когда я нажимаю на функцию с самого высокого уровня, я получаю все свойства из всех слоев, которые ниже, я использовал forEachFeatureAtPixel, но я не знаю, как указать его для каждого слоя!

Вот мой код:

var OpenMeters = function (evt) { 
content.innerHTML = ""; 
var feature = map.forEachFeatureAtPixel(evt.pixel, 
    function (feature, layer) { 
     if (feature) { 
      var coord = map.getCoordinateFromPixel(evt.pixel); 
      var objeto = feature.getProperties(),propiedades; 
      for (propiedades in objeto) 
      { 
       content.innerHTML += '<b>' + propiedades + '</b> : <i><b>'+ objeto[propiedades]+'</b></i><br />'; 
      } 
      overlay.setPosition(coord); 
     } else { 
      overlay.setPosition(undefined); 
     } 
    }); 
}; 

map.on('singleclick', OpenMeters); 

var select = new ol.interaction.Select(); 
map.addInteraction(select); 

Как я могу указать singleclick событие для каждого слоя? Любая помощь?

+0

по крайней мере, для меня, это не ясно, что вы хотите. Может быть, вам нужен фильтр слоя? См. Http://gis.stackexchange.com/a/127072/50718. –

+0

Я видел это и пробовал ... но он дает мне свойства только для слоя, который я вложил в фильтр, и если я нажму на другой слой, он не даст никаких свойств. В том же пикселе, который я нажимаю, у меня есть три функции друг под друга, что я хочу, когда я нажимаю на функцию с самого высокого уровня, чтобы дать мне свойства этой функции только в этом слое, а не все предопределения для функций в пикселе, так понятно ? – Sheyar

+0

Не совсем. Возможно, вы положили это на скрипку. –

ответ

1

Вы не можете указать один щелчок для каждого слоя, но в соответствии с api doc of forEachFeatureAtPixel function:

Returns: 

Callback result, i.e. the return value of last callback execution, or the first truthy callback return value. 

Так что, если ваше возвращение значения на первый вызов функции обратного вызова, вы получите первую функцию вы попали:

var feature = map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) { 
    return feature;  
}); 
if (feature) { 
    var coord = map.getCoordinateFromPixel(evt.pixel); 
    var objeto = feature.getProperties(),propiedades; 
    for (propiedades in objeto) { 
    content.innerHTML += '<b>' + propiedades + '</b> : <i><b>'+ objeto[propiedades]+'</b></i><br />'; 
    } 
    overlay.setPosition(coord); 
    } else { 
    overlay.setPosition(undefined); 
    } 
}; 

SNIPPET нЕ ПРОВЕРЕНО

 Смежные вопросы

  • Нет связанных вопросов^_^