Примеры работы с необработанными файлами kml/kmz, экспортированными из приложения.
Эта страница содержит примеры постобработки файлов kmz/kml, которые могут быть вам полезны.
Подготовка:
- Экспорт из GPS Camera: Экспортировать точки как KMZ/KML
- Извлечь KML: Распаковать KMZ при необходимости
Обновление имен меток KML из imageNotes
Это руководство показывает, как автоматически обновлять имена меток в ваших файлах KML, извлекая информацию из поля imageNotes.
Обзор
При экспорте точек из GPS Camera приложение создает файлы KML с именами меток на основе названий фотографий и точек. Содержимое заметок (например, “Note 1”, “Note 2” и т.д.) хранится в поле imageNotes в виде значений, разделенных табуляцией. Этот скрипт позволяет автоматически извлекать эту информацию из заметок и использовать ее в качестве имени метки при необходимости.
Вероятно, лучше всего было просто помещать ваши заметки в поле “Название” при съемке фотографий. Этот скрипт пригодится, если вы так хотели, но не делали, а также как пример постобработки kml.
Вариант использования
До:
- Имена меток показывают временные метки:
15Nov25 16:25,12Nov25 17:24 - Фактические заметки скрыты в поле
imageNotes:Note 1,Note 2
После:
- Имена меток показывают содержательные заметки:
Note 1,Note 2 - Легкая идентификация точек с первого взгляда в картографических приложениях
Структура файла KML
Экспортированный файл KML содержит метки со следующей структурой:
<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>
Поле imageNotes содержит значения, разделенные табуляцией:
- Поле 0: Временная метка (
15Nov25 16:25) - Поле 1: Текст заметки (
Note 1) ← Это то, что мы извлекаем - Поле 2: Пусто
- Поле 3: Тип (
Ad-hoc) - Поле 4: Адрес
Решение: Python-скрипт
Мы создали скрипт Python, который автоматически обрабатывает файлы KML и обновляет имена меток на основе содержимого imageNotes.
Возможности скрипта
- Автоматическое извлечение: Анализирует поле
imageNotes, разделенное табуляцией - На основе позиции: Извлекает заметку из определенной позиции поля (по умолчанию: позиция 1)
- Универсальный: Работает с любым файлом KML, следующим этой структуре
- Безопасный: Создает резервные копии перед перезаписью файлов
- Гибкий: Может выводить в новый файл или обновлять на месте
Как это работает
- Разобрать файл KML: Читает структуру XML
- Найти метки: Находит все элементы
<Placemark> - Извлечь заметки: Разделяет
imageNotesпо символу табуляции и получает заметку в позиции 1 - Обновить имена: Заменяет весь элемент
<name>извлеченной заметкой - Сохранить вывод: Записывает обновленный KML в файл
Установка и использование
Предварительные требования
- Python 3 (предустановлен на macOS, скачать с python.org для Windows)
- Дополнительные библиотеки не требуются (использует только стандартную библиотеку)
Пошаговое руководство
1. Загрузить скрипт
Загрузите update_kml_names.py и поместите его в ту же папку, что и ваш файл KML.
2. Запустить скрипт
macOS / Linux:
# Перейти в папку с вашим файлом KML
cd ~/Downloads/Points_20251115_163211
# Запустить скрипт (создает резервную копию, обновляет оригинал)
python3 update_kml_names.py doc.kml
# Или создать новый выходной файл (сохраняет оригинал)
python3 update_kml_names.py doc.kml updated_points.kml
Windows:
# Перейти в папку с вашим файлом KML
cd %USERPROFILE%\Downloads\Points_20251115_163211
# Запустить скрипт (создает резервную копию, обновляет оригинал)
python update_kml_names.py doc.kml
# Или создать новый выходной файл (сохраняет оригинал)
python update_kml_names.py doc.kml updated_points.kml
3. Просмотреть результаты
Скрипт отобразит обновления:
Updated: '15Nov25 16:25' -> 'Note 1'
Updated: '12Nov25 17:24' -> 'Note 2'
Completed! Updated 2 placemark(s).
Output saved to: doc.kml
Расширенное использование
Пользовательская позиция заметки
Если ваше поле imageNotes имеет другую структуру и заметка находится в другой позиции, вы можете указать это:
# Извлечь заметку из позиции 2 (третье поле, индексация с 0)
python3 update_kml_names.py doc.kml output.kml 2
Пакетная обработка
Вы можете обрабатывать несколько файлов KML используя простой скрипт:
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
}
Пример: До и после
До обработки
<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>
После обработки
<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>
Технические детали
Реализация скрипта
Скрипт использует встроенный парсер XML Python (xml.etree.ElementTree) для:
- Разбора файлов KML с правильной обработкой пространств имен
- Навигации по структуре XML для поиска элементов меток
- Извлечения и обработки значений, разделенных табуляцией
- Обновления элементов с сохранением структуры файла
Совместимость
- Версия KML: 2.2 (стандартный формат)
- Версия Python: 3.6+
- Операционные системы: macOS, Windows, Linux
- Приложения: Совместим с Google Earth, QGIS, ArcGIS и другими приложениями, поддерживающими KML
Устранение неполадок
Проблема: Скрипт не найден
Причина: Python не установлен или отсутствует в системном PATH
Решение:
- macOS: Python 3 должен быть предустановлен
- Windows: Загрузить с python.org и убедиться, что “Add to PATH” отмечен при установке
Проблема: Пустые имена после обновления
Причина: Поле заметки пусто или находится в неправильной позиции
Решение: Скрипт покажет предупреждение. Проверьте формат вашего imageNotes и настройте параметр позиции.
Интеграция в ваш рабочий процесс
Этот скрипт можно интегрировать в автоматизированные рабочие процессы:
- Экспорт из GPS Camera: Экспортировать точки как KMZ/KML
- Извлечь KML: Распаковать KMZ при необходимости
- Запустить скрипт: Обработать KML для обновления имен
- Импортировать в GIS: Использовать в Google Earth, QGIS или других инструментах
Исходный код
#!/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)
Поддержка
По вопросам или проблемам:
- Убедитесь, что Python 3 установлен правильно
- Проверьте, что
imageNotesсодержит значения, разделенные табуляцией
Лицензия
Этот скрипт предоставляется как есть для использования с экспортами приложения. Не стесняйтесь изменять и адаптировать его под ваши конкретные нужды.
Связанная документация
Экспорт и импорт
- Параметры обмена фото/точками - Узнайте, как экспортировать точки в форматах KMZ, KML, GPX и CSV
- Организация точек в коллекции - Понять структуру данных перед экспортом
Работа с Google Earth
- Настройки и персонализация Google Earth - Настроить файлы KMZ в Google Earth, стили всплывающих окон и доступ к необработанному KML
Связанные рабочие процессы
- Настройка имен файлов для пакетного экспорта - Автоматизация именования файлов в скриптах пакетной обработки
- Резервное копирование настроек для автоматизации рабочего процесса - Управление профилями рабочих процессов программно
- Импорт фотографий с данными о местоположении - Завершить рабочий процесс экспорт/обработка/импорт
Последнее обновление: Ноябрь 2025