PostGIS में बल्क लोड कई शेपफाइल्स


33

मुझे आकार-स्वरूप प्रारूप में सौ से अधिक डेटा परतें मिली हैं, जिन्हें मैं पोस्टजीआईएस डेटाबेस में अपलोड करना चाहता हूं। वे सभी एक ही प्रक्षेपण में हैं, लेकिन विभिन्न डेटा परतों का प्रतिनिधित्व करते हैं ताकि उनके पास एक ही स्कीमा न हो।

इन सभी फाइलों को मेरे पोस्टजीआईएस डेटाबेस (विंडोज़ 7 ओएस पर) में बदलने के लिए सबसे प्रभावी समय क्या है?

UPDATE: pgAdmin3 "PostGIS shapefile अपलोडर" (जैसा कि नीचे उल्लेख किया गया है) में आयात किया जा रहा है, अब डिफ़ॉल्ट रूप से PostGIS 2.0 के साथ उपलब्ध है ।


मैं इस के लिए एक उत्तर की तलाश कर रहा हूँ। हालांकि मैं इसे एक बैच की नौकरी बनाना चाहता हूं जो हर रात चलती है। वास्तव में मैं अपने पोस्टजीस को आर्कएसडीई (कुछ समय के लिए) का गुलाम बनाना चाहता हूं। PostGIS और SQL के लिए नया होने के नाते, मुझे cmd.exe स्क्रिप्ट मिलती है, लेकिन किसी तरह यह मेरे सिर में नहीं चिपकती है। मैं क्या करना चाहता हूँ एक बैच जॉब के रूप में आर्कएसडीई से निर्यात की गई shp फाइलों की एक श्रृंखला मिल रही है, फिर इन्हें मेरे PostGIS में अपलोड करें, जो पहले से मौजूद जीआईएस / टेबल को अधिलेखित कर देगा।
geosmiles

मैं इसे एक नए प्रश्न के रूप में पूछना चाहता हूं, "कैसे आर्कबीडी से पोस्टगिस के डेटा को बैच करना है"। कुछ दिलचस्प विचार हो सकते हैं।
माइक टी

जवाबों:


22

अगर GUI से चिपके रहना है तो pgAdmin के नए संस्करण में शेपफाइल लोडर है जिसे बल्क लोड के रूप में इस्तेमाल किया जा सकता है

यहाँ छवि विवरण दर्ज करें


32

यदि आपके पास एक विंडोज कंप्यूटर है, तो आप CMD.EXEकुछ गूढ़ फॉर-लूप के साथ अच्छे 'ol' का उपयोग कर सकते हैं । सुनिश्चित करें कि आप इसे "निहित" निर्देशिका में केवल shp / sql फ़ाइलों के साथ करते हैं जिन्हें आपको लोड करने की आवश्यकता है।

पहला कदम, एसक्यूएल लोडर फाइलें बनाएं (मैंने यह भी मान लिया है कि आपके पास 4326 के साथ लाट / लॉन्ग डब्ल्यूजीएस84 डेटा है। इसे अपने एसआरएस में अपडेट करें):

for %f in (*shp) do shp2pgsql -s 4326 %f public.%~nf > %~nf.sql

फिर यह सुनिश्चित करने के लिए अपनी SQL फ़ाइलों की जाँच करें कि वे अच्छी दिखती हैं, फिर एक समान लूप करें:

for %f in (*sql) do psql -h myserver -d mydb -U myuser -f %f > nul

bashPOSIX लोक (लिनक्स, मैक ओएस एक्स, आदि) के लिए बराबर की तरह कुछ है:

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` > `basename $f .shp`.sql
done

फिर

for f in *.sql
do
    psql -h myserver -d mydb -U myuser -f $f > /dev/null
done

या दोनों भागों को एक ही लूप में डाला जाता है, अगर आपको अंतरिम .sqlफाइल रखने की आवश्यकता नहीं है :

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` | psql -d mydb > /dev/null
done

यह एक ही पाश में बेहतर काम करेगा,for f in *.shp do shp2pgsql -s 4326 %f public.'basename $f .shp' > 'basename $f .shp'.sql | psql -h myserver -d mydb -U myuser done
Sam007

हाँ, यह एक कमांड में किया जा सकता है (लेकिन >पुनर्निर्देशित भाग के बिना , क्योंकि यह |पाइप भाग को तोड़ता है ), जब तक आप सुनिश्चित करें कि SQL psql को पारित सही है। मेरा तर्क है कि यह बेहतर नहीं है, क्योंकि SQL प्रारूप में डेटा का कोई रिकॉर्ड नहीं है।
माइक टी

4

आप इस एकल कमांड का भी उपयोग कर सकते हैं जो बहुत आसान लूपिंग करने में मदद करता है और अलग से .sql बनाने की भी आवश्यकता नहीं है।

for f in *.shp
    do shp2pgsql -c -D -s 4326 -I $f public.${f%.*} | psql -h hostname -d dbname -U usrname
done

2

तुम भी को देखने के लिए चाहते हो सकता है थूक , जो QGIS के लिए एक PostGIS लोडर प्लगइन है


1
मैंने सोचा है कि मैं आपके मरने के बाद लिंक को फिर से तैयार कर सकता हूं: docs.qgis.org/1.8/html/en/docs/user_manual/plugins/…
Akheloes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.