我正在从早期版本的Openlayers升级,似乎不知道如何在矢量层中获得所有功能。
就上下文而言,我的最终目标是根据特定的数据标准设置每个特征的可见性,所以如果有其他方法可以做到这一点,我也会对此感兴趣。
我的代码是:
pointType
是一个内部参考字符串,用于区分层/数据。我所有的图层都将其作为关键。
public getFeatures(pointType: string): any {
const layer = this.getLayer(pointType);
const source = layer.getSource();
const features = null; //source.getFeatures();
return features;
}
private getLayer(pointType: string): Layer {
const layers = this.getLayers();
for (let l = 0; l < layers.length; l++) {
if (pointType === layers[l].get("pointType"))
return layers[l];
}
return null;
}
private getLayers(): Layer[] {
if (!this.map)
return null;
return this.map.getAllLayers(); // this.map is typeof ol/Map
}
我得到的Layer
是Vectorlayer
类型,Source
是VectorSource
-所以我觉得我很接近。但我似乎不知道如何跳到实际功能的最后一步。
任何帮助都将不胜感激!
编辑:其他信息。
source.getFeatures()
导致错误:
Error TS2339 (TS) Property 'getFeatures' does not exist on type 'Source'.
源来自ol/source/Source
-我需要以某种方式将其转换/转换为ol/source/Vector
吗?
第2版:简单的修复!只需将其投射到VecorSource
const features = (source as VectorSource).getFeatures();
感谢@Mike(请参阅评论(,我发现我所需要做的就是将ol/source/Source
转换为ol/source/Vector
来解决问题。
完整的getFeatures()
代码:
public getFeatures(pointType: string): any {
const layer = this.getLayer(pointType);
const source = layer.getSource();
const features = (source as VectorSource).getFeatures();
return features;
}