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)