Toujours dans la suite de la mise en oeuvre de la data visualisation sur ma galerie d’identification de photo, j’avais besoin d’ajouter les coordonnées des villes de mes prises de vues. Voici quelques explications :
Premièrement j’ai récupéré la liste des communes de France, pour cela il y a un site super : https://sql.sh/736-base-donnees-villes-francaises et en plus un fichier SQL est disponible quoi demandé de mieux.
Mes photos sont toutes géo taguées avec Longitude et Latitude en degrés, il fallait donc faire une requête permettant de définir la commune la plus proche de mes photos, voici la requêtes (pas optimisée du tout …)
SELECT i.id,i.name,i.latitude,i.longitude,vf.ville_nom,vf.ville_departement,vf.ville_code_postal,6371 * 2 * ASIN(SQRT(POWER(SIN((vf.ville_latitude_deg - abs(i.latitude)) * pi()/180 / 2),2) + COS(vf.ville_latitude_deg * pi()/180 ) * COS(abs(i.latitude) * pi()/180) * POWER(SIN((vf.ville_longitude_deg - i.longitude) * pi()/180 / 2), 2) )) AS DISTANCE
FROM villes_france vf, piwigo_images i
WHERE DISTANCE < 20
ORDER BY i.id
Quelques explications :
villes_france est la table de l’ensemble des communes de France dans laquelle je n’utilise que le nom,département de rattachement,code postal
Ensuite petite utilisation du calcul d’une distance sur un sphère dont le rayon est de 6371 (rayon de la terre en Km), et pour finir je retiens les villes qui sont à moins de 20 Kms des coordonnées de ma photo. Pour les puristes du MySQL, oui je vais écrire une petite procédure stockée pour accélérer le temps de calcul mais c’était pour déjà tester le bon fonctionnement 🙂
Pour finir, je sauvegarde le résultat de la requête dans une table tampon me permettant par la suite d’aller chercher la ville dont la distance est la plus petite par rapport aux coordonnées de ma photo.
J’utilise ensuite tout cela pour faire les statistiques de mes photos, voici le lien vers l’article sur le sujet sur mon autre blog : https://nature.nsellier.fr/nouvelles-statistiques-pour-ma-galerie-didentification/