Créer une carte umap avec des photos géotaggées

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche

umap, Piwigo, cela permet de faire des choses amusantes, et en particulier une carte sur laquelle apparaissent des photos là où elles ont été prises.

Cela méritera quelques explications mais voici le script utilisé (généré par ChatGPT en quelques itérations) pour créer les données à charger dans umap, cf. ci-dessous.

Et une illustration du résultat dans une carte umap, https://umap.openstreetmap.fr/fr/map/au-gre-du-vent-2023_1025182#8/45.543/3.296

from PIL import Image
from PIL.ExifTags import TAGS
import os

def convert_gps_to_decimal(gps_data):
    lat_deg, lat_min, lat_sec = gps_data[2]
    lon_deg, lon_min, lon_sec = gps_data[4]
    
    lat = lat_deg + lat_min / 60.0 + lat_sec / 3600.0
    lon = lon_deg + lon_min / 60.0 + lon_sec / 3600.0
    
    # Ajuster en fonction de la direction (N, S, E, W)
    lat = lat if gps_data[1] == 'N' else -lat
    lon = lon if gps_data[3] == 'E' else -lon
    
    return lat, lon

def create_image_url(chemin_base, fichier):
    # Ajouter le suffixe "-xx" juste avant l'extension .jpg
    nom_fichier, extension = os.path.splitext(fichier)
    fichier_avec_suffixe = f"{nom_fichier}-xx{extension}"
    
    # Construire l'URL complète avec le nom du fichier
    image_url = f"{{{{http://{chemin_base}/{fichier_avec_suffixe}}}}}"
    return image_url

def extract_and_convert_gps_info(chemin_photos, chemin_base):
    for fichier in os.listdir(chemin_photos):
        chemin_complet = os.path.join(chemin_photos, fichier)

        try:
            with Image.open(chemin_complet) as img:
                exif_data = img._getexif()

                if exif_data is not None:
                    # Extraire les données GPS
                    gps_info = {TAGS[key]: exif_data[key] for key in exif_data.keys() if key in TAGS and TAGS[key] == 'GPSInfo'}

                    if gps_info:
                        # Convertir les coordonnées GPS en décimal
                        coordinates_decimal = convert_gps_to_decimal(gps_info['GPSInfo'])
                        if coordinates_decimal:
                            # Créer l'URL avec le nom du fichier
                            image_url = create_image_url(chemin_base, fichier)
                            # Imprimer le résultat sous forme de chaîne
                            result_str = f"{image_url},{coordinates_decimal[0]},{coordinates_decimal[1]}"
                            print(result_str)

        except Exception as e:
            print(f"Erreur lors de l'extraction des données Exif pour {chemin_complet}: {str(e)}")

# Chemin du répertoire contenant les photos
chemin_photos = r'\\192.168.0.28\piwigo_share2\2023\07\30'

# Chemin de base pour la création de l'URL
chemin_base = 'piwigo38.mooo.com/i.php?/upload/2023/07/30'

# Appeler la fonction pour extraire et convertir les informations GPS
extract_and_convert_gps_info(chemin_photos, chemin_base)