From 7c6f63da410cc706cb0925634f777991f1a41a8d Mon Sep 17 00:00:00 2001 From: fuzhenn Date: Fri, 15 Nov 2019 12:22:42 +0800 Subject: [PATCH] fix #1028 :redraw layer when map's view is changed, and check geos to draw when is rotating or moving --- src/renderer/layer/CanvasRenderer.js | 2 +- .../layer/vectorlayer/VectorLayerCanvasRenderer.js | 14 ++++++-------- src/renderer/map/MapCanvasRenderer.js | 10 ++++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/renderer/layer/CanvasRenderer.js b/src/renderer/layer/CanvasRenderer.js index 9e848e609..5e75f7475 100644 --- a/src/renderer/layer/CanvasRenderer.js +++ b/src/renderer/layer/CanvasRenderer.js @@ -123,7 +123,7 @@ class CanvasRenderer extends Class { */ needToRedraw() { const map = this.getMap(); - if (map.isInteracting()) { + if (map.isInteracting() || map.getRenderer().isViewChanged()) { // don't redraw when map is moving without any pitch return !(!map.getPitch() && map.isMoving() && !map.isZooming() && !map.isRotating() && !this.layer.options['forceRenderOnMoving']); } diff --git a/src/renderer/layer/vectorlayer/VectorLayerCanvasRenderer.js b/src/renderer/layer/vectorlayer/VectorLayerCanvasRenderer.js index 4b9b5d2ac..8e18f6631 100644 --- a/src/renderer/layer/vectorlayer/VectorLayerCanvasRenderer.js +++ b/src/renderer/layer/vectorlayer/VectorLayerCanvasRenderer.js @@ -84,15 +84,13 @@ class VectorLayerRenderer extends OverlayLayerCanvasRenderer { const map = this.getMap(); //refresh geometries on zooming const count = this.layer.getCount(); + const res = this.getMap().getResolution(); if (map.isZooming() && - map.options['seamlessZoom'] && - this._geosToDraw.length < count) { - const res = this.getMap().getResolution(); - if (this._drawnRes !== undefined && res > this._drawnRes * 1.5) { - this.prepareToDraw(); - this.forEachGeo(this.checkGeo, this); - this._drawnRes = res; - } + map.options['seamlessZoom'] && this._drawnRes !== undefined && res > this._drawnRes * 1.5 && + this._geosToDraw.length < count || map.isMoving() || map.isInteracting()) { + this.prepareToDraw(); + this.forEachGeo(this.checkGeo, this); + this._drawnRes = res; } for (let i = 0, l = this._geosToDraw.length; i < l; i++) { const geo = this._geosToDraw[i]; diff --git a/src/renderer/map/MapCanvasRenderer.js b/src/renderer/map/MapCanvasRenderer.js index 66661f0e5..65ddb36fd 100644 --- a/src/renderer/map/MapCanvasRenderer.js +++ b/src/renderer/map/MapCanvasRenderer.js @@ -38,6 +38,7 @@ class MapCanvasRenderer extends MapRenderer { if (!this.map) { return false; } + delete this._isViewChanged; const map = this.map; map._fireEvent('framestart'); this.updateMapDOM(); @@ -534,12 +535,13 @@ class MapCanvasRenderer extends MapRenderer { * @return {Boolean} */ isViewChanged() { + if (this._isViewChanged !== undefined) { + return this._isViewChanged; + } const previous = this._mapview; const view = this._getMapView(); - if (!previous || !equalMapView(previous, view)) { - return true; - } - return false; + this._isViewChanged = !previous || !equalMapView(previous, view); + return this._isViewChanged; } _recordView() {