Uygulamadan dışa aktarılan ham kml/kmz dosyalarıyla çalışma örnekleri.

Bu sayfa, faydalı bulabileceğiniz kmz/kml dosya işleme örnekleri sağlar.

Hazırlık:

  1. GPS Camera’dan Dışa Aktar: Noktaları KMZ/KML olarak dışa aktarın
  2. KML’yi Çıkart: Gerekirse KMZ’yi açın

imageNotes’tan KML Yer İşareti Adlarını Güncelleme

Bu kılavuz, imageNotes alanından bilgi çıkararak KML dosyalarınızdaki yer işareti adlarını otomatik olarak nasıl güncelleyeceğinizi gösterir.

Genel Bakış

GPS Camera’dan noktaları dışa aktarırken, uygulama fotoğraf ve nokta başlıklarına dayalı yer işareti adlarıyla KML dosyaları oluşturur. Not içeriği (“Note 1”, “Note 2” vb. gibi) imageNotes alanında sekmeyle ayrılmış değerler olarak saklanır. Bu betik, o not bilgisini otomatik olarak çıkarmanıza ve gerekirse yer işareti adı olarak kullanmanıza olanak tanır.

Muhtemelen en iyisi, fotoğraf çekerken notlarınızı Başlık alanına koymaktır. Bu betik, bunu yapmadığınız durumlar için ve kml işleme örneği olarak da hizmet eder.

Kullanım Örneği

Önce:

  • Yer işareti adları zaman damgalarını gösterir: 15Nov25 16:25, 12Nov25 17:24
  • Gerçek notlar imageNotes alanında gizlidir: Note 1, Note 2

Sonra:

  • Yer işareti adları anlamlı notları gösterir: Note 1, Note 2
  • Harita uygulamalarında noktaları bir bakışta kolayca tanımlama

KML Dosya Yapısı

Dışa aktarılan KML dosyası aşağıdaki yapıya sahip yer işaretleri içerir:

<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 alanı sekmeyle ayrılmış değerler içerir:

  • Alan 0: Zaman damgası (15Nov25 16:25)
  • Alan 1: Not metni (Note 1) ← Çıkardığımız şey bu
  • Alan 2: Boş
  • Alan 3: Tür (Ad-hoc)
  • Alan 4: Adres

Çözüm: Python Betiği

KML dosyalarını otomatik olarak işleyen ve imageNotes içeriğine göre yer işareti adlarını güncelleyen bir Python betiği oluşturduk.

Betik Özellikleri

  • Otomatik çıkarma: Sekmeyle ayrılmış imageNotes alanını ayrıştırır
  • Konum tabanlı: Belirli bir alan konumundan not çıkarır (varsayılan: konum 1)
  • Genel: Bu yapıyı izleyen herhangi bir KML dosyasıyla çalışır
  • Güvenli: Dosyaların üzerine yazmadan önce yedek oluşturur
  • Esnek: Yeni bir dosyaya çıktı verebilir veya yerinde güncelleyebilir

Nasıl Çalışır

  1. KML dosyasını ayrıştır: XML yapısını okur
  2. Yer işaretlerini bul: Tüm <Placemark> öğelerini bulur
  3. Notları çıkar: imageNotes‘u sekme karakteriyle böler ve konum 1’deki notu alır
  4. Adları güncelle: Tüm <name> öğesini çıkarılan notla değiştirir
  5. Çıktıyı kaydet: Güncellenmiş KML’yi dosyaya yazar

Kurulum ve Kullanım

Ön Koşullar

  • Python 3 (macOS’ta önceden yüklenmiş, Windows için python.org ‘dan indirin)
  • Ek kütüphane gerekmez (yalnızca standart kütüphane kullanır)

Adım Adım Kılavuz

1. Betiği İndirin

update_kml_names.py dosyasını indirin ve KML dosyanızla aynı klasöre yerleştirin.

2. Betiği Çalıştırın

