Ogr2ogr का उपयोग करके सभी shapefiles को डायरेक्टरी में बदलना है?


25

मेरे पास कई शेपफाइल्स के साथ एक निर्देशिका है।

Ogr2ogr से इन सभी शेपफाइल्स को MapInfo में कैसे बदल सकते हैं?

मुझे पता है कि मैं एक फाइल कैसे बदल सकता हूं। और मैं एक बैच स्क्रिप्ट लिख सकता हूं जो प्रत्येक फाइल के लिए एक लाइन लिख रही है। लेकिन निर्देशिका (और उपनिर्देशिका) में सभी फ़ाइलों को परिवर्तित करने का एक आसान तरीका नहीं है।


यह निर्भर करता है कि ऑपरेटिंग सिस्टम क्या है। मूल रूप से "फॉर" लूप बनाते
माइक टी

ओएस विंडोज 7. मैं कमांड प्रॉम्प्ट में यह कोशिश करता हूं:% f के लिए * .shp; do ogr2ogr -f MapInfo फ़ाइल $ f.tab। लेकिन वह काम नहीं करता है। मुझे त्रुटि मिलती है: निम्नलिखित ड्राइवरों के साथ '$ f.tab' को खोलने में असमर्थ .....
स्टीफन

यह टाब को SHP कैसे करना है: ogr2ogr -f "MapInfo फ़ाइल"% 1.tab% 1.shp। लेकिन जब तक ओजीआर एक पीआरजे फाइल को सही ढंग से पहचानने में सक्षम नहीं होता है, तब तक आप आसानी से गलत कॉर्डिसेस के साथ टीएबी फाइलों के साथ समाप्त हो जाते हैं। मैं बिल्ट-इन यूनिवर्सल ट्रांसलेटर (FME को कम करके) का उपयोग करने की सलाह देता हूं, जो आपके द्वारा चुनी गई सभी फाइलों को प्रोसेस भी कर सकता है। यह आपको सही कोऑर्डिसेस का चयन करने की अनुमति देता है।
उफ्फ कूसगार्ड

मैं वास्तव में MapInfo फ़ाइल में सही प्रक्षेपण के साथ समस्या है। मैं सही प्रक्षेपण को शामिल करने की कोशिश करता हूं, लेकिन यह काम नहीं करता है। डे मैपिनफो फ़ाइल में प्रक्षेपण गैर-पृथ्वी (मीटर) पर सेट है। क्या ओगरी 2 ओजीआर टूल के साथ सही प्रक्षेपण को शामिल करना संभव है। मैं दूसरी स्क्रिप्ट में कमांड लाइन डालना चाहूंगा। इसलिए मैं यूनिवर्सल ट्रांसलेटर का उपयोग नहीं करता।
स्टीफन

क्या आपने OGR लाइब्रेरी की कोशिश की है और यह कमांड-लाइन टूल है?
एलेक्स मार्कोव

जवाबों:


34

विंडोज पर, वर्तमान के तहत वर्तमान और उप-निर्देशिकाओं के लिए, इस कमांड का प्रयास करें:

for /R %f in (*.shp) do ogr2ogr -f "MapInfo File" "%~dpnf.tab" "%f"

यहाँ क्या चल रहा है , इसकी संक्षेप में व्याख्या करने के लिए , %~dpnf.tabचर % f का उपयोग करता है , जिसके साथ यह d नदी पत्र, p एथलीट नाम (जैसे, फ़ोल्डर या निर्देशिका) जोड़ता है , और फ़ाइल n ame ( .shpफ़ाइल एक्सटेंशन के बिना ) निकालता है । अंतिम रूप से, .tabनए एक्सटेंशन के लिए कंपाउंड चर संशोधक के तुरंत बाद जोड़ा जाता है।

