ogr2ogr कई आकार-प्रकार विलय करता है: -nln टैग का उद्देश्य क्या है?


11

उप-फ़ोल्डरों पर पुनरावृत्ति को पुन: व्यवस्थित करने और सभी आकृतिफलों को एक में मिलाने के लिए मूल स्क्रिप्ट है:

#!/bin/bash
consolidated_file="./consolidated.shp"
for i in $(find . -name '*.shp'); do
    if [ ! -f "$consolidated_file" ]; then
        # first file - create the consolidated output file
        ogr2ogr -f "ESRI Shapefile" $consolidated_file $i
    else
        # update the output file with new file content
        ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i
    fi
done

वेब के चारों ओर लंबवत सभी उदाहरणों में होवर मैंने देखा कि जहां मैं आउटपुट फ़ाइल को अपडेट करता हूं -nln, उदाहरण के लिए टैग जोड़ा जाता है:

ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged

प्रलेखन के अनुसार यह कहता है:

नई परत के लिए एक वैकल्पिक नाम असाइन करें

और मैंने देखा कि यह "मर्ज" नामक एक अस्थायी शेपफाइल बनाता है, और लूप के अंत में फाइल पिछले शेपफाइल मैं विलय के समान है।

मुझे समझ नहीं आता कि मुझे इसकी आवश्यकता क्यों है? क्योंकि मैं इस टैग के बिना सफलतापूर्वक विलय करने में सफल रहा।

जवाबों:


19

जीडीएएल के लिए डेटासोर्स हैं जिनमें परतें हैं। कुछ डेटास्टोर्स, जैसे डेटाबेस वाले या GML, कई परतें पकड़ सकते हैं, लेकिन कुछ अन्य जैसे आकार-प्रकार केवल एक परत हो सकते हैं।

आप उदाहरण के लिए जियोपैकेज ड्राइवर के साथ परीक्षण कर सकते हैं कि क्या होता है यदि आप डेटासॉर के साथ -nln स्विच का उपयोग नहीं करते हैं जिसमें कई परतें हो सकती हैं।

ogr2ogr -f gpkg merged.gpkg a.shp
ogr2ogr -f gpkg -append -update merged.gpkg b.shp

ogrinfo merged.gpkg
INFO: Open of `merged.gpkg'
      using driver `GPKG' successful.
1: a (Polygon)
2: b (Polygon)

शेपफाइल ड्राइवर को आवश्यक रूप से लेयर नाम की आवश्यकता नहीं होती है क्योंकि यदि आप डेटासटोर नाम "a.shp" देते हैं, तो ड्राइवर के पास एक सिंगल लेयर देखने के लिए लॉजिक होता है, जिसका नाम शेपफाइल का बेसनेम है। इसलिए आप "merged.shp" कमांड के साथ डेटा जोड़ सकते हैं:

ogr2ogr -f "ESRI Shapefile" merged.shp a.shp
ogr2ogr -f "ESRI Shapefile" -append -update merged.shp b.shp

हालाँकि, शेपफाइल ड्राइवर के पास एक डेटासोर पर विचार करने के लिए एक और तर्क भी है, जिसे बिना .shp एक्सटेंशन के मल्टी-लेयर डेटास्टोर के रूप में नाम दिया गया है। व्यावहारिक रूप से इसका मतलब है कि एक निर्देशिका जिसमें परतों के रूप में एक या एक से अधिक आकार के फाइल होते हैं। आप परीक्षण कर सकते हैं कि एक कमांड के साथ क्या होता है

ogr2ogr -f "ESRI Shapefile" merged a.shp
ogr2ogr -f "ESRI Shapefile" -append -update merged b.shp

या फिर आप अपनी स्क्रिप्ट को थोड़ा संपादित कर सकते हैं

consolidated_file="./consolidated"

यदि आप ogr2ogr के साथ डेटा को जोड़ना चाहते हैं, तो कुछ ड्राइवरों के साथ -nln स्विच का उपयोग करना अनिवार्य है, जिसमें कुछ भी शामिल हैं जो कई परतों का समर्थन नहीं करते हैं। कुछ अन्य ड्राइवरों के लिए यह कड़ाई से आवश्यक नहीं है, लेकिन -nln का उपयोग करना हमेशा सुरक्षित होता है और सौभाग्य से इसका उपयोग उन उदाहरणों में किया जाता है जिन्हें आपने पाया है। अन्यथा हमारे पास सवालों का एक गुच्छा होता है कि क्यों आकृतिफाइल्स में विलय सफल होता है लेकिन अन्य प्रारूपों में विलय करने से सिर्फ नई परतें बनती हैं।


तुम मुझसे तेज थे! और कुछ नई जानकारी के साथ मैं एक निर्देशिका में Shapefile आउटपुट के बारे में नहीं जानता था। महान!
pLumo

4

शेपफाइल्स में केवल एक डेटासेट (लेयर) शामिल होता है, इसलिए एक लेटर्ननाम सेट करना आवश्यक नहीं है।

यदि आप PostGIS, SQLite, KML आदि के साथ काम करते हैं जो एक फ़ाइल में कई परतों को संभाल सकता है, तो आपको -nln को सेट करना होगा। अन्यथा परतें फ़ाइल नाम की तरह होंगी, और इस तरह विलय नहीं होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.