diff --git a/src/module_vmap/module/javascript/app/vmap/map/mapcompare.js b/src/module_vmap/module/javascript/app/vmap/map/mapcompare.js index 8fe1d59030260107747379a12f61b466731e50ef..c894667b75001854e09a37bf4b0633605e69b831 100644 --- a/src/module_vmap/module/javascript/app/vmap/map/mapcompare.js +++ b/src/module_vmap/module/javascript/app/vmap/map/mapcompare.js @@ -526,17 +526,22 @@ nsVmap.MapCompare.prototype.mapCompareController.prototype.startAnimation = func this.animationDelay.start(); }; + /** * Update the map size with animation * @returns {undefined} - * @export */ nsVmap.MapCompare.prototype.mapCompareController.prototype.synchronizeMap = function () { oVmap.log('nsVmap.MapCompare.prototype.mapCompareController.prototype.synchronizeMap'); var this_ = this; + var isMouseDown = false; // blocage infinite loop - oVmap.getMap().getOLMap().getTargetElement().addEventListener('mousedown', function(){this_.isOnElement = 'map';}); - this_.map.getTargetElement().addEventListener('mousedown', function(){this_.isOnElement = 'mapCompare';}); + oVmap.getMap().getOLMap().getTargetElement().addEventListener('mousedown', function(){this_.isOnElement = 'map';isMouseDown = true;}); + this_.map.getTargetElement().addEventListener('mousedown', function(){this_.isOnElement = 'mapCompare';isMouseDown = true;}); + oVmap.getMap().getOLMap().getTargetElement().addEventListener('mouseup', function(){this_.isOnElement = 'map';isMouseDown = false;}); + this_.map.getTargetElement().addEventListener('mouseup', function(){this_.isOnElement = 'mapCompare';isMouseDown = false;}); + oVmap.getMap().getOLMap().getTargetElement().addEventListener('mouseenter', function(){if(!isMouseDown)this_.isOnElement = 'map';}); + this_.map.getTargetElement().addEventListener('mouseenter', function(){if(!isMouseDown)this_.isOnElement = 'mapCompare';}); // position du curseur sur l'autre carte oVmap.getMap().getOLMap().on('pointermove', function(e){ var coord = e.coordinate; @@ -597,67 +602,52 @@ nsVmap.MapCompare.prototype.mapCompareController.prototype.synchronizeMap = func this_.targetOverlay_.setPosition(convertCoord); }); // synchro de la carte avec la carte de comparaison - oVmap.getMap().getOLMap().getView().on("change:center", function(e){ - if(this_.isOnElement === 'map'){ - // Récupère l'étendue de la carte principale - var oldCenter = oVmap.getMap().getOLMap().getView().getCenter(); - - // Récupère l'ancienne et la nouvelle projection - var oldProjection = oVmap.getMap().getOLMap().getView().getProjection().getCode(); - var newProjection = this_.map.getView().getProjection().getCode(); - - var newCenter = ol.proj.transform(oldCenter, oldProjection, newProjection); - - this_.map.getView().setCenter(newCenter); - } - }, this); - oVmap.getMap().getOLMap().getView().on("change:resolution", function(e){ - if (this_.map.getView().getResolution() != oVmap.getMap().getOLMap().getView().getResolution()){ - this_.map.getView().setResolution(oVmap.getMap().getOLMap().getView().getResolution()); - - // Récupère l'étendue de la carte principale - var oldCenter = oVmap.getMap().getOLMap().getView().getCenter(); - - // Récupère l'ancienne et la nouvelle projection - var oldProjection = oVmap.getMap().getOLMap().getView().getProjection().getCode(); - var newProjection = this_.map.getView().getProjection().getCode(); - - var newCenter = ol.proj.transform(oldCenter, oldProjection, newProjection); - - this_.map.getView().setCenter(newCenter); - } - }, this); + oVmap.getMap().getOLMap().on("postrender", this_.updateCompareMap, this); // synchro de la carte de comapraison avec la carte de base - this_.map.getView().on("change:center", function(e){ - if(this_.isOnElement === 'mapCompare'){ - // Récupère l'étendue de la carte principale - var oldCenter = this_.map.getView().getCenter(); + this_.map.on("postrender", this_.updateBasicMap, this); +}; +/** + * Update the map extent with animation + * @returns {undefined} + */ +nsVmap.MapCompare.prototype.mapCompareController.prototype.updateBasicMap = function(e){ + var this_ = this + if(this_.isOnElement === 'mapCompare'){ + // Récupère l'étendue de la carte principale + var oldExtent = this_.map.getView().calculateExtent(this_['map'].getSize()); - // Récupère l'ancienne et la nouvelle projection - var newProjection = oVmap.getMap().getOLMap().getView().getProjection().getCode(); - var oldProjection = this_.map.getView().getProjection().getCode(); + // Récupère l'ancienne et la nouvelle projection + var newProjection = oVmap.getMap().getOLMap().getView().getProjection().getCode(); + var oldProjection = this_.map.getView().getProjection().getCode(); - var newCenter = ol.proj.transform(oldCenter, oldProjection, newProjection); + var newExtent = ol.proj.transformExtent(oldExtent, oldProjection, newProjection); + oVmap.getMap().getOLMap().getView().fit(newExtent, { + nearest: true + }); - oVmap.getMap().getOLMap().getView().setCenter(newCenter); - } - }, this); - this_.map.getView().on("change:resolution", function(e){ - if (this_.map.getView().getResolution() != oVmap.getMap().getOLMap().getView().getResolution()){ - oVmap.getMap().getOLMap().getView().setResolution(this_.map.getView().getResolution()); - // Récupère l'étendue de la carte principale - var oldCenter = this_.map.getView().getCenter(); + } +} +/** + * Update the map extent with animation + * @returns {undefined} + */ +nsVmap.MapCompare.prototype.mapCompareController.prototype.updateCompareMap = function(e){ + var this_ = this; + if(this_.isOnElement === 'map'){ + // Récupère l'étendue de la carte principale + var oldExtent = oVmap.getMap().getOLMap().getView().calculateExtent(oVmap.getMap().getOLMap().getSize()); - // Récupère l'ancienne et la nouvelle projection - var newProjection = oVmap.getMap().getOLMap().getView().getProjection().getCode(); - var oldProjection = this_.map.getView().getProjection().getCode(); + // Récupère l'ancienne et la nouvelle projection + var oldProjection = oVmap.getMap().getOLMap().getView().getProjection().getCode(); + var newProjection = this_.map.getView().getProjection().getCode(); - var newCenter = ol.proj.transform(oldCenter, oldProjection, newProjection); + var newExtent = ol.proj.transformExtent(oldExtent, oldProjection, newProjection); + this_['map'].getView().fit(newExtent, { + nearest: true + }); - oVmap.getMap().getOLMap().getView().setCenter(newCenter); - } - }, this); -}; + } +} /** * Add a layer on the map