macOS / Linux:

# KML dosyanızı içeren klasöre gidin
cd ~/Downloads/Points_20251115_163211

# Betiği çalıştırın (yedek oluşturur, orijinali günceller)
python3 update_kml_names.py doc.kml

# Veya yeni bir çıktı dosyası oluşturun (orijinali korur)
python3 update_kml_names.py doc.kml updated_points.kml

Windows:

# KML dosyanızı içeren klasöre gidin
cd %USERPROFILE%\Downloads\Points_20251115_163211

# Betiği çalıştırın (yedek oluşturur, orijinali günceller)
python update_kml_names.py doc.kml

# Veya yeni bir çıktı dosyası oluşturun (orijinali korur)
python update_kml_names.py doc.kml updated_points.kml

3. Sonuçları Görüntüleyin

Betik güncellemeleri gösterecektir:

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

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

Gelişmiş Kullanım

Özel Not Konumu

imageNotes alanınız farklı bir yapıya sahipse ve not farklı bir konumdaysa, bunu belirtebilirsiniz:

# Konum 2'den notu çıkar (üçüncü alan, 0-indeksli)
python3 update_kml_names.py doc.kml output.kml 2

Toplu İşleme

Basit bir betik kullanarak birden fazla KML dosyasını işleyebilirsiniz:

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
}

Örnek: Önce ve Sonra

İşlemeden Önce

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

İşlemeden Sonra

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

Teknik Detaylar

Betik Uygulaması

Betik, Python’un yerleşik XML ayrıştırıcısını (xml.etree.ElementTree) kullanır:

  • Uygun ad alanı işlemeyle KML dosyalarını ayrıştırmak için
  • Yer işareti öğelerini bulmak için XML yapısında gezinmek için
  • Sekmeyle ayrılmış değerleri çıkarmak ve işlemek için
  • Dosya yapısını koruyarak öğeleri güncellemek için

Uyumluluk

  • KML sürümü: 2.2 (standart format)
  • Python sürümü: 3.6+
  • İşletim Sistemleri: macOS, Windows, Linux
  • Uygulamalar: Google Earth, QGIS, ArcGIS ve diğer KML destekleyen uygulamalarla uyumludur

Sorun Giderme

Sorun: Betik bulunamadı

Neden: Python yüklü değil veya sistem PATH’inde değil

Çözüm:

  • macOS: Python 3 önceden yüklenmiş olmalıdır
  • Windows: python.org ‘dan indirin ve kurulum sırasında “Add to PATH"in işaretli olduğundan emin olun

Sorun: Güncellemeden sonra boş adlar

Neden: Not alanı boş veya yanlış konumda

Çözüm: Betik bir uyarı gösterecektir. imageNotes formatınızı kontrol edin ve konum parametresini ayarlayın.

İş Akışınızla Entegrasyon

Bu betik otomatik iş akışlarına entegre edilebilir:

  1. GPS Camera’dan Dışa Aktar: Noktaları KMZ/KML olarak dışa aktarın
  2. KML’yi Çıkart: Gerekirse KMZ’yi açın
  3. Betiği Çalıştır: Adları güncellemek için KML’yi işleyin
  4. GIS’e Aktar: Google Earth, QGIS veya diğer araçlarda kullanın

Kaynak Kodu

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

Destek

Sorular veya sorunlar için:

  • Python 3’ün doğru şekilde yüklendiğini doğrulayın
  • imageNotes‘un sekmeyle ayrılmış değerler içerdiğini kontrol edin

Lisans

Bu betik, uygulama dışa aktarımlarıyla kullanım için olduğu gibi sağlanmaktadır. Özel ihtiyaçlarınıza göre değiştirmekten ve uyarlamaktan çekinmeyin.


İlgili Dokümantasyon

Dışa ve İçe Aktarma

Google Earth ile Çalışma

İlgili İş Akışları


Son güncelleme: Kasım 2025