Skip to content

Commit 45d2587

Browse files
committed
correction map resultats déclarations
1 parent 5a2e135 commit 45d2587

4 files changed

Lines changed: 47 additions & 22 deletions

File tree

frontend/src/components/map/base-map.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,15 @@ export default {
229229
// Le service sera stocké dans state._mapServices.
230230
this.$store.commit('setMapService', this.mapService);
231231
232-
// Initialise les couches, tuiles et marqueurs de la carte.
233-
this.mapService.init();
232+
// Initialise les couches, tuiles et marqueurs de la carte, une fois que Vue a appliqué au DOM
233+
// la vraie hauteur du conteneur (computedHeight passe de "0px" à sa valeur réelle avec bInit).
234+
// Sans ce $nextTick, L.map() est créée sur un conteneur de hauteur 0 : le fond de carte ne
235+
// couvre pas toute la zone visible (grisé en bas) et l'ajout des marqueurs plante (le rendu SVG
236+
// de Leaflet n'a pas encore de bounds valides), ce qui empêche aussi les marqueurs suivants de
237+
// s'afficher.
238+
this.$nextTick(() => {
239+
this.mapService.init();
240+
});
234241
235242
// Ajoute un écouteur d'événement sur l'élément DOM de la carte.
236243
// Cet événement "layer-data" permet de gérer la sélection dynamique des couches.

frontend/src/components/map/map-elements/map-layer.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,13 @@ const mapLayer = {
132132
* zoom on layer
133133
*/
134134
zoomOnLayer: function (layer) {
135-
this._map.fitBounds(layer.getBounds());
135+
const bounds = layer.getBounds();
136+
// Une couche sans géométrie valide (ex: réponse API vide) donne des bounds invalides ;
137+
// fitBounds lèverait alors une exception qui empêcherait toute correction ultérieure du zoom.
138+
if (!bounds.isValid()) {
139+
return;
140+
}
141+
this._map.fitBounds(bounds);
136142
},
137143

138144
reinitZoom() {
@@ -153,6 +159,9 @@ const mapLayer = {
153159
}
154160
const layersGroup = L.featureGroup(layers);
155161
const bounds = layersGroup.getBounds();
162+
if (!bounds.isValid()) {
163+
return false;
164+
}
156165
this._map.fitBounds(bounds);
157166
return true;
158167
},

frontend/src/components/map/map-elements/map-marker.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ const mapMarker = {
6464
initMarkers() {
6565
this.removeMarkers();
6666
for (const marker of this._config.markers || []) {
67-
this.addMarker(marker);
67+
// Un marqueur en erreur (ex: carte pas encore correctement dimensionnée) ne doit pas
68+
// empêcher l'ajout de tous les marqueurs suivants de la boucle.
69+
try {
70+
this.addMarker(marker);
71+
} catch (error) {
72+
console.error('Erreur ajout marqueur carte:', error);
73+
}
6874
}
6975
this.upConfig();
7076
},

frontend/src/components/map/map-service.js

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,12 @@ class MapService {
118118
* 2. Crée l'objet carte Leaflet et définit les options de zoom.
119119
* 3. Centre la carte sur la vue initiale et le niveau de zoom défini dans la configuration.
120120
* 4. Ajoute le contrôle d'échelle à la carte.
121-
* 5. Initialise les panneaux (panes) pour la gestion des couches.
122-
* 6. Initialise les fonds de tuiles (tiles) de la carte.
123-
* 7. Initialise les couches supplémentaires (layers).
124-
* 8. Initialise les marqueurs sur la carte.
125-
* 9. Observe le conteneur et corrige la taille de la carte quand elle change réellement.
121+
* 5. Observe le conteneur et corrige la taille de la carte quand elle change réellement
122+
* (avant les étapes suivantes pour rester actif même si l'une d'elles plante).
123+
* 6. Initialise les panneaux (panes) pour la gestion des couches.
124+
* 7. Initialise les fonds de tuiles (tiles) de la carte.
125+
* 8. Initialise les couches supplémentaires (layers).
126+
* 9. Initialise les marqueurs sur la carte.
126127
*
127128
* @returns {boolean} true si l'initialisation a réussi, false sinon.
128129
*/
@@ -151,22 +152,12 @@ class MapService {
151152
// 4. Ajoute un contrôle d'échelle (barre d'échelle) à la carte.
152153
L.control.scale().addTo(this._map);
153154

154-
// 5. Initialise les panneaux (panes) pour organiser les couches de la carte.
155-
this.initPanes();
156-
157-
// 6. Initialise les fonds de tuiles (tiles) de la carte.
158-
this.initTiles();
159-
160-
// 7. Initialise les couches supplémentaires (layers) sur la carte.
161-
this.initLayers();
162-
163-
// 8. Initialise les marqueurs sur la carte.
164-
this.initMarkers();
165-
166-
// 9. Corrige la taille de la carte quand son conteneur change réellement de dimensions
155+
// 5. Corrige la taille de la carte quand son conteneur change réellement de dimensions
167156
// (layout Vuetify qui se stabilise, panneau qui s'ouvre/ferme, etc.), au lieu de
168157
// la deviner via une salve de setTimeout qui rechargeait les tuiles en aveugle et
169158
// provoquait des annulations de requêtes (NS_BINDING_ABORTED) visibles dans Firefox.
159+
// Fait avant l'init des panes/tiles/layers/markers ci-dessous : si l'un d'eux plante,
160+
// l'observer reste quand même actif et peut corriger la taille de la carte après coup.
170161
const container = document.getElementById(this._id);
171162
if (container && typeof ResizeObserver !== 'undefined') {
172163
let debounce;
@@ -181,6 +172,18 @@ class MapService {
181172
this._resizeObserver.observe(container);
182173
}
183174

175+
// 6. Initialise les panneaux (panes) pour organiser les couches de la carte.
176+
this.initPanes();
177+
178+
// 7. Initialise les fonds de tuiles (tiles) de la carte.
179+
this.initTiles();
180+
181+
// 8. Initialise les couches supplémentaires (layers) sur la carte.
182+
this.initLayers();
183+
184+
// 9. Initialise les marqueurs sur la carte.
185+
this.initMarkers();
186+
184187
// Retourne true si l'initialisation s'est déroulée correctement.
185188
return true;
186189
};

0 commit comments

Comments
 (0)