From 77cbfb3ca914ba5e6757bfb8078f57088e1c92c2 Mon Sep 17 00:00:00 2001 From: Armand Bahi <armand.bahi@veremes.com> Date: Mon, 12 Nov 2018 16:03:51 +0100 Subject: [PATCH] Calcul des superpositions en update Fix #18 --- .../javascript/app/vmap/tools/insert.js | 20 ++++++++++++++++--- .../app/vmap/tools/select/select.js | 8 +++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/module_vmap/module/javascript/app/vmap/tools/insert.js b/src/module_vmap/module/javascript/app/vmap/tools/insert.js index 456136bc..ce07b268 100644 --- a/src/module_vmap/module/javascript/app/vmap/tools/insert.js +++ b/src/module_vmap/module/javascript/app/vmap/tools/insert.js @@ -317,6 +317,19 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController = function ($scope, // Supprime du trou de la feature (si il existe) feature lors de la sélection sur l'interaction this.deleteHole_ this.deleteHole_.on('select', this.deleteHole, this); + // Évite les superpositions à l'édition + this.modify_.on('modifyend', function (evt) { + + // Récupère la feature ajoutée + var aFeatures = evt.features.getArray(); + + var j = 0; + for (var i = 0; i < aFeatures.length; i++) { + // Évite les superpositions avec les autres couches si besoin + this_.avoidSuperpositions(aFeatures[i]); + } + }); + // Lance updateInsertObjectFeature lors de chaque changement sur this.oOverlayFeatures_ // si il n'y a pas eut de changements pendant 500ms var iTmpChanges = 0; @@ -324,6 +337,7 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController = function ($scope, // Retire les anciennes features si on est pas en mode multi var sGeomType = $scope['oInsertObject']['sGeomType']; + // Si il ne s'agit pas d'une géométrie multiple if (goog.isDefAndNotNull(sGeomType)) { if (sGeomType.substr(0, 5) !== 'MULTI' && sGeomType !== 'GEOMETRYCOLLECTION') { @@ -1244,7 +1258,7 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.setDiffGeo this_.setDiffGeom_(aSuperpositionBos, olFeature, opt_options); } }, function(err){ - console.error('Cannot get the diff geom: ', err) + console.error('Cannot get the diff geom: ', err); }); } @@ -1282,11 +1296,11 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getDiffGeo return 0; } if (!goog.isDefAndNotNull(response['data'][0])) { - deferred.reject('response.data[0] not defined'); + deferred.resolve(sEWKTGeom); return 0; } if (!goog.isDefAndNotNull(response['data'][0]['diff_geom'])) { - deferred.reject('response.data[0].diff_geom not defined'); + deferred.resolve(sEWKTGeom); return 0; } deferred.resolve(response['data'][0]['diff_geom']); diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js index 9c89bc22..0944cee5 100755 --- a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js +++ b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js @@ -539,13 +539,14 @@ nsVmap.nsToolsManager.Select.prototype.selectController = function ($scope, $tim // Récupère la feature ajoutée var aFeatures = evt.features.getArray(); - // Évite les superpositions avec les autres couches si besoin var j = 0; for (var i = 0; i < aFeatures.length; i++) { + // Évite les superpositions avec les autres couches si besoin this_.avoidSuperpositions(aFeatures[i]).then(function(){ j++; if (!j < aFeatures.length) { setTimeout(function () { + // Enregistre les changements this_.putFeaturesOnTheElement(this_.oOverlayFeatures_.getArray()); }); } @@ -556,6 +557,7 @@ nsVmap.nsToolsManager.Select.prototype.selectController = function ($scope, $tim setTimeout(function () { if (j === 0) { console.error('avoidSuperpositions never sents callback'); + // Enregistre les changements this_.putFeaturesOnTheElement(this_.oOverlayFeatures_.getArray()); } }, 3000); @@ -2332,11 +2334,11 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getDiffGeom_ = return 0; } if (!goog.isDefAndNotNull(response['data'][0])) { - deferred.reject('response.data[0] not defined'); + deferred.resolve(sEWKTGeom); return 0; } if (!goog.isDefAndNotNull(response['data'][0]['diff_geom'])) { - deferred.reject('response.data[0].diff_geom not defined'); + deferred.resolve(sEWKTGeom); return 0; } deferred.resolve(response['data'][0]['diff_geom']); -- GitLab