इसलिए यदि आप निर्देशिका में हैं C:\MyData, और आपके पास इस निर्देशिका में डेटा है, और उप-निर्देशिका C:\MyData\Region1और C:\MyData\Region1\City1, किसी भी शेपफाइल ( .shpविस्तार के साथ ) पर कार्रवाई की जाएगी, और .tabउसी निर्देशिका में एक समान नाम वाली फ़ाइल बनाई जाएगी।


ठंडा! यह काम! उत्तर के लिए बहुत धन्यवाद :) एक और सवाल: क्या उपनिर्देशिका को संदर्भित करने और फ़ाइलों को किसी अन्य उपनिर्देशिका में बदलने का एक तरीका भी है। मेरे पास विभिन्न निर्देशिकाएं हैं जिनमें आकृति आकार शामिल हैं। जैसे: नीदरलैंड \ आकार \ प्रांतएक्स नीदरलैंड \ आकार \ प्रांत वाई नीदरलैंड \ आकार \ प्रांत और इसे इन फ़ोल्डरों में बदलना चाहते हैं: नीदरलैंड्स \ मैपइनफो \ प्रांतएक्स नीदरलैंड्स \ मैपइन्फो \ प्रांतवाई नीदरलैंड्स + मैपिनफो \ प्रांत जेड धन्यवाद :)
स्टीफन

मैंने एक पुनरावर्ती खोज के लिए उपरोक्त अपडेट किया है, हालांकि मुझे नहीं पता कि "आकार" को "मैपइन्फो" में बदलने के लिए अतिरिक्त तर्क कैसे करना है; शायद superuser.com
माइक टी

1
आपकी त्वरित प्रतिक्रिया के लिए फिर से धन्यवाद। यह बहुत मददगार था। मुझे केवल फाइलों को सही निर्देशिका में कॉपी करने की आवश्यकता है।
स्टीफन

ध्यान दें कि विंडोज कमांड लाइन और बैच फाइल कमांड अलग-अलग हैं: आपको प्रतिशत %fको दोगुना करना है %%f। देखें ss64.com/nt/for.html जानकारी के लिए।
आंद्रे जे

यह एक महान है, मैक पर एक समान दृष्टिकोण है
रयान गारनेट

11

यूनिक्स बैश के लिए:

#!/bin/bash

for FILE in *.mif # cycles through all files in directory (case-sensitive!)
do
    echo "converting file: $FILE..."
    FILENEW=`echo $FILE | sed "s/.mif/_new.shp/"` # replaces old filename
    ogr2ogr \
    -f "ESRI Shapefile" \
    "$FILENEW" "$FILE"
done
exit

यदि आप एक * निक्स-आधारित ओएस (यानी लिनक्स या ओएस एक्स) में काम कर रहे हैं, तो कुछ बैच शेल स्क्रिप्ट हैं जो यहां विकसित की गई हैं (जो ऊपर दी गई है)।

मैं एक कांटा पर काम कर रहा हूं जो कुछ लिपियों को थोड़ा अधिक सामान्य बनाता है और उपयोग पर थोड़ा अधिक विवरण प्रदान करता है।



यदि फ़ाइल नाम में रिक्त स्थान है, तो यह एक त्रुटि का कारण होगा।
जेसन डाल्टन

8

जैसा कि एलेक्स मार्कोव ने कहा, आपके लिए ओजीआर का उपयोग करने का सबसे अच्छा तरीका होगा ।

आपको एक स्क्रिप्ट करने की आवश्यकता होगी, लेकिन एक बहुत ही सरल। मूल रूप से यदि आप विंडोज़ का उपयोग कर रहे हैं, तो आपको बस इतना करना है कि कमांड लाइन में निम्नलिखित कोड चलाएं (डी वांछित फ़ोल्डर के अंदर):

for %f in (*.tab) do ogr2ogr -f "KML" %~nf.kml %f

इस साइट की जाँच करें, सब यहाँ समझाया गया है:

http://www.processamentodigital.com.br/?p=2511


