Przykłady pracy z surowymi plikami kml/kmz wyeksportowanymi z aplikacji.
Ta strona zawiera przykłady przetwarzania plików kmz/kml, które mogą być przydatne.
Przygotowanie:
- Eksport z GPS Camera: Eksportuj punkty jako KMZ/KML
- Wyodrębnij KML: Rozpakuj KMZ w razie potrzeby
Aktualizacja nazw znaczników KML z imageNotes
Ten przewodnik pokazuje, jak automatycznie aktualizować nazwy znaczników w plikach KML, wyodrębniając informacje z pola imageNotes.
Przegląd
Podczas eksportowania punktów z GPS Camera aplikacja tworzy pliki KML z nazwami znaczników opartymi na tytułach zdjęć i punktów. Zawartość notatek (takich jak “Note 1”, “Note 2” itp.) jest przechowywana w polu imageNotes jako wartości oddzielone tabulatorami. Ten skrypt pozwala automatycznie wyodrębnić te informacje z notatek i użyć ich jako nazwy znacznika, jeśli to konieczne.
Prawdopodobnie najlepiej jest po prostu umieścić notatki w polu Tytuł podczas robienia zdjęć. Ten skrypt przydaje się, jeśli tego nie robiłeś, a także jako przykład przetwarzania kml.
Przypadek użycia
Przed:
- Nazwy znaczników pokazują znaczniki czasu:
15Nov25 16:25,12Nov25 17:24 - Rzeczywiste notatki są ukryte w polu
imageNotes:Note 1,Note 2
Po:
- Nazwy znaczników pokazują znaczące notatki:
Note 1,Note 2 - Łatwa identyfikacja punktów na pierwszy rzut oka w aplikacjach mapowych
Struktura pliku KML
Eksportowany plik KML zawiera znaczniki o następującej strukturze:
<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>
Pole imageNotes zawiera wartości oddzielone tabulatorami:
- Pole 0: Znacznik czasu (
15Nov25 16:25) - Pole 1: Tekst notatki (
Note 1) ← To wyodrębniamy - Pole 2: Puste
- Pole 3: Typ (
Ad-hoc) - Pole 4: Adres
Rozwiązanie: Skrypt Python
Stworzyliśmy skrypt Python, który automatycznie przetwarza pliki KML i aktualizuje nazwy znaczników na podstawie zawartości imageNotes.
Funkcje skryptu
- Automatyczne wyodrębnianie: Analizuje pole
imageNotesoddzielone tabulatorami - Oparte na pozycji: Wyodrębnia notatkę z określonej pozycji pola (domyślnie: pozycja 1)
- Uniwersalny: Działa z dowolnym plikiem KML zgodnym z tą strukturą
- Bezpieczny: Tworzy kopie zapasowe przed nadpisaniem plików
- Elastyczny: Może wyprowadzić do nowego pliku lub aktualizować w miejscu
Jak to działa
- Parsuj plik KML: Odczytuje strukturę XML
- Znajdź znaczniki: Lokalizuje wszystkie elementy
<Placemark> - Wyodrębnij notatki: Dzieli
imageNotesprzez znak tabulacji i pobiera notatkę na pozycji 1 - Aktualizuj nazwy: Zastępuje cały element
<name>wyodrębni
oną notatką 5. Zapisz wynik: Zapisuje zaktualizowany KML do pliku
Instalacja i użycie
Wymagania wstępne
- Python 3 (preinstalowany na macOS, pobierz z python.org dla Windows)
- Nie są wymagane dodatkowe biblioteki (używa tylko biblioteki standardowej)
Przewodnik krok po kroku
1. Pobierz skrypt
Pobierz update_kml_names.py i umieść go w tym samym folderze co plik KML.
2. Uruchom skrypt
macOS / Linux:
# Przejdź do folderu zawierającego plik KML
cd ~/Downloads/Points_20251115_163211
# Uruchom skrypt (tworzy kopię zapasową, aktualizuje oryginał)
python3 update_kml_names.py doc.kml
# Lub utwórz nowy plik wyjściowy (zachowuje oryginał)
python3 update_kml_names.py doc.kml updated_points.kml
Windows:
# Przejdź do folderu zawierającego plik KML
cd %USERPROFILE%\Downloads\Points_20251115_163211
# Uruchom skrypt (tworzy kopię zapasową, aktualizuje oryginał)
python update_kml_names.py doc.kml
# Lub utwórz nowy plik wyjściowy (zachowuje oryginał)
python update_kml_names.py doc.kml updated_points.kml
3. Zobacz wyniki
Skrypt wyświetli aktualizacje:
Updated: '15Nov25 16:25' -> 'Note 1'
Updated: '12Nov25 17:24' -> 'Note 2'
Completed! Updated 2 placemark(s).
Output saved to: doc.kml
Zaawansowane użycie
Niestandardowa pozycja notatki
Jeśli pole imageNotes ma inną strukturę, a notatka znajduje się w innej pozycji, możesz ją określić:
# Wyodrębnij notatkę z pozycji 2 (trzecie pole, indeksowane od 0)
python3 update_kml_names.py doc.kml output.kml 2
Przetwarzanie wsadowe
Możesz przetwarzać wiele plików KML za pomocą prostego skryptu:
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
}
Przykład: Przed i po
Przed przetwarzaniem
<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>
Po przetwarzaniu
<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>
Szczegóły techniczne
Implementacja skryptu
Skrypt używa wbudowanego parsera XML Pythona (xml.etree.ElementTree) do:
- Parsowania plików KML z właściwą obsługą przestrzeni nazw
- Nawigacji po strukturze XML w celu znalezienia elementów znaczników
- Wyodrębniania i przetwarzania wartości oddzielonych tabulatorami
- Aktualizacji elementów z zachowaniem struktury pliku
Kompatybilność
- Wersja KML: 2.2 (format standardowy)
- Wersja Python: 3.6+
- Systemy operacyjne: macOS, Windows, Linux
- Aplikacje: Kompatybilny z Google Earth, QGIS, ArcGIS i innymi aplikacjami obsługującymi KML
Rozwiązywanie problemów
Problem: Skrypt nie znaleziony
Przyczyna: Python nie zainstalowany lub nie w systemowym PATH
Rozwiązanie:
- macOS: Python 3 powinien być preinstalowany
- Windows: Pobierz z python.org i upewnij się, że “Add to PATH” jest zaznaczone podczas instalacji
Problem: Puste nazwy po aktualizacji
Przyczyna: Pole notatki jest puste lub w niewłaściwej pozycji
Rozwiązanie: Skrypt wyświetli ostrzeżenie. Sprawdź format swojego imageNotes i dostosuj parametr pozycji.
Integracja z przepływem pracy
Ten skrypt można zintegrować z automatycznymi przepływami pracy:
- Eksport z GPS Camera: Eksportuj punkty jako KMZ/KML
- Wyodrębnij KML: Rozpakuj KMZ w razie potrzeby
- Uruchom skrypt: Przetwórz KML, aby zaktualizować nazwy
- Importuj do GIS: Użyj w Google Earth, QGIS lub innych narzędziach
Kod źródłowy
#!/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)
Wsparcie
W przypadku pytań lub problemów:
- Sprawdź, czy Python 3 jest poprawnie zainstalowany
- Sprawdź, czy
imageNoteszawiera wartości oddzielone tabulatorami
Licencja
Ten skrypt jest dostarczany w stanie, w jakim jest, do użytku z eksportami aplikacji. Możesz go swobodnie modyfikować i dostosowywać do swoich potrzeb.
Powiązana dokumentacja
Eksport i import
- Opcje udostępniania zdjęć/punktów - Dowiedz się, jak eksportować punkty w formatach KMZ, KML, GPX i CSV
- Organizowanie punktów w kolekcjach - Zrozum strukturę danych przed eksportem
Praca z Google Earth
- Dostosowania i personalizacje Google Earth - Dostosuj pliki KMZ w Google Earth, style balonów i dostęp do surowego KML
Powiązane przepływy pracy
- Dostosowywanie nazw plików dla eksportów wsadowych - Automatyzacja nazewnictwa plików w skryptach przetwarzania wsadowego
- Kopia zapasowa ustawień dla automatyzacji przepływu pracy - Programowe zarządzanie profilami przepływu pracy
- Importowanie zdjęć z danymi lokalizacji - Ukończ przepływ pracy eksport/przetwarzanie/import
Ostatnia aktualizacja: Listopad 2025