Bonsoir,
Effectivement, j'ai aussi l'impression que nombre de sites "pédagogue" ont disparu...
Cogitation pour qu'à l'issu de nombreuses photos prises lors de voyages ne reste plus qu'un WayPoint pour chaque lieu intéressant :
Voici une solution exclusivement javascript liée à cette problématique, avec l'assistance de L'IA (ChatGPT :
https://www.chatbotgpt.fr) à condition d'évaluer correctement le cahier des charges de cette manière :
************************************
Regrouper l'intégralité d'un tableau de latitude Longitude par zone selon une distance souhaitée
1- Regrouper tous les points d'une zone par distance
2- Ne conserver qu'un seul point dans chaque zone
3- Compiler toutes les zones en un seul fichier.
************************************
Résultat sur une collecte de 850 photos et autant coordonnées GPS il ne reste que les 140 endroit photographiés si choix de distance de 50 mètres à vol d'oiseau...
Le code à nécessité quelques retouches mais le résultat est Impressionnant !
Toutes remarques sont les bienvenues.
Amitiés à tous
Voici le script :
Code : Tout sélectionner
// ======================================================================================================================
// 1- Extraire dans cet ordre lat, lng, name d'un tableau ["Libellé", latitude, longitude]
// ======================================================================================================================
const coordinates = wpt[0].map((item) => [item[1], item[2], item[0]]);
// ======================================================================================================================
// 2- Regroupement [latitude, longitude, name] par zone selon distance voulue
// ======================================================================================================================
// Ecart souhaité en mètres entre deux Points d'intérêt à conserver
const distanceMax = 50;
const groupes = regrouperParZoneEtDistance(coordinates, distanceMax);
// ======================================================================================================================
// ======================================================================================================================
// Regrouper les coordonnées [latitude, longitude, name] par zone et par distance
// ======================================================================================================================
function regrouperParZoneEtDistance(coordinates, distanceMax) {
const groupes = [];
// Créer les zones
for (let i = 0; i < coordinates.length; i++) {
const point = coordinates[i];
let groupeExistant = false;
// Récupérer uniquements les coordonnées de la zone
for (let j = 0; j < groupes.length; j++) {
const groupe = groupes[j];
const distanceEntrePoints = distance(point[0], point[1], groupe.latitude, groupe.longitude);
if (distanceEntrePoints <= distanceMax) {
groupe.coordinates.push({
latitude: point[0],
longitude: point[1],
name: point[2],
});
groupeExistant = true;
break;
}
}
if (!groupeExistant) {
groupes.push({
latitude: point[0],
longitude: point[1],
coordinates: [
{
latitude: point[0],
longitude: point[1],
name: point[2],
},
],
});
}
}
return groupes;
}
// ======================================================================================================================
// Formule de Haversine pour calcul de distance en mètres entre deux coordonnées au format [latitude, longitude]
// ======================================================================================================================
function distance(lat1, lon1, lat2, lon2) {
// Rayon de la Terre en km
const R = 6371;
const dLat = ((lat2 - lat1) * Math.PI) / 180;
const dLon = ((lon2 - lon1) * Math.PI) / 180;
const lat1Rad = (lat1 * Math.PI) / 180;
const lat2Rad = (lat2 * Math.PI) / 180;
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1Rad) * Math.cos(lat2Rad);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
// Convertir en mètres;
const distance = R * c * 1000;
return distance;
}
// ======================================================================================================================
// 4- Compiler les coordonnées de toutes les zones en un seul tableau
// ======================================================================================================================
var tableauCoordonnees = groupes.map((groupe) => [groupe.latitude, groupe.longitude, groupe.coordinates[0].name]);