Exemplos para trabalhar com arquivos kml/kmz brutos exportados do aplicativo.

Esta página fornece exemplos de pós-processamento de arquivos kmz/kml que você pode achar úteis.

Preparação:

  1. Exportar do GPS Camera: Exportar pontos como KMZ/KML
  2. Extrair KML: Descompactar KMZ se necessário

Atualizando nomes de Placemark KML a partir de imageNotes

Este guia demonstra como atualizar automaticamente os nomes de placemark em seus arquivos KML extraindo informações do campo imageNotes.

Visão geral

Ao exportar pontos do GPS Camera, o aplicativo cria arquivos KML com nomes de placemark baseados em títulos de fotos e pontos. O conteúdo das notas (como “Note 1”, “Note 2”, etc.) é armazenado no campo imageNotes como valores separados por tabulação. Este script permite extrair automaticamente essas informações de notas e usá-las como nome de placemark, se necessário.

Provavelmente é melhor apenas colocar suas notas no campo Título enquanto tira fotos. Este script serviria se você não estivesse fazendo isso e também como exemplo de pós-processamento de kml.

Caso de uso

Antes:

  • Nomes de placemark mostram carimbos de data/hora: 15Nov25 16:25, 12Nov25 17:24
  • Notas reais estão ocultas no campo imageNotes: Note 1, Note 2

Depois:

  • Nomes de placemark mostram notas significativas: Note 1, Note 2
  • Fácil identificação de pontos rapidamente em aplicativos de mapeamento

Estrutura do arquivo KML

O arquivo KML exportado contém placemarks com a seguinte estrutura:

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

O campo imageNotes contém valores separados por tabulação:

  • Campo 0: Carimbo de data/hora (15Nov25 16:25)
  • Campo 1: Texto da nota (Note 1) ← Isto é o que extraímos
  • Campo 2: Vazio
  • Campo 3: Tipo (Ad-hoc)
  • Campo 4: Endereço

Solução: Script Python

Criamos um script Python que processa automaticamente arquivos KML e atualiza nomes de placemark com base no conteúdo de imageNotes.

Recursos do script

  • Extração automática: Analisa campo imageNotes separado por tabulação
  • Baseado em posição: Extrai nota de uma posição de campo específica (padrão: posição 1)
  • Genérico: Funciona com qualquer arquivo KML seguindo esta estrutura
  • Seguro: Cria backups antes de sobrescrever arquivos
  • Flexível: Pode gerar para um novo arquivo ou atualizar no local

Como funciona

  1. Analisar arquivo KML: Lê a estrutura XML
  2. Encontrar placemarks: Localiza todos os elementos <Placemark>
  3. Extrair notas: Divide imageNotes por caractere de tabulação e obtém a nota na posição 1
  4. Atualizar nomes: Substitui todo o elemento <name> pela nota extraída
  5. Salvar saída: Escreve KML atualizado no arquivo

Instalação e uso

Pré-requisitos

  • Python 3 (pré-instalado no macOS, baixar de python.org para Windows)
  • Nenhuma biblioteca adicional necessária (usa apenas biblioteca padrão)

Guia passo a passo

1. Baixar o script

Baixe update_kml_names.py e coloque-o na mesma pasta que seu arquivo KML.

2. Executar o script

macOS / Linux:

# Navegar para a pasta contendo seu arquivo KML
cd ~/Downloads/Points_20251115_163211

# Executar o script (cria backup, atualiza o original)
python3 update_kml_names.py doc.kml

# Ou criar um novo arquivo de saída (mantém o original)
python3 update_kml_names.py doc.kml updated_points.kml

Windows:

# Navegar para a pasta contendo seu arquivo KML
cd %USERPROFILE%\Downloads\Points_20251115_163211

# Executar o script (cria backup, atualiza o original)
python update_kml_names.py doc.kml

# Ou criar um novo arquivo de saída (mantém o original)
python update_kml_names.py doc.kml updated_points.kml

3. Ver resultados

O script exibirá as atualizações:

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

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

Uso avançado

Posição de nota personalizada

Se seu campo imageNotes tiver uma estrutura diferente e a nota estiver em uma posição diferente, você pode especificá-la:

# Extrair nota da posição 2 (terceiro campo, indexado a partir de 0)
python3 update_kml_names.py doc.kml output.kml 2

Processamento em lote

Você pode processar vários arquivos KML usando um script simples:

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
}

Exemplo: Antes e depois

Antes do processamento

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

Após o processamento

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

Detalhes técnicos

Implementação do script

O script usa o analisador XML integrado do Python (xml.etree.ElementTree) para:

  • Analisar arquivos KML com manipulação adequada de namespace
  • Navegar pela estrutura XML para encontrar elementos de placemark
  • Extrair e processar valores separados por tabulação
  • Atualizar elementos preservando a estrutura do arquivo

Compatibilidade

  • Versão KML: 2.2 (formato padrão)
  • Versão Python: 3.6+
  • Sistemas operacionais: macOS, Windows, Linux
  • Aplicativos: Compatível com Google Earth, QGIS, ArcGIS e outros aplicativos que suportam KML

Solução de problemas

Problema: Script não encontrado

Causa: Python não instalado ou não no PATH do sistema

Solução:

  • macOS: Python 3 deve estar pré-instalado
  • Windows: Baixar de python.org e garantir que “Add to PATH” esteja marcado durante a instalação

Problema: Nomes vazios após atualização

Causa: Campo de nota está vazio ou na posição errada

Solução: O script mostrará um aviso. Verifique o formato do seu imageNotes e ajuste o parâmetro de posição.

Integração com seu fluxo de trabalho

Este script pode ser integrado em fluxos de trabalho automatizados:

  1. Exportar do GPS Camera: Exportar pontos como KMZ/KML
  2. Extrair KML: Descompactar KMZ se necessário
  3. Executar script: Processar KML para atualizar nomes
  4. Importar para GIS: Usar no Google Earth, QGIS ou outras ferramentas

Código fonte

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

Suporte

Para perguntas ou problemas:

  • Verifique se o Python 3 está instalado corretamente
  • Verifique se imageNotes contém valores separados por tabulação

Licença

Este script é fornecido como está para uso com exportações de aplicativos. Sinta-se à vontade para modificá-lo e adaptá-lo às suas necessidades específicas.


Documentação relacionada

Exportar e importar

Trabalhando com Google Earth

Fluxos de trabalho relacionados


Última atualização: Novembro 2025