From b2b510d4ee1f3c1732998dca8730c896948fc7a2 Mon Sep 17 00:00:00 2001 From: peer35 Date: Tue, 25 Aug 2020 15:38:34 +0200 Subject: [PATCH] clustering refinement #28 --- src/components/shared/ol/Map.vue | 50 ++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/src/components/shared/ol/Map.vue b/src/components/shared/ol/Map.vue index 4e3e31a..d374b9a 100644 --- a/src/components/shared/ol/Map.vue +++ b/src/components/shared/ol/Map.vue @@ -97,25 +97,6 @@ this.map.getTargetElement().style.cursor = this.map.hasFeatureAtPixel(this.map.getEventPixel(evt.originalEvent)) ? 'pointer' : ''; } }); - let view = this.map.getView(); - let zoom = view.getZoom(); - let clustered = true; - if (zoom >= me.$config.cluster_zoomlevel) { - clustered = false; - me.updateClusters(false); - } - view.on('change:resolution', function () { - if (view.getZoom() % 1 == 0) { - let zoom = view.getZoom(); - if (zoom >= me.$config.cluster_zoomlevel && clustered) { - clustered = false; - me.updateClusters(false); - } else if (zoom < me.$config.cluster_zoomlevel && !clustered) { - clustered = true; - me.updateClusters(true); - } - } - }); }, created() { console.log('map created'); @@ -140,22 +121,49 @@ view.fit(transformExtent(config.bbox, 'EPSG:4326', view.getProjection()), this.map.getSize()); this.map.setView(view); - + this.setViewOptions(view); this.addBaseLayers(config.available_crs); console.log('start adding layers'); this.addLayers(config); }, + setViewOptions: function(view){ + let me=this; + let resolution = view.getResolution(); + let clustered = true; + if (resolution < me.$config.cluster_resolution) { + clustered = false; + me.updateClusters(false); + } + view.on('change:resolution', function () { + const zoom = view.getZoom(); + const resolution = view.getResolution(); + + if (zoom % 1 == 0) { + console.log(resolution); + if (resolution < me.$config.cluster_resolution && clustered) { + clustered = false; + me.updateClusters(false); + } else if (resolution > me.$config.cluster_resolution && !clustered) { + clustered = true; + me.updateClusters(true); + } + } + }); + }, reProject: function (crs) { console.log('reproject to ' + crs); const curview = this.map.getView(this.map.getSize()); const extent = transformExtent(curview.calculateExtent(), curview.getProjection().getCode(), crs); const view = new View({ - projection: crs + projection: crs, + enableRotation: false, + constrainResolution: true // keep this or clustering updates break }); view.fit(extent, {size: this.map.getSize(), nearest: true}); this.clearVectorLayers(); this.map.setView(view); + this.setViewOptions(view); }, clearVectorLayers() { var layers = this.map.getLayers();