From 84fd72e3db347e05038002149e36f230af3bb954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e?= <tpoussard@neogeo.fr> Date: Tue, 9 Aug 2022 14:55:26 +0200 Subject: [PATCH] add snap on feature edition & fix undefined feature_type in popup --- src/services/edition-service.js | 24 +++++++++++++++++++++++- src/services/map-service.js | 2 +- src/views/Feature/FeatureEdit.vue | 1 + 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/services/edition-service.js b/src/services/edition-service.js index 850bc21f..2b25a85e 100644 --- a/src/services/edition-service.js +++ b/src/services/edition-service.js @@ -1,4 +1,4 @@ -import { Draw } from 'ol/interaction'; +import { Draw, Snap } from 'ol/interaction'; import GeometryType from 'ol/geom/GeometryType'; import Modify from 'ol/interaction/Modify'; import Select from 'ol/interaction/Select'; @@ -267,6 +267,28 @@ const editionService = { removeActiveFeatures() { this.drawnFeature = null; this.featureToEdit = null; + }, + + addSnapInteraction(map) { + // The snap interaction must be added after the Modify and Draw interactions + // in order for its map browser event handlers to be fired first. Its handlers + // are responsible of doing the snapping. + + // Since we can't give a list of source to snap, + // we use this workaround, an interaction collection: https://github.com/openlayers/openlayers/issues/7100 + let interactions = []; + map.getLayers().forEach((layer) => { + if (layer instanceof VectorLayer) { + let interaction = new Snap({ + source: layer.getSource() + }); + interactions.push(interaction); + } + }); + + for(let snap of interactions ) { + map.addInteraction(snap); + } } }; diff --git a/src/services/map-service.js b/src/services/map-service.js index 63e4204c..c9f696e6 100644 --- a/src/services/map-service.js +++ b/src/services/map-service.js @@ -554,7 +554,7 @@ const mapService = { Statut : ${status} </div> <div> - Type : <a id="goToFeatureTypeDetail" class="pointer"> ${feature_type.title} </a> + Type : ${ feature_type ? '<a id="goToFeatureTypeDetail" class="pointer">' + feature_type.title + '</a>' : 'Type de signalement inconnu' } </div> <div> Dernière mise à jour : ${date_maj} diff --git a/src/views/Feature/FeatureEdit.vue b/src/views/Feature/FeatureEdit.vue index 6059ea53..45a27e77 100644 --- a/src/views/Feature/FeatureEdit.vue +++ b/src/views/Feature/FeatureEdit.vue @@ -888,6 +888,7 @@ export default { )[0]; editionService.setFeatureToEdit(currentFeature); this.updateMap(currentFeature); + editionService.addSnapInteraction(this.map); } } this.mapLoading = false; -- GitLab