2
मुझे लगता है कि आप भी कर सकते हैं: ogr2ogr -f "एम एल" {} {outfolder infolder} टिप से लिया underdark.wordpress.com/2012/05/09/batch-shapefile-clipping
नाथन डब्ल्यू

NB यह उत्तर एक बारीकी से संबंधित प्रश्न से आया है जो विभिन्न फ़ाइल स्वरूपों के लिए संदर्भित है।
whuber

नमस्ते, जब मैं उबंटू में इस दृष्टिकोण की कोशिश करता हूँ जैसे कि ogr2ogr -f "KML" {आउटफ़ॉर्म} {infolder} मुझे त्रुटि मिलती है: 'ERROR 4: KML फ़ाइल बनाने में विफल'। किसी भी विचार यहाँ क्या गलत हो सकता है? मैं KML समर्थन के साथ GDAL का निर्माण किया है
marty_c

7

अजगर के साथ:

import os 

for a in os.listdir(os.getcwd()):
   fileName, fileExtension = os.path.splitext(a)
   os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a, fileName + '.tab'))

आप os.getcwd()अपने पथ को बदल सकते हैं जहाँ आपकी फ़ाइलें स्थित हैं ...

मुझे उम्मीद है इससे आपको मदद मिली होगी


for a in *.shp:एक वाक्यविन्यास त्रुटि है; आप सोच रहे हैंfrom glob import glob; for a in glob('*.shp'):
माइक टी

ओह सॉरी, मैंने इसे गलत शैली में लिखा है। मैंने अपडेट कर दिया है। @ माइक टोज़ धन्यवाद
आरागॉन

4

आपको लूप की आवश्यकता नहीं है, आप बस एक निर्देशिका को स्रोत और गंतव्य के रूप में नाम दे सकते हैं और ogr2ogr स्रोत निर्देशिका में किसी भी फाइल को बदल देगा। यहां देखें: TAB को MIF / MIF को TAB में बदलना


धन्यवाद! क्या मैं एक माता-पिता की निर्देशिका से लेकर सभी उपखंडों का उल्लेख कर सकता हूं और सभी फाइलों को अन्य उप-विभाजनों में परिवर्तित कर सकता हूं। Ihave: नीदरलैंड्स के आकार \ प्रांतएक्स नीदरलैंड्स के आकार \ प्रांत \ नीदरलैंड \ आकार \ प्रांत और इतने पर ... और इसे इन फ़ोल्डरों में बदलना चाहते हैं: नीदरलैंड्स \ मैपइनफो \ प्रांतएक्स नीदरलैंड्स \ मैपइन्फो \ प्रांत वाई नीदरलैंड्स + मैपिनॉफ्स \ प्रांतज I प्रत्येक प्रांत के लिए एक पंक्ति लिखें, लेकिन क्या मैं इसे एक आदेश के साथ भी कर सकता हूं
स्टीफन

मैंने यह कोशिश नहीं की, लेकिन मुझे नहीं लगता कि यह संभव है। आपको एक लूप की आवश्यकता होगी जो संबंधित इनपुट और आउटपुट निर्देशिकाओं को संभालता है। इस मामले में संभवतः अजगर दृष्टिकोण का पालन करना आसान है।
टॉरस्टेन


0

Mapinfo में यूनिवर्सल ट्रांसलेटर कई फाइलों को संभाल सकता है। गंतव्य फ़ोल्डर पर जाएं, सभी शेपफाइल्स का चयन करें, इनपुट और आउटपुट के लिए सीआरएस को परिभाषित करें। यह किया जाना चाहिए।


0

यह ऊपर आरागॉन के उत्तर का शोधन है। यह केवल .TAB या .tab फ़ाइलों पर ogr2ogr चलाएगा, और फ़ोल्डर में अन्य फ़ाइल प्रकारों को अनदेखा करेगा।

#!/usr/bin/env python3

import os 

for a in os.listdir(os.getcwd()):
  fileName, ext = os.path.splitext(a)
  if ext.lower() == '.tab':
    print('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
    os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.