Beispiele für die Arbeit mit rohen kml/kmz-Dateien, die aus der App exportiert wurden.

Diese Seite bietet Beispiele für die Nachbearbeitung von kmz/kml-Dateien, die Sie nützlich finden könnten.

Vorbereitung:

  1. Export aus GPS Camera: Punkte als KMZ/KML exportieren
  2. KML extrahieren: KMZ bei Bedarf entpacken

Aktualisieren von KML-Placemark-Namen aus imageNotes

Dieser Leitfaden zeigt, wie Sie Placemark-Namen in Ihren KML-Dateien automatisch aktualisieren, indem Sie Informationen aus dem Feld imageNotes extrahieren.

Übersicht

Beim Exportieren von Punkten aus GPS Camera erstellt die App KML-Dateien mit Placemark-Namen basierend auf Foto- und Punkttiteln. Der Notizinhalt (wie “Note 1”, “Note 2” usw.) wird im Feld imageNotes als tabgetrennte Werte gespeichert. Dieses Skript ermöglicht es Ihnen, diese Notizinformationen automatisch zu extrahieren und bei Bedarf als Placemark-Namen zu verwenden.

Am besten ist es wahrscheinlich, Ihre Notizen direkt beim Fotografieren in das Titelfeld einzugeben. Dieses Skript dient für den Fall, dass Sie dies nicht getan haben, und auch als Beispiel für die KML-Nachbearbeitung.

Anwendungsfall

Vorher:

  • Placemark-Namen zeigen Zeitstempel: 15Nov25 16:25, 12Nov25 17:24
  • Tatsächliche Notizen sind im Feld imageNotes verborgen: Note 1, Note 2

Nachher:

  • Placemark-Namen zeigen aussagekräftige Notizen: Note 1, Note 2
  • Einfache Identifizierung von Punkten auf einen Blick in Kartenanwendungen

KML-Dateistruktur

Die exportierte KML-Datei enthält Placemarks mit folgender Struktur:

<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>

Das Feld imageNotes enthält tabgetrennte Werte:

  • Feld 0: Zeitstempel (15Nov25 16:25)
  • Feld 1: Notiztext (Note 1) ← Dies extrahieren wir
  • Feld 2: Leer
  • Feld 3: Typ (Ad-hoc)
  • Feld 4: Adresse

Lösung: Python-Skript

Wir haben ein Python-Skript erstellt, das KML-Dateien automatisch verarbeitet und Placemark-Namen basierend auf dem Inhalt von imageNotes aktualisiert.

Skript-Funktionen

  • Automatische Extraktion: Analysiert tabgetrennte imageNotes-Felder
  • Positionsbasiert: Extrahiert Notizen aus einer bestimmten Feldposition (Standard: Position 1)
  • Generisch: Funktioniert mit jeder KML-Datei, die dieser Struktur folgt
  • Sicher: Erstellt Backups vor dem Überschreiben von Dateien
  • Flexibel: Kann in eine neue Datei ausgeben oder direkt aktualisieren

Funktionsweise

  1. KML-Datei parsen: Liest die XML-Struktur
  2. Placemarks finden: Lokalisiert alle <Placemark>-Elemente
  3. Notizen extrahieren: Teilt imageNotes durch Tabulatorzeichen und erhält die Notiz an Position 1
  4. Namen aktualisieren: Ersetzt das gesamte <name>-Element durch die extrahierte Notiz
  5. Ausgabe speichern: Schreibt aktualisierte KML in Datei

Installation & Verwendung

Voraussetzungen

  • Python 3 (vorinstalliert auf macOS, Download von python.org für Windows)
  • Keine zusätzlichen Bibliotheken erforderlich (verwendet nur Standardbibliothek)

Schritt-für-Schritt-Anleitung

1. Skript herunterladen

Laden Sie update_kml_names.py herunter und platzieren Sie es im selben Ordner wie Ihre KML-Datei.

2. Skript ausführen

macOS / Linux:

# Zum Ordner mit Ihrer KML-Datei navigieren
cd ~/Downloads/Points_20251115_163211

# Skript ausführen (erstellt Backup, aktualisiert Original)
python3 update_kml_names.py doc.kml

# Oder neue Ausgabedatei erstellen (behält Original)
python3 update_kml_names.py doc.kml updated_points.kml

Windows:

# Zum Ordner mit Ihrer KML-Datei navigieren
cd %USERPROFILE%\Downloads\Points_20251115_163211

# Skript ausführen (erstellt Backup, aktualisiert Original)
python update_kml_names.py doc.kml

# Oder neue Ausgabedatei erstellen (behält Original)
python update_kml_names.py doc.kml updated_points.kml

3. Ergebnisse anzeigen

Das Skript zeigt die Aktualisierungen an:

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

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

Erweiterte Verwendung

Benutzerdefinierte Notizposition

Wenn Ihr imageNotes-Feld eine andere Struktur hat und die Notiz an einer anderen Position ist, können Sie diese angeben:

# Notiz aus Position 2 extrahieren (drittes Feld, 0-indiziert)
python3 update_kml_names.py doc.kml output.kml 2

Stapelverarbeitung

Sie können mehrere KML-Dateien mit einem einfachen Skript verarbeiten:

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
}

Beispiel: Vorher und Nachher

Vor der Verarbeitung

<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>

Nach der Verarbeitung

<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>

Technische Details

Skript-Implementierung

Das Skript verwendet Pythons integrierten XML-Parser (xml.etree.ElementTree) um:

  • KML-Dateien mit korrekter Namespace-Behandlung zu parsen
  • Die XML-Struktur zu navigieren und Placemark-Elemente zu finden
  • Tabgetrennte Werte zu extrahieren und zu verarbeiten
  • Elemente zu aktualisieren, während die Dateistruktur erhalten bleibt

Kompatibilität

  • KML-Version: 2.2 (Standardformat)
  • Python-Version: 3.6+
  • Betriebssysteme: macOS, Windows, Linux
  • Apps: Kompatibel mit Google Earth, QGIS, ArcGIS und anderen KML-unterstützenden Anwendungen

Fehlerbehebung

Problem: Skript nicht gefunden

Ursache: Python nicht installiert oder nicht im System-PATH

Lösung:

  • macOS: Python 3 sollte vorinstalliert sein
  • Windows: Download von python.org und sicherstellen, dass “Add to PATH” bei der Installation aktiviert ist

Problem: Leere Namen nach Aktualisierung

Ursache: Notizfeld ist leer oder an falscher Position

Lösung: Das Skript zeigt eine Warnung an. Überprüfen Sie Ihr imageNotes-Format und passen Sie den Positionsparameter an.

Integration in Ihren Workflow

Dieses Skript kann in automatisierte Workflows integriert werden:

  1. Export aus GPS Camera: Punkte als KMZ/KML exportieren
  2. KML extrahieren: KMZ bei Bedarf entpacken
  3. Skript ausführen: KML verarbeiten, um Namen zu aktualisieren
  4. In GIS importieren: In Google Earth, QGIS oder anderen Tools verwenden

Quellcode

#!/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

Für Fragen oder Probleme:

  • Überprüfen Sie, ob Python 3 korrekt installiert ist
  • Prüfen Sie, ob imageNotes tabgetrennte Werte enthält

Lizenz

Dieses Skript wird wie besehen für die Verwendung mit App-Exporten bereitgestellt. Fühlen Sie sich frei, es an Ihre spezifischen Bedürfnisse anzupassen und zu modifizieren.


Verwandte Dokumentation

Export & Import

Arbeiten mit Google Earth

Verwandte Workflows


Zuletzt aktualisiert: November 2025