Skip to content

Commit b78b0cc

Browse files
author
chenguanglin
committed
【update】优化删除图层逻辑
review by zhaoq
1 parent 0f782fd commit b78b0cc

File tree

1 file changed

+72
-14
lines changed

1 file changed

+72
-14
lines changed

src/openlayers/mapping/WebMap.js

Lines changed: 72 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,71 @@ export class WebMap extends Observable {
113113
}
114114

115115
/**
116-
* @function ol.supermap.WebMap.prototype.createMap
116+
* @function ol.supermap.WebMap.prototype._removeBaseLayer
117+
* @description 移除底图
118+
*/
119+
_removeBaseLayer() {
120+
const map = this.map;
121+
const { layer, labelLayer } = this.baseLayer;
122+
// 移除天地图标签图层
123+
labelLayer && map.removeLayer(labelLayer);
124+
// 移除图层
125+
layer && map.removeLayer(layer);
126+
this.baseLayer = null;
127+
}
128+
129+
/**
130+
* @function ol.supermap.WebMap.prototype._removeLayers
131+
* @description 移除叠加图层
132+
*/
133+
_removeLayers() {
134+
const map = this.map;
135+
this.layers.forEach(({ layerType, layer, labelLayer, pathLayer, dataflowService }) => {
136+
if (!layer) {
137+
return;
138+
}
139+
if (layerType === 'MIGRATION') {
140+
layer.remove();
141+
return;
142+
}
143+
if (layerType === 'DATAFLOW_POINT_TRACK' || layerType === 'DATAFLOW_HEAT') {
144+
// 移除轨迹图层
145+
pathLayer && map.removeLayer(pathLayer);
146+
// 取消订阅
147+
dataflowService && dataflowService.unSubscribe();
148+
}
149+
// 移除标签图层
150+
labelLayer && map.removeLayer(labelLayer);
151+
// 移除图层
152+
map.removeLayer(layer)
153+
});
154+
this.layers = [];
155+
}
156+
157+
/**
158+
* @function ol.supermap.WebMap.prototype.clear
159+
* @description 清空地图
160+
*/
161+
clear() {
162+
// 比例尺
163+
this.scales = [];
164+
// 分辨率
165+
this.resolutionArray = [];
166+
// 比例尺-分辨率 {scale: resolution}
167+
this.resolutions = {};
168+
// 计数叠加图层,处理过的数量(成功和失败都会计数)
169+
this.layerAdded = 0;
170+
171+
this._removeBaseLayer();
172+
this._removeLayers();
173+
}
174+
175+
/**
176+
* @function ol.supermap.WebMap.prototype.reRender
117177
* @description 重新渲染地图
118178
*/
119179
reRender() {
120-
// 移除所有图层 没找到清空地图的方法
121-
this.layerAdded = 0;
122-
const layers = this.map.getLayers().getArray();
123-
for (let i = 0, length = layers.length; i < length; i++) {
124-
this.map.removeLayer(layers[0]);
125-
}
180+
this.clear();
126181
this.createWebmap();
127182
}
128183

@@ -490,7 +545,7 @@ export class WebMap extends Observable {
490545
let {baseLayer} = mapInfo, layerType = baseLayer.layerType;
491546
//底图,使用默认的配置,不用存储的
492547
if(layerType !== 'TILE' && layerType !== 'WMS' && layerType !== 'WMTS'){
493-
this.getInternetMapInfo(mapInfo.baseLayer);
548+
this.getInternetMapInfo(baseLayer);
494549
}else if(layerType === 'WMTS'){
495550
// 通过请求完善信息
496551
await this.getWmtsInfo(baseLayer);
@@ -513,15 +568,16 @@ export class WebMap extends Observable {
513568
this.mapParams.extent = baseLayer.extent;
514569
this.mapParams.projection = mapInfo.projection;
515570
}
516-
if (mapInfo.baseLayer && mapInfo.baseLayer.labelLayerVisible) {
517-
let layerInfo = mapInfo.baseLayer;
571+
if (baseLayer.labelLayerVisible) {
518572
//存在天地图路网
519573
let labelLayer = new olLayer.Tile({
520-
source: this.createTiandituSource(layerInfo.layerType, mapInfo.projection, true),
521-
zIndex: layerInfo.zIndex || 1,
522-
visible: layerInfo.visible
574+
source: this.createTiandituSource(baseLayer.layerType, mapInfo.projection, true),
575+
zIndex: baseLayer.zIndex || 1,
576+
visible: baseLayer.visible
523577
});
524578
this.map.addLayer(labelLayer);
579+
// 挂载带baseLayer上,便于删除
580+
baseLayer.labelLayer = labelLayer;
525581
}
526582
}
527583
/**
@@ -3037,6 +3093,8 @@ export class WebMap extends Observable {
30373093
pathLayer.setZIndex(layerIndex);
30383094
this.map.addLayer(pathLayer);
30393095
visibleScale && this.setVisibleScales(pathLayer, visibleScale);
3096+
// 挂载到layerInfo上,便于删除
3097+
layerInfo.pathLayer = pathLayer;
30403098
}
30413099
let featureCache = {}, labelFeatureCache={}, pathFeatureCache = {}, that = this;
30423100
this.createDataflowService(layerInfo, function (featureCache, labelFeatureCache, pathFeatureCache) {
@@ -3268,8 +3326,8 @@ export class WebMap extends Observable {
32683326
});
32693327
feature.setProperties({attributes: geojson.properties});
32703328
callback(feature);
3271-
32723329
});
3330+
layerInfo.dataflowService = dataflowService;
32733331
}
32743332

32753333
/**

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy