जैसा कि आपने परीक्षण और त्रुटि के द्वारा खोजा था, कुछ ठीक करने वाले मुद्दे थे जिन्हें आपको ठीक करने की आवश्यकता थी, जिनमें से अंतिम को ogr2ogr के -nlt GEOMETRY
* तर्क का उपयोग करके हल किया गया था ।
* @ लीचाचार्य की टिप्पणी में अनुशंसा पर ध्यान दें, -nlt PROMOTE_TO_MULTI
जिसका उपयोग डिफ़ॉल्ट समाधान के रूप में किया जाता है, बजाय इसके nlt GEOMETRY
कि पूर्व सहायक लाभों के अतिरिक्त सर्वोत्तम अभ्यास को बढ़ावा देता है।
उपयोगकर्ता अनुमतियाँ और त्रुटि संदेश
सबसे पहले, ogr2ogr आपके आकार को नहीं खोल सकता है, और आपको एहसास हुआ कि अनुमतियाँ समस्याएँ वास्तव में OS उपयोगकर्ता को आपके आकार की पहुँच को प्रभावित कर रही हैं। लेकिन दूसरों के लिए यहाँ एक महत्वपूर्ण सबक है, विशेष रूप से, इस बिंदु पर ogr2ogr का त्रुटि संदेश भ्रामक था! वास्तव में, पहले टिप्पणीकारों में से एक ने सोचा था कि आपका शेपफाइल अवैध था, और सच में, मेरा पहला अनुमान यह था कि पथ / फ़ाइलनाम में शायद कोई त्रुटि / टाइपो था, या यह कि फ़ाइल पथ में कोई अपरंपरागत चरित्र रहा हो - जैसे अंतरिक्ष- जो आकृति को इंगित करने के लिए ogr2ogr की क्षमता को तोड़ रहा था। जैसा कि आपने खोजा था, यह वास्तव में उपयोगकर्ता की अनुमति के साथ एक समस्या थी। क्योंकि त्रुटि संदेश एक लाल हेरिंग बनाता है, यह एक संभावना है कि दूसरों को अपने दिमाग के पीछे रखने की आवश्यकता है। :)
SQL उपयोगकर्ता विशेषाधिकार और रहस्य विफलताएँ
मैं थोड़ी देर के लिए आपकी दूसरी त्रुटि से अचंभित हो जाता, लेकिन अपने SQL उपयोगकर्ता को एक अलग आयात उपयोगिता (shp2pgsql) के साथ परीक्षण करके, जो कि स्मार्ट था, आपको एक अधिक सटीक त्रुटि संदेश मिला और आपके SQL उपयोगकर्ता को spatial_ref_sys
टेबल पर आवश्यक विशेषाधिकार दिए । तो किसी को अपने ogr2ogr आयात निर्देश को ठीक से काम करने में कठिनाई हो रही है, यह सुनिश्चित करना चाहिए कि उनके SQL उपयोगकर्ता के डेटाबेस और 'spatial_ref_sys' तालिका दोनों पर पर्याप्त विशेषाधिकार हैं ।
मिश्रित ज्यामिति प्रकार और सर्वोत्तम अभ्यास
आपके द्वारा लगाई गई अंतिम बाधा इस तथ्य से संबंधित है कि आकृतिफाइल्स एकल और मल्टीपार्ट जियोमेट्री के लिए समान डेटासेट / फाइल में सह-अस्तित्व के लिए अनुमति देते हैं। ज्यामिति प्रकारों को एक ही तालिका में मिलाना बुरा व्यवहार माना जाता है, यहाँ तक कि एक ही प्रकार के एकल / बहुकार्य के लिए, और डिफ़ॉल्ट रूप से, आपके टूलकिन में खुले स्रोत के खिलाड़ी आपको ज्यामिति के प्रकारों को मिलाने से बचाने की कोशिश करेंगे। सौभाग्य से, हालांकि, वे आपको कुछ विकल्प देते हैं। प्रारंभ में मैंने आपके ogr2ogr निर्देश पर -nlt GEOMETRY
* तर्क को स्थापित करने की सिफारिश की , जिसने आपको ESRI के शिथिल सम्मेलन के बावजूद अपने बहुभुज डेटासेट को आयात करने की अनुमति दी। हालांकि सलाह दी जाती है, इसका मतलब है कि आपके टेबल में शायद एकल भाग और बहु-भाग दोनों हैं, और यह आपके बाद के अन्य सिरदर्द पैदा कर सकता है!
यह ध्यान देने योग्य है कि ogr2ogr का एक और -nlt
विकल्प है जिसे आपको विचार करना चाहिए, अर्थात् PROMOTE_TO_MULTI
। प्रलेखन उद्धृत करने के लिए ।।
GDAL 1.10 से शुरू होकर, PROMOTE_TO_MULTI का उपयोग बहुभुज के लिए बहुभुज या मल्टीलिग्लोन को मिलाने वाली परतों को स्वचालित रूप से बढ़ावा देने के लिए किया जा सकता है, और परतें जो मल्टीलाइनस्ट्रेस में लाइनस्टर या मल्टीलिनस्ट्रेस को मिलाती हैं। PostGIS और अन्य लक्षित ड्राइवरों के लिए शेपफाइल्स को परिवर्तित करते समय उपयोगी हो सकता है जो ज्यामिति प्रकारों के लिए सख्त जांच को लागू करते हैं।
दूसरे शब्दों में, यदि आप PROMOTE_TO_MULTI
ध्वज का उपयोग करते हैं , तो आपकी सभी सुविधाएँ बहुकारण सुविधाओं में परिवर्तित हो जाएंगी, तब भी जब वे एकल भाग से युक्त हों। जैसा कि टिप्पणियों में @LeeHachadoorian ने उल्लेख किया है- और मुझे यकीन है कि सबसे सहमत होंगे- आपको सलाह दी जाती है कि आप PROMOTE_TO_MULTI
हारने वाले GEOMETRY
झंडे को प्राथमिकता दें , क्योंकि यह आपकी तालिका में फीचर ज्यामिति को एकीकृत करते हुए सर्वश्रेष्ठ अभ्यास के अनुरूप है। मूल रूप से, आपके द्वारा लिखा गया कोई भी कोड बस मल्टीपार्ट जियोमेट्रीज़ की अपेक्षा करना चाहिए। जाहिर है, यह क्लीनर हो सकता है और विकास के कुछ सरल कर सकता है।
किसी व्यक्ति को किसी SHP से POST आयात में परेशानी होने की सामान्य सलाह
- सुनिश्चित करें कि आपके रास्तों में कोई फंकी कैरेक्टर नहीं हैं और यह कि पथ या फ़ाइल नाम में कोई टाइपोस या मिस्पेलिंग नहीं हैं
- जैसा कि @ user1919 ने खोजा है, सुनिश्चित करें कि आपके OS उपयोगकर्ता के पास आकार-प्रकार तक पहुँचने के लिए पर्याप्त विशेषाधिकार हैं! जैसा कि उन्होंने प्रदर्शन किया, यह QGIS जैसे किसी अन्य सॉफ़्टवेयर में शेपफाइल को खोलने का प्रयास करने में मदद कर सकता है - यदि यह एक सॉफ़्टवेयर में काम करता है, तो यह भ्रष्ट नहीं है, और इसे अन्य सॉफ़्टवेयर में काम करना चाहिए।
सबसे पहले, अपने ogr2ogr कमांड को निष्पादित करने पर विचार करें क्योंकि sudo
जब तक आप अपनी स्क्रिप्ट के अनुसार काम कर रहे होते हैं, तब तक आपको अनुमतियों के नियम से बाहर निकलने की अनुमति नहीं होती है।
- जैसा कि @ user1919 ने महसूस किया है, सुनिश्चित करें कि आपके एसक्यूएल उपयोगकर्ता के पास आपकी स्क्रिप्ट द्वारा लक्षित दोनों डेटाबेस पर पर्याप्त विशेषाधिकार हैं, साथ ही
spatial_ref_sys
तालिका भी।
फिर, पहले, जब आपकी स्क्रिप्ट काम कर रही हो, तो SQL विशेषाधिकार के मुद्दों को नियमबद्ध करने के लिए यहाँ पोस्टग्रैसक्ल सुपर यूजर का उपयोग करने पर विचार करें। यदि आपकी स्क्रिप्ट सुपरयुजर के साथ काम करती है, तो एक पसंदीदा ऑटोमेशन उपयोगकर्ता के साथ विफल हो जाती है, तो आप जानते हैं कि समस्या SQL उपयोगकर्ता से संबंधित है और आपके डेटा या आपके वातावरण (gdal / ogr स्थापना, आदि) से नहीं
सेट करने का प्रयास -nlt
करने के लिए या तो झंडा PROMOTE_TO_MULTI
या GEOMETRY
। चूंकि शेपफाइल्स एक ढीले फ़ीचर प्रकार के सम्मेलन के लिए अनुमति देते हैं, कभी-कभी आपको अपने ओपन सोर्स उपयोगिताओं को अधिक समायोजित करने का निर्देश देना पड़ता है :)
यदि आप PostGRESql या MySQL में आयात कर रहे हैं, तो सेटिंग की कोशिश करें -lco PRECISION=no
.. यदि चेतावनी दी जाए, तो मुझे ठीक से समझ में नहीं आता कि यह तर्क क्या करता है, लेकिन यहां मैंने जो अनुभव किया है .. जैसा कि आप जानते हैं, आकार-प्रकार में अक्सर फ़ील्ड SHAPE_LENGTH
और SHAPE_AREA
फ़ील्ड शामिल होते हैं , और मैं जब मुझे रहस्य विफलताओं का सामना करना पड़ रहा है, तो कभी-कभी ध्यान दिया जाता है, अगर मैं उन क्षेत्रों को हटा देता हूं तो मुझे सही तरीके से आयात करने के लिए डेटा मिल सकता है। हालाँकि, यदि मैं उपयोग करता हूं, तो मैं -lco PRECISION=no
उन फ़ील्ड को हटाने के लिए बिना आयात किए डेटा प्राप्त कर सकता हूं। मेरी अनुशंसा है कि इस पैरामीटर का उपयोग समस्या निवारण चरण के रूप में किया जाए, लेकिन यह समझने के लिए कि उत्पादन समाधान में आयात स्वीकार करने से पहले यह वास्तव में क्या समस्या है।
अंत में, यदि आप MySQL का उपयोग कर रहे हैं, तो ध्यान रखें कि कुछ बहुत बड़ी सुविधा वाले ज्यामिति MySQL के max_allowed_packet
पैरामीटर को रोक सकते हैं । आप इसके बारे में MySQL ड्राइवर के लिए प्रलेखन में अधिक पढ़ सकते हैं .. लेकिन इसका समाधान डिफ़ॉल्ट मूल्य से अधिक के लिए अनुमति देने के लिए अपने MySQL कॉन्फ़िगरेशन को बदलना है।
उदाहरण के लिए SHP को PostGIS आयात कमांड के लिए ogr2ogr
किसी भी नए शौक की खातिर, जो यहां से भटक सकते हैं, यह वही है जो मेरे SHP से पोस्ट आयातों में से अधिकांश का उपयोग ogr2ogr की तरह दिखता है। ध्यान दें कि मैं उद्धरणों में फ़ाइल पथ / नामों को लपेटता हूं, यह रिक्त स्थान, अजीब वर्णों और टर्मिनल के पार की रेखा को बचाता है .. साथ ही मैंने ऊपर चर्चा की अधिकांश दलीलें शामिल की हैं, जिसमें ज्यामिति नाम क्षेत्र के लिए ओवरराइड के अलावा, FID फ़ील्ड, और परत नाम:
ogr2ogr -f "PostgreSQL" "PG:host=127.0.0.1 user=myuser dbname=mydb password=mypassw0rd" "C:/path/to/some_shapefile.shp" -lco GEOMETRY_NAME=the_geom -lco FID=gid -lco PRECISION=no -nlt PROMOTE_TO_MULTI -nln new_layername -overwrite