在我的 openlayers 5(基于 angular 6 应用程序)中,我正在实现一个功能,您可以在其中搜索某些内容,查询数据库,数据库会带回一些 geoJSON,然后我将这个 geoJSON 数据呈现在一个 ol 矢量图层中。
有两种不同的搜索方式,所以有两种不同的形式将geoJSOn带回同一个ol向量。
当然,在渲染数据之前,我必须清除图层。
这是我的代码
ngOnInit() {//initialize some params and the ol map
//bring results-as you type - pure angular
this.results = this.myForm.valueChanges.pipe(
switchMap( formdata => this.mapcmsService.searchName(formdata.name, formdata.cepDrop))
);//pipe
this.tilesource = new OlXYZ({
url:'http://tile.stamen.com/terrain/{z}/{x}/{y}.jpg'
});
this.tilelayer = new OlTileLayer({
source: this.tilesource
});
this.vectorsource = new VectorSource({});
this.vectorlayer = new VectorLayer({
source: this.vectorsource
});
this.view = new OlView({
center: OlProj.fromLonLat([6.661594, 50.433237]),
zoom: 2,
});
this.olmap = new OlMap({
target: 'map',
layers: [this.tilelayer,this.vectorlayer],
view: this.view,
projection: 'EPSG:3857'
});
const selectClick = new Select({
condition: click,
layers:[this.vectorlayer]
});
this.olmap.addInteraction(selectClick);
selectClick.on(
'select', ()=>{
const values = selectClick.getFeatures().item(0).values_;
this.getDetails(values.id);
}
);
} //closes ngOnInit
在ngOnInit
初始化之后,有两个不同的函数将geoJSON带到同一个ol向量层。他们基本上做同样的事情。
searchById(id){
this.map_loading = true;
this.myService.getById(id).subscribe((data) =>{
this.vectorsource.refresh();
this.vectorsource.clear();
const fff = (new GeoJSON()).readFeatures(data.data);
this.vectorsource.addFeatures(fff);
this.map_loading = false;
})
}//searchById
和
searchCategories(){
this.map_loading = true;
this.myService.categoriesSearch(this.categoriesForm.value).subscribe((data) =>{
this.vectorsource.refresh();
this.vectorsource.clear();
const fff = (new GeoJSON()).readFeatures(data.data);
this.vectorsource.addFeatures(fff);
this.map_loading = false;
})
}//searchCategories
问题是在添加新特征之前并不总是清除 ol 矢量源。我搜索一些东西,呈现特征。我再次搜索,有时,旧功能与新功能一起保留在地图上。
我做了一个愚蠢的举动来添加refresh
,clean
没有任何东西是固定的。这不是标准的,例如每隔一个搜索。这是随机发生的,我不知道如何调试它。请指教
谢谢