Skip to content

Commit 654a29b

Browse files
committed
【fix】修复mapboxgl mapvlayer在移除后拖动报错的问题,commit by zhangjiangqiu review by songym
1 parent 2c81fe8 commit 654a29b

File tree

1 file changed

+59
-19
lines changed

1 file changed

+59
-19
lines changed

src/mapboxgl/overlay/mapv/MapvRenderer.js

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
/* Copyright© 2000 - 2020 SuperMap Software Co.Ltd. All rights reserved.
22
* This program are made available under the terms of the Apache License, Version 2.0
33
* which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
4-
import { baiduMapLayer } from 'mapv';
4+
import {
5+
baiduMapLayer
6+
} from 'mapv';
57
import mapboxgl from 'mapbox-gl';
6-
import { getMeterPerMapUnit } from '@supermap/iclient-common';
8+
import {
9+
getMeterPerMapUnit
10+
} from '@supermap/iclient-common';
711

812
var BaseLayer = baiduMapLayer ? baiduMapLayer.__proto__ : Function;
913

@@ -35,17 +39,7 @@ export class MapvRenderer extends BaseLayer {
3539
this.animation = options.animation;
3640
this.clickEvent = this.clickEvent.bind(this);
3741
this.mousemoveEvent = this.mousemoveEvent.bind(this);
38-
this.map.on('resize', this.resizeEvent.bind(this));
39-
this.map.on('zoomstart', this.zoomStartEvent.bind(this));
40-
this.map.on('zoomend', this.zoomEndEvent.bind(this));
41-
this.map.on('rotatestart', this.rotateStartEvent.bind(this));
42-
this.map.on('rotate', this.rotateEvent.bind(this));
43-
this.map.on('rotateend', this.rotateEndEvent.bind(this));
44-
// this.map.on('dragend', this.dragEndEvent.bind(this));
45-
this.map.on('movestart', this.moveStartEvent.bind(this));
46-
this.map.on('move', this.moveEvent.bind(this));
47-
this.map.on('moveend', this.moveEndEvent.bind(this));
48-
this.map.on('remove', this.removeEvent.bind(this));
42+
this.bindMapEvent();
4943
this.bindEvent();
5044
this._expectShow = true;
5145
}
@@ -92,7 +86,6 @@ export class MapvRenderer extends BaseLayer {
9286
*/
9387
unbindEvent() {
9488
var map = this.map;
95-
9689
if (this.options.methods) {
9790
if (this.options.methods.click) {
9891
map.off('click', this.clickEvent);
@@ -167,7 +160,7 @@ export class MapvRenderer extends BaseLayer {
167160
return;
168161
}
169162
var newData = this.dataSet.get({
170-
filter: function(data) {
163+
filter: function (data) {
171164
return filter != null && typeof filter === 'function' ? !filter(data) : true;
172165
}
173166
});
@@ -255,7 +248,7 @@ export class MapvRenderer extends BaseLayer {
255248
var center = map.getCenter();
256249
var centerPx = map.project(center);
257250
var dataGetOptions = {
258-
transferCoordinate: function(coordinate) {
251+
transferCoordinate: function (coordinate) {
259252
if (map.transform.rotationMatrix || self.context === '2d') {
260253
var worldPoint = map.project(new mapboxgl.LngLat(coordinate[0], coordinate[1]));
261254
return [worldPoint.x, worldPoint.y];
@@ -266,7 +259,7 @@ export class MapvRenderer extends BaseLayer {
266259
};
267260

268261
if (time !== undefined) {
269-
dataGetOptions.filter = function(item) {
262+
dataGetOptions.filter = function (item) {
270263
var trails = animationOptions.trails || 10;
271264
return time && item.time > time - trails && item.time < time;
272265
};
@@ -297,6 +290,7 @@ export class MapvRenderer extends BaseLayer {
297290
this.drawContext(context, data, self.options, worldPoint);
298291

299292
self.options.updateCallback && self.options.updateCallback(time);
293+
300294
}
301295

302296
init(options) {
@@ -307,26 +301,72 @@ export class MapvRenderer extends BaseLayer {
307301
this.initDataRange(options);
308302

309303
this.context = self.options.context || '2d';
310-
311304
if (self.options.zIndex) {
312305
this.canvasLayer && this.canvasLayer.setZIndex(self.options.zIndex);
313306
}
314-
315307
this.initAnimator();
316308
}
309+
/**
310+
* @function L.supermap.MapVRenderer.prototype.bindMapEvent
311+
* @description 绑定鼠标移动事件。
312+
*/
313+
bindMapEvent() {
314+
this.mapEvent = {
315+
resizeEvent: this.resizeEvent.bind(this),
316+
zoomStartEvent: this.zoomStartEvent.bind(this),
317+
zoomEndEvent: this.zoomEndEvent.bind(this),
318+
rotateStartEvent: this.rotateStartEvent.bind(this),
319+
rotateEvent: this.rotateEvent.bind(this),
320+
moveStartEvent: this.moveStartEvent.bind(this),
321+
rotateEndEvent: this.rotateEndEvent.bind(this),
322+
moveEvent: this.moveEvent.bind(this),
323+
moveEndEvent: this.moveEndEvent.bind(this),
324+
removeEvent: this.removeEvent.bind(this)
325+
}
326+
this.map.on('resize', this.mapEvent.resizeEvent);
327+
this.map.on('zoomstart', this.mapEvent.zoomStartEvent);
328+
this.map.on('zoomend', this.mapEvent.zoomEndEvent);
329+
this.map.on('rotatestart', this.mapEvent.rotateStartEvent);
330+
this.map.on('rotate', this.mapEvent.rotateEvent);
331+
this.map.on('rotateend', this.mapEvent.rotateEndEvent);
332+
// this.map.on('dragend', this.dragEndEvent.bind(this));
333+
this.map.on('movestart', this.mapEvent.moveStartEvent);
334+
this.map.on('move', this.mapEvent.moveEvent);
335+
this.map.on('moveend', this.mapEvent.moveEndEvent);
336+
this.map.on('remove', this.mapEvent.removeEvent);
337+
}
338+
339+
/**
340+
* @function L.supermap.MapVRenderer.prototype.unbindMapEvent
341+
* @description 解绑鼠标移动事件。
342+
*/
343+
unbindMapEvent() {
344+
this.map.off('resize', this.mapEvent.resizeEvent);
345+
this.map.off('zoomstart', this.mapEvent.zoomStartEvent);
346+
this.map.off('zoomend', this.mapEvent.zoomEndEvent);
347+
this.map.off('rotatestart', this.mapEvent.rotateStartEvent);
348+
this.map.off('rotate', this.mapEvent.rotateEvent);
349+
this.map.off('rotateend', this.mapEvent.rotateEndEvent);
350+
this.map.off('movestart', this.mapEvent.moveStartEvent);
351+
this.map.off('move', this.mapEvent.moveEvent);
352+
this.map.off('moveend', this.mapEvent.moveEndEvent);
353+
this.map.off('remove', this.mapEvent.removeEvent);
354+
}
317355

318356
/**
319357
* @function L.supermap.MapVRenderer.prototype.destroy
320358
* @description 释放资源。
321359
*/
322360
destroy() {
361+
this.unbindMapEvent();
323362
this.unbindEvent();
324363
this.clearData();
325364
this.animator && this.animator.stop();
326365
this.animator = null;
327366
this.canvasLayer = null;
328367
}
329368

369+
330370
/**
331371
* @function MapvRenderer.prototype.addAnimatorEvent
332372
* @description 添加动画事件。

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