suppr table ville

This commit is contained in:
mepiphana2023
2024-11-25 11:56:43 +01:00
parent 8c3be2df3b
commit 03f79de663
10 changed files with 173 additions and 309 deletions

View File

@@ -4,100 +4,62 @@ document.addEventListener("DOMContentLoaded", () => {
const saveLieuButton = document.getElementById("save-lieu");
const lieuNomInput = document.getElementById("lieu-nom");
const lieuNomError = document.getElementById("lieu-nom-error");
const villeSelect = document.getElementById("sortie_ville");
const lieuSelect = document.getElementById("sortie_lieu");
let map, marker, selectedAddress, selectedRue, cityPolygon, cityBounds;
let map, marker, selectedAddress, selectedRue, selectedVille, selectedCodePostal;
// Ouvrir la modal
document.getElementById("add-lieu-button").addEventListener("click", async () => {
const villeId = villeSelect.value;
document.getElementById("add-lieu-button").addEventListener("click", () => {
addLieuModal.classList.remove("hidden");
if (!villeId) {
alert("Veuillez sélectionner une ville avant d'ajouter un lieu.");
return;
// Détruire la carte si elle existe déjà
if (map) {
map.remove();
map = null;
marker = null;
}
try {
// Récupérer les limites et le centre de la ville depuis le serveur
const response = await fetch(`/get-bounds/${villeId}`);
if (!response.ok) {
throw new Error("Erreur lors de la récupération des informations de la ville.");
}
const data = await response.json();
// Initialiser la carte
map = L.map("map").setView([48.8566, 2.3522], 13); // Coordonnées par défaut (Paris)
L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
maxZoom: 19,
minZoom: 13,
}).addTo(map);
addLieuModal.classList.remove("hidden");
// Gérer les clics sur la carte
map.on("click", async (e) => {
const { lat, lng } = e.latlng;
selectedAddress = { lat, lng };
// Détruire la carte si elle existe déjà
if (map) {
map.remove();
map = null;
marker = null;
if (marker) {
marker.setLatLng([lat, lng]);
} else {
marker = L.marker([lat, lng]).addTo(map);
}
// Initialiser la carte
map = L.map("map").setView([data.centerLat, data.centerLng], 13);
L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
maxZoom: 19,
minZoom: 13,
}).addTo(map);
try {
// Utiliser l'API Nominatim pour récupérer les informations d'adresse
const response = await fetch(
`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`
);
if (!response.ok) {
throw new Error("Erreur lors de la récupération des informations de l'adresse.");
}
cityBounds = L.latLngBounds(
[data.south, data.west],
[data.north, data.east]
);
const data = await response.json();
selectedRue = data.address.road || "Rue inconnue";
selectedVille = data.address.city || data.address.town || data.address.village || "Ville inconnue";
selectedCodePostal = data.address.postcode || "Code postal inconnu";
map.fitBounds(cityBounds);
map.setMaxBounds(cityBounds);
// Ajouter le polygone de la ville si disponible
if (data.polygon_geojson) {
cityPolygon = L.geoJSON(data.polygon_geojson, {
style: {
color: "blue",
weight: 2,
fillOpacity: 0.3,
},
}).addTo(map);
console.log(`Rue: ${selectedRue}, Ville: ${selectedVille}, Code postal: ${selectedCodePostal}`);
} catch (error) {
console.error("Erreur lors de la recherche inversée :", error);
selectedRue = null;
selectedVille = null;
selectedCodePostal = null;
alert("Impossible de récupérer l'adresse à partir de ces coordonnées.");
}
// Gérer les clics sur la carte
map.on("click", async (e) => {
const { lat, lng } = e.latlng;
if (!cityBounds.contains([lat, lng])) {
alert("Vous ne pouvez pas sélectionner un emplacement en dehors de la ville.");
return;
}
selectedAddress = { lat, lng };
if (marker) {
marker.setLatLng([lat, lng]);
} else {
marker = L.marker([lat, lng]).addTo(map);
}
try {
const response = await fetch(
`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`
);
if (!response.ok) {
throw new Error("Erreur lors de la récupération des informations de l'adresse.");
}
const data = await response.json();
selectedRue = data.address.road || "Rue inconnue";
} catch (error) {
console.error("Erreur lors de la recherche inversée :", error);
selectedRue = null;
alert("Impossible de récupérer l'adresse à partir de ces coordonnées.");
}
});
} catch (error) {
console.error("Erreur :", error);
alert("Impossible de récupérer les données de la ville.");
}
});
});
// Fermer la modal
@@ -118,17 +80,11 @@ document.addEventListener("DOMContentLoaded", () => {
return;
}
if (!selectedAddress || !selectedRue) {
if (!selectedAddress || !selectedRue || !selectedVille || !selectedCodePostal) {
alert("Veuillez sélectionner un emplacement valide sur la carte.");
return;
}
const villeId = villeSelect.value;
if (!villeId) {
alert("Veuillez sélectionner une ville.");
return;
}
// Réinitialiser les erreurs
lieuNomError.textContent = "";
lieuNomError.classList.add("hidden");
@@ -142,9 +98,10 @@ document.addEventListener("DOMContentLoaded", () => {
body: JSON.stringify({
nom,
rue: selectedRue,
ville: selectedVille,
codePostal: selectedCodePostal,
latitude: selectedAddress.lat,
longitude: selectedAddress.lng,
villeId,
}),
})
.then((response) => response.json().then((data) => ({ status: response.status, data })))
@@ -166,4 +123,4 @@ document.addEventListener("DOMContentLoaded", () => {
alert("Une erreur inattendue s'est produite.");
});
});
});
});