Ejemplos para trabajar con archivos kml/kmz sin procesar exportados desde la aplicación.

Esta página proporciona ejemplos de posprocesamiento de archivos kmz/kml que pueden resultarle útiles.

Preparación:

  1. Exportar desde GPS Camera: Exportar puntos como KMZ/KML
  2. Extraer KML: Descomprimir KMZ si es necesario

Actualización de nombres de Placemark KML desde imageNotes

Esta guía demuestra cómo actualizar automáticamente los nombres de placemark en sus archivos KML extrayendo información del campo imageNotes.

Descripción general

Al exportar puntos desde GPS Camera, la aplicación crea archivos KML con nombres de placemark basados en títulos de fotos y puntos. El contenido de notas (como “Note 1”, “Note 2”, etc.) se almacena en el campo imageNotes como valores separados por tabuladores. Este script le permite extraer automáticamente esa información de notas y usarla como nombre de placemark, si es necesario.

Probablemente sea mejor simplemente poner sus notas en el campo Título mientras toma fotos. Este script serviría si no lo estuviera haciendo y también como ejemplo de posprocesamiento de kml.

Caso de uso

Antes:

  • Los nombres de placemark muestran marcas de tiempo: 15Nov25 16:25, 12Nov25 17:24
  • Las notas reales están ocultas en el campo imageNotes: Note 1, Note 2

Después:

  • Los nombres de placemark muestran notas significativas: Note 1, Note 2
  • Fácil identificación de puntos de un vistazo en aplicaciones de mapas

Estructura de archivos KML

El archivo KML exportado contiene placemarks con la siguiente estructura:

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

El campo imageNotes contiene valores separados por tabuladores:

  • Campo 0: Marca de tiempo (15Nov25 16:25)
  • Campo 1: Texto de nota (Note 1) ← Esto es lo que extraemos
  • Campo 2: Vacío
  • Campo 3: Tipo (Ad-hoc)
  • Campo 4: Dirección

Solución: Script de Python

Hemos creado un script de Python que procesa automáticamente archivos KML y actualiza los nombres de placemark según el contenido de imageNotes.

Características del script

  • Extracción automática: Analiza el campo imageNotes separado por tabuladores
  • Basado en posición: Extrae notas de una posición de campo específica (predeterminado: posición 1)
  • Genérico: Funciona con cualquier archivo KML que siga esta estructura
  • Seguro: Crea copias de seguridad antes de sobrescribir archivos
  • Flexible: Puede generar a un nuevo archivo o actualizar en el lugar

Cómo funciona

  1. Analizar archivo KML: Lee la estructura XML
  2. Encontrar placemarks: Localiza todos los elementos <Placemark>
  3. Extraer notas: Divide imageNotes por carácter de tabulación y obtiene la nota en la posición 1
  4. Actualizar nombres: Reemplaza todo el elemento <name> con la nota extraída
  5. Guardar salida: Escribe KML actualizado en archivo

Instalación y uso

Requisitos previos

  • Python 3 (preinstalado en macOS, descargar desde python.org para Windows)
  • No se requieren bibliotecas adicionales (usa solo la biblioteca estándar)

Guía paso a paso

1. Descargar el script

Descargue update_kml_names.py y colóquelo en la misma carpeta que su archivo KML.

2. Ejecutar el script

macOS / Linux:

# Navegar a la carpeta que contiene su archivo KML
cd ~/Downloads/Points_20251115_163211

# Ejecutar el script (crea copia de seguridad, actualiza el original)
python3 update_kml_names.py doc.kml

# O crear un nuevo archivo de salida (mantiene el original)
python3 update_kml_names.py doc.kml updated_points.kml

Windows:

# Navegar a la carpeta que contiene su archivo KML
cd %USERPROFILE%\Downloads\Points_20251115_163211

# Ejecutar el script (crea copia de seguridad, actualiza el original)
python update_kml_names.py doc.kml

# O crear un nuevo archivo de salida (mantiene el original)
python update_kml_names.py doc.kml updated_points.kml

3. Ver resultados

El script mostrará las actualizaciones:

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

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

Uso avanzado

Posición de nota personalizada

Si su campo imageNotes tiene una estructura diferente y la nota está en una posición diferente, puede especificarla:

# Extraer nota de la posición 2 (tercer campo, indexado desde 0)
python3 update_kml_names.py doc.kml output.kml 2

Procesamiento por lotes

Puede procesar múltiples archivos KML usando 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
}

Ejemplo: Antes y después

Antes del procesamiento

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

Después del procesamiento

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

Detalles técnicos

Implementación del script

El script utiliza el analizador XML integrado de Python (xml.etree.ElementTree) para:

  • Analizar archivos KML con manejo adecuado del espacio de nombres
  • Navegar por la estructura XML para encontrar elementos de placemark
  • Extraer y procesar valores separados por tabuladores
  • Actualizar elementos mientras se preserva la estructura del archivo

Compatibilidad

  • Versión KML: 2.2 (formato estándar)
  • Versión Python: 3.6+
  • Sistemas operativos: macOS, Windows, Linux
  • Aplicaciones: Compatible con Google Earth, QGIS, ArcGIS y otras aplicaciones que soportan KML

Solución de problemas

Problema: Script no encontrado

Causa: Python no instalado o no en el PATH del sistema

Solución:

  • macOS: Python 3 debería estar preinstalado
  • Windows: Descargar desde python.org y asegurarse de que “Add to PATH” esté marcado durante la instalación

Problema: Nombres vacíos después de la actualización

Causa: El campo de nota está vacío o en la posición incorrecta

Solución: El script mostrará una advertencia. Verifique el formato de su imageNotes y ajuste el parámetro de posición.

Integración con su flujo de trabajo

Este script se puede integrar en flujos de trabajo automatizados:

  1. Exportar desde GPS Camera: Exportar puntos como KMZ/KML
  2. Extraer KML: Descomprimir KMZ si es necesario
  3. Ejecutar script: Procesar KML para actualizar nombres
  4. Importar a GIS: Usar en Google Earth, QGIS u otras herramientas

Código fuente

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

Soporte

Para preguntas o problemas:

  • Verifique que Python 3 esté instalado correctamente
  • Compruebe que imageNotes contiene valores separados por tabuladores

Licencia

Este script se proporciona tal cual para uso con exportaciones de la aplicación. Siéntase libre de modificarlo y adaptarlo a sus necesidades específicas.


Documentación relacionada

Exportar e importar

Trabajar con Google Earth

Flujos de trabajo relacionados


Última actualización: Noviembre 2025