すべてのマップレイヤーのすべてのフィーチャをトラバースするか、作成時にすべてのフィーチャ内に人工レイヤーIDを保存しない限り、選択イベントのフィーチャからその一部である可能性のあるレイヤーに移動する方法を見つけることができません。これはまだ不可能ですか?
ol.js 3.7.0ol.interaction.Selection->クリック-> callback(event){event.selected [0]}
アプリの別の部分では、機能からレイヤーに移動して、機能で使用されているスタイル、具体的には表示されているかどうかを確認したいと思います。
ol.Feature.getStyle()|| ol.Feature->(レイヤー?)-> getStyle()
フィルタ機能を試すことができます:
var select = new ol.interaction.Select({
condition: ...,
filter: function(feature, layer){
console.info(feature);
console.info(layer.get('name'));
}
});
[〜#〜]更新[〜#〜]
私はこのプロトタイプの方法を思いついた、それは仕事をする:
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'));
}
});
OL 5.3.0では、インタラクションオブジェクトの選択には、最後に選択されたフィーチャの関連レイヤーを取得するための getLayer() 関数があります。例:
let selectClick = new Select({});
map.addInteraction(selectClick);
selectClick.on('select', function(e) {
let featureSelected = e.selected[0];
let layer = selectClick.getLayer(featureSelected);
console.log(layer); // here you have the selected layer
});
Openlayersでは4 -map.forEachFeatureAtPixel
を使用して、各機能の親レイヤーを取得できます。
ここのコードスニペットを参照してください: https://stackoverflow.com/a/50415743/2288488