Как получить слой из объекта в Openlayers 3?
Я не могу найти способ перейти от объекта в событии выбора к слою, частью которого он может быть, не пересекая все объекты всех слоев моей карты или не сохраняя искусственный идентификатор слоя в каждом объекте при создании. Разве это еще не возможно?
ol.js 3.7.0 ол.взаимодействие.Выбор -> щелчок - > обратный вызов( событие ){ событие.избранный[0] }
в другой части моего приложения, я хотел бы перейти от функции к слою, чтобы определить стиль использовать функцию, специально ли она видна.
ol.Особенность.getStyle () / / ol.Feature - > (слой?) -> getStyle()
2 ответов
вы можете попробовать с функцией фильтра:
var select = new ol.interaction.Select({
condition: ...,
filter: function(feature, layer){
console.info(feature);
console.info(layer.get('name'));
}
});
обновление
Я придумал этот метод prototypied, это делает работу:
http://jsfiddle.net/jonataswalker/r242y7ke/
/**
* This is a workaround.
* Returns the associated layer.
* @param {ol.Map} map.
* @return {ol.layer.Vector} Layer.
*/
ol.Feature.prototype.getLayer = function(map) {
var this_ = this, layer_, layersToLookFor = [];
/**
* Populates array layersToLookFor with only
* layers that have features
*/
var check = function(layer){
var source = layer.getSource();
if(source instanceof ol.source.Vector){
var features = source.getFeatures();
if(features.length > 0){
layersToLookFor.push({
layer: layer,
features: features
});
}
}
};
//loop through map layers
map.getLayers().forEach(function(layer){
if (layer instanceof ol.layer.Group) {
layer.getLayers().forEach(check);
} else {
check(layer);
}
});
layersToLookFor.forEach(function(obj){
var found = obj.features.some(function(feature){
return this_ === feature;
});
if(found){
//this is the layer we want
layer_ = obj.layer;
}
});
return layer_;
};
select.on('select', function(evt){
var feature = evt.selected[0];
if(feature){
var layer = feature.getLayer(map);
console.info(layer.getStyle());
console.info(layer.get('name'));
}
});
В Openlayers 4 -map.forEachFeatureAtPixel
может использоваться для получения родительского слоя каждого объекта.
см. фрагмент кода здесь:https://stackoverflow.com/a/50415743/2288488