ऐप से निर्यात की गई कच्ची kml/kmz फ़ाइलों के साथ काम करने के उदाहरण।

यह पृष्ठ kmz/kml फ़ाइल पोस्ट-प्रोसेसिंग के उदाहरण प्रदान करता है जो आपको उपयोगी लग सकते हैं।

तैयारी:

  1. GPS Camera से निर्यात करें: पॉइंट्स को KMZ/KML के रूप में निर्यात करें
  2. KML निकालें: यदि आवश्यक हो तो KMZ को अनज़िप करें

imageNotes से KML प्लेसमार्क नाम अपडेट करना

यह गाइड दिखाती है कि imageNotes फ़ील्ड से जानकारी निकालकर अपनी KML फ़ाइलों में प्लेसमार्क नाम को स्वचालित रूप से कैसे अपडेट करें।

अवलोकन

GPS Camera से पॉइंट्स निर्यात करते समय, ऐप फोटो और पॉइंट शीर्षकों के आधार पर प्लेसमार्क नामों के साथ KML फ़ाइलें बनाता है। नोट सामग्री (जैसे “Note 1”, “Note 2”, आदि) imageNotes फ़ील्ड में टैब-विभाजित मानों के रूप में संग्रहीत की जाती है। यह स्क्रिप्ट आपको स्वचालित रूप से उस नोट जानकारी को निकालने और यदि आवश्यक हो तो इसे प्लेसमार्क नाम के रूप में उपयोग करने की अनुमति देती है।

शायद सबसे अच्छा है कि आप फोटो लेते समय अपने नोट्स को Title फ़ील्ड में डालें। यह स्क्रिप्ट तब काम आएगी जब आप ऐसा नहीं कर रहे हों और 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 फ़ाइल के साथ काम करता है
  • सुरक्षित: फ़ाइलों को ओवरराइट करने से पहले बैकअप बनाता है
  • लचीला: एक नई फ़ाइल में आउटपुट कर सकता है या स्थान पर अपडेट कर सकता है

यह कैसे काम करता है

  1. KML फ़ाइल पार्स करें: XML संरचना को पढ़ता है
  2. प्लेसमार्क खोजें: सभी <Placemark> तत्वों का पता लगाता है
  3. नोट्स निकालें: imageNotes को टैब कैरेक्टर द्वारा विभाजित करता है और स्थिति 1 पर नोट प्राप्त करता है
  4. नाम अपडेट करें: संपूर्ण <name> तत्व को निकाले गए नोट से बदलता है
  5. आउटपुट सहेजें: अपडेट किए गए KML को फ़ाइल में लिखता है

इंस्टॉलेशन और उपयोग

पूर्वापेक्षाएँ

  • Python 3 (macOS पर पहले से इंस्टॉल, Windows के लिए python.org से डाउनलोड करें)
  • कोई अतिरिक्त लाइब्रेरी की आवश्यकता नहीं (केवल मानक लाइब्रेरी का उपयोग करता है)

चरण-दर-चरण गाइड

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>

तकनीकी विवरण

स्क्रिप्ट कार्यान्वयन

स्क्रिप्ट Python के बिल्ट-इन XML पार्सर (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 प्रारूप की जाँच करें और स्थिति पैरामीटर को समायोजित करें।

अपने वर्कफ़्लो के साथ एकीकरण

इस स्क्रिप्ट को स्वचालित वर्कफ़्लो में एकीकृत किया जा सकता है:

  1. GPS Camera से निर्यात करें: पॉइंट्स को KMZ/KML के रूप में निर्यात करें
  2. KML निकालें: यदि आवश्यक हो तो KMZ को अनज़िप करें
  3. स्क्रिप्ट चलाएं: नाम अपडेट करने के लिए KML को प्रोसेस करें
  4. 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 में टैब-विभाजित मान हैं

लाइसेंस

यह स्क्रिप्ट ऐप निर्यात के साथ उपयोग के लिए जैसी है वैसी प्रदान की जाती है। अपनी विशिष्ट आवश्यकताओं के लिए इसे संशोधित और अनुकूलित करने के लिए स्वतंत्र महसूस करें।


संबंधित दस्तावेज़ीकरण

निर्यात और आयात

Google Earth के साथ काम करना

संबंधित वर्कफ़्लो


अंतिम अपडेट: नवंबर 2025