Exemples de travail avec des fichiers kml/kmz bruts exportés depuis l'application.

Cette page fournit des exemples de post-traitement de fichiers kmz/kml qui pourraient vous être utiles.

Préparation:

  1. Exporter depuis GPS Camera: Exporter les points en KMZ/KML
  2. Extraire KML: Décompresser KMZ si nécessaire

Mise à jour des noms de repères KML à partir d’imageNotes

Ce guide montre comment mettre à jour automatiquement les noms de repères dans vos fichiers KML en extrayant des informations du champ imageNotes.

Vue d’ensemble

Lors de l’exportation de points depuis GPS Camera, l’application crée des fichiers KML avec des noms de repères basés sur les titres de photos et de points. Le contenu des notes (comme “Note 1”, “Note 2”, etc.) est stocké dans le champ imageNotes sous forme de valeurs séparées par des tabulations. Ce script vous permet d’extraire automatiquement ces informations de notes et de les utiliser comme nom de repère, si nécessaire.

Il est probablement préférable de simplement mettre vos notes dans le champ Titre lorsque vous prenez des photos. Ce script servirait si vous ne le faisiez pas et également comme exemple de post-traitement kml.

Cas d’utilisation

Avant:

  • Les noms de repères affichent des horodatages: 15Nov25 16:25, 12Nov25 17:24
  • Les notes réelles sont cachées dans le champ imageNotes: Note 1, Note 2

Après:

  • Les noms de repères affichent des notes significatives: Note 1, Note 2
  • Identification facile des points en un coup d’œil dans les applications cartographiques

Structure du fichier KML

Le fichier KML exporté contient des repères avec la structure suivante:

<Placemark>
  <name>15Nov25 16:25</name>
  <ExtendedData>
    <SchemaData schemaUrl="#blcPointSchema">
      <SimpleData name="imageNotes"><![CDATA[15Nov25 16:25	Note 1		Ad-hoc	V Třešňovce 227/12...]]></SimpleData>
    </SchemaData>
  </ExtendedData>
  <Point>
    <coordinates>14.502834,50.095184,239.0</coordinates>
  </Point>
</Placemark>

Le champ imageNotes contient des valeurs séparées par des tabulations:

  • Champ 0: Horodatage (15Nov25 16:25)
  • Champ 1: Texte de la note (Note 1) ← C’est ce que nous extrayons
  • Champ 2: Vide
  • Champ 3: Type (Ad-hoc)
  • Champ 4: Adresse

Solution: Script Python

Nous avons créé un script Python qui traite automatiquement les fichiers KML et met à jour les noms de repères en fonction du contenu d'imageNotes.

Fonctionnalités du script

  • Extraction automatique: Analyse le champ imageNotes séparé par des tabulations
  • Basé sur la position: Extrait la note d’une position de champ spécifique (par défaut: position 1)
  • Générique: Fonctionne avec tout fichier KML suivant cette structure
  • Sûr: Crée des sauvegardes avant d’écraser les fichiers
  • Flexible: Peut générer vers un nouveau fichier ou mettre à jour sur place

Comment ça marche

  1. Analyser le fichier KML: Lit la structure XML
  2. Trouver les repères: Localise tous les éléments <Placemark>
  3. Extraire les notes: Divise imageNotes par caractère de tabulation et obtient la note à la position 1
  4. Mettre à jour les noms: Remplace l’élément <name> entier par la note extraite
  5. Enregistrer la sortie: Écrit le KML mis à jour dans le fichier

Installation et utilisation

Prérequis

  • Python 3 (préinstallé sur macOS, télécharger depuis python.org pour Windows)
  • Aucune bibliothèque supplémentaire requise (utilise uniquement la bibliothèque standard)

Guide étape par étape

1. Télécharger le script

Téléchargez update_kml_names.py et placez-le dans le même dossier que votre fichier KML.

2. Exécuter le script

macOS / Linux:

# Naviguer vers le dossier contenant votre fichier KML
cd ~/Downloads/Points_20251115_163211

# Exécuter le script (crée une sauvegarde, met à jour l'original)
python3 update_kml_names.py doc.kml

# Ou créer un nouveau fichier de sortie (conserve l'original)
python3 update_kml_names.py doc.kml updated_points.kml

Windows:

# Naviguer vers le dossier contenant votre fichier KML
cd %USERPROFILE%\Downloads\Points_20251115_163211

# Exécuter le script (crée une sauvegarde, met à jour l'original)
python update_kml_names.py doc.kml

# Ou créer un nouveau fichier de sortie (conserve l'original)
python update_kml_names.py doc.kml updated_points.kml

3. Voir les résultats

Le script affichera les mises à jour:

Updated: '15Nov25 16:25' -> 'Note 1'
Updated: '12Nov25 17:24' -> 'Note 2'

Completed! Updated 2 placemark(s).
Output saved to: doc.kml

Utilisation avancée

Position de note personnalisée

Si votre champ imageNotes a une structure différente et que la note est à une position différente, vous pouvez la spécifier:

# Extraire la note de la position 2 (troisième champ, indexé à partir de 0)
python3 update_kml_names.py doc.kml output.kml 2

Traitement par lots

Vous pouvez traiter plusieurs fichiers KML en utilisant un script simple:

macOS / Linux:

for file in *.kml; do
  python3 update_kml_names.py "$file"
done

Windows (PowerShell):

Get-ChildItem -Filter *.kml | ForEach-Object {
  python update_kml_names.py $_.Name
}

Exemple: Avant et après

Avant le traitement

<Placemark>
  <name>15Nov25 16:25</name>
  <SimpleData name="imageNotes">15Nov25 16:25	Note 1		Ad-hoc	Address...</SimpleData>
</Placemark>

<Placemark>
  <name>12Nov25 17:24</name>
  <SimpleData name="imageNotes">12Nov25 17:24	Note 2		Ad-hoc	Address...</SimpleData>
</Placemark>

Après le traitement

<Placemark>
  <name>Note 1</name>
  <SimpleData name="imageNotes">15Nov25 16:25	Note 1		Ad-hoc	Address...</SimpleData>
</Placemark>

<Placemark>
  <name>Note 2</name>
  <SimpleData name="imageNotes">12Nov25 17:24	Note 2		Ad-hoc	Address...</SimpleData>
</Placemark>

Détails techniques

Implémentation du script

Le script utilise l’analyseur XML intégré de Python (xml.etree.ElementTree) pour:

  • Analyser les fichiers KML avec une gestion appropriée des espaces de noms
  • Naviguer dans la structure XML pour trouver les éléments de repère
  • Extraire et traiter les valeurs séparées par des tabulations
  • Mettre à jour les éléments tout en préservant la structure du fichier

Compatibilité

  • Version KML: 2.2 (format standard)
  • Version Python: 3.6+
  • Systèmes d’exploitation: macOS, Windows, Linux
  • Applications: Compatible avec Google Earth, QGIS, ArcGIS et autres applications prenant en charge KML

Dépannage

Problème: Script introuvable

Cause: Python non installé ou absent du PATH système

Solution:

  • macOS: Python 3 devrait être préinstallé
  • Windows: Télécharger depuis python.org et s’assurer que “Add to PATH” est coché lors de l’installation

Problème: Noms vides après la mise à jour

Cause: Le champ de note est vide ou à la mauvaise position

Solution: Le script affichera un avertissement. Vérifiez le format de votre imageNotes et ajustez le paramètre de position.

Intégration dans votre flux de travail

Ce script peut être intégré dans des flux de travail automatisés:

  1. Exporter depuis GPS Camera: Exporter les points en KMZ/KML
  2. Extraire KML: Décompresser KMZ si nécessaire
  3. Exécuter le script: Traiter KML pour mettre à jour les noms
  4. Importer dans GIS: Utiliser dans Google Earth, QGIS ou d’autres outils

Code source

#!/usr/bin/env python3
"""
Script to update KML placemark names with Note from imageNotes field.
Extracts the note from the tab-separated imageNotes field (position 2) and replaces the placemark name.
"""

import xml.etree.ElementTree as ET
import sys
import os

def update_kml_with_notes(input_file, output_file=None, note_position=1):
    """
    Update KML placemark names by extracting Note from tab-separated imageNotes field.

    Args:
        input_file: Path to input KML file
        output_file: Path to output KML file (if None, overwrites input)
        note_position: Position of the note in tab-separated imageNotes (0-indexed, default 1)
    """
    # Parse the KML file
    tree = ET.parse(input_file)
    root = tree.getroot()

    # Define namespace
    ns = {'kml': 'http://www.opengis.net/kml/2.2'}

    # Find all Placemark elements
    placemarks = root.findall('.//kml:Placemark', ns)

    updated_count = 0

    for placemark in placemarks:
        # Get the current name
        name_elem = placemark.find('kml:name', ns)
        if name_elem is None:
            continue

        current_name = name_elem.text

        # Find the imageNotes field
        image_notes_elem = placemark.find('.//kml:SimpleData[@name="imageNotes"]', ns)

        if image_notes_elem is not None and image_notes_elem.text:
            image_notes = image_notes_elem.text

            # Split by tab to get the note (tab-separated format)
            parts = image_notes.split('\t')

            if len(parts) > note_position and parts[note_position].strip():
                note_text = parts[note_position].strip()

                # Update the name - replace entirely with the note
                name_elem.text = note_text

                print(f"Updated: '{current_name}' -> '{note_text}'")
                updated_count += 1
            else:
                print(f"Warning: No note found at position {note_position} in imageNotes for placemark '{current_name}'")
                print(f"  imageNotes content: {image_notes}")
        else:
            print(f"Warning: No imageNotes found for placemark '{current_name}'")

    # Determine output file
    if output_file is None:
        output_file = input_file

    # Write the updated KML
    tree.write(output_file, encoding='utf-8', xml_declaration=True)

    print(f"\nCompleted! Updated {updated_count} placemark(s).")
    print(f"Output saved to: {output_file}")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python3 update_kml_names.py <input_kml_file> [output_kml_file] [note_position]")
        print("\nArguments:")
        print("  input_kml_file:  Path to the KML file to process")
        print("  output_kml_file: (Optional) Output file path. If not provided, input will be overwritten.")
        print("  note_position:   (Optional) 0-indexed position of note in tab-separated imageNotes (default: 1)")
        print("\nExample:")
        print("  python3 update_kml_names.py doc.kml")
        print("  python3 update_kml_names.py doc.kml doc_updated.kml")
        print("  python3 update_kml_names.py doc.kml doc_updated.kml 1")
        sys.exit(1)

    input_file = sys.argv[1]
    output_file = sys.argv[2] if len(sys.argv) > 2 else None
    note_position = int(sys.argv[3]) if len(sys.argv) > 3 else 1

    if not os.path.exists(input_file):
        print(f"Error: Input file '{input_file}' not found.")
        sys.exit(1)

    # Create backup if overwriting
    if output_file is None:
        backup_file = input_file + '.backup'
        import shutil
        shutil.copy2(input_file, backup_file)
        print(f"Backup created: {backup_file}\n")

    update_kml_with_notes(input_file, output_file, note_position)

Support

Pour les questions ou problèmes:

  • Vérifiez que Python 3 est correctement installé
  • Vérifiez que imageNotes contient des valeurs séparées par des tabulations

Licence

Ce script est fourni tel quel pour une utilisation avec les exportations d’applications. N’hésitez pas à le modifier et à l’adapter à vos besoins spécifiques.


Documentation connexe

Exporter et importer

Travailler avec Google Earth

Flux de travail connexes


Dernière mise à jour: Novembre 2025