QGIS से निर्यात करने के लिए फ़ील्ड कैसे निर्दिष्ट करें?


9

मैं QGIS 2.0.1 का उपयोग कर रहा हूं और MS SQL सर्वर से स्थानिक रूप से सक्षम डेटाबेस (ESRI नहीं) से जुड़ा हूं। मैं परत से कनेक्ट करने और इसे अपने टीओसी में लोड करने में सक्षम हूं। मैंने कई क्षेत्र छिपाए हैं जो दृश्यता के लिए महत्वपूर्ण नहीं हैं।

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

वेक्टर फ़ाइल में निर्यात विफल रहा। त्रुटि: फ़ील्ड GlobalID के लिए असमर्थित प्रकार

नोट 1 : यदि मैं डायलॉग बॉक्स में "स्किप एट्रिब्यूशन क्रिएशन" चेक करता हूं, तो शेपफाइल बिना किसी त्रुटि के बनाया जाता है।

नोट 2 : आर्कगिस में यह समस्या नहीं है, यह केवल GUID फ़ील्ड को "TEXT" प्रकार में परिवर्तित करता है।

तालिका को देखते हुए, मेरे द्वारा छिपाए गए फ़ील्ड में से एक GUID SQL प्रकार < uniqueidentifier > है, जो सभी संभावित अपराधी में है। इसे हल करने के प्रयास में, मैंने इस क्षेत्र को "छिपा" दिया। मुझे लगता है कि क्योंकि क्षेत्र छिपा हुआ था, क्यूजीआईएस इस क्षेत्र को निर्यात करने की कोशिश नहीं करेगा, लेकिन यह मामला नहीं निकला।

क्या आप उन क्षेत्रों को परिभाषित कर सकते हैं जिन्हें आप QGIS से निर्यात करना चाहते हैं?

क्या QGIS के लिए यह संभव है कि वह सिर्फ "दर्शनीय" क्षेत्रों को निर्यात करे? या क्या QGIS से ऐसा करने का एक और वैकल्पिक तरीका है (शायद एक ogr2ogr क्वेरी के माध्यम से खेतों को परिभाषित करें)? यह QGIS की कमी की तरह लगता है अगर मैं परिभाषित नहीं कर सकता कि किस क्षेत्र को निर्यात करना है।

अद्यतन: मैंने यह देखने के लिए एक नमूना आकार-प्रकार का उपयोग करके एक परीक्षण किया कि क्या मैं आउटपुट फ़ील्ड को सीमित कर सकता हूं। निम्नलिखित ogr2ogr कमांड लाइन ने काम किया और "नाम" को छोड़कर सभी क्षेत्रों को समाप्त कर दिया:

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

लेकिन QGIS का उपयोग करके और जोड़ना:

-sql "select name from city"

"इस रूप में सहेजें" संवाद के "परत" खंड में केवल एक क्षेत्र के साथ एक आकृति में परिणाम नहीं हुआ। इसलिए मैं वास्तव में यह नहीं देखता कि मैं केवल कुछ चुनिंदा क्षेत्रों को दिखाने के लिए फ़ाइल आउटपुट में कैसे हेरफेर कर सकता हूं। किसी भी मदद की सराहना की है।


अगर ogr2ogr इसे कर सकता है, तो QGIS कर सकता है, क्योंकि यह बिल्कुल टूल है जो बैकग्राउंड में चल रहा है। दुर्भाग्य से, मेरे पास परीक्षण करने के लिए कोई SQL सर्वर डीबी नहीं है ...
अंडरडार्क

सही। इसलिए मैंने -sql "select <fields> from <table>""सेव एज़" डायलॉग के "लेयर" हिस्से को (ग्लोबल फील्ड को <फ़ील्ड्स को छोड़कर) जोड़ने की कोशिश की , लेकिन वही त्रुटि अभी भी पॉप अप है। क्या मैंने इस कोड ब्लॉक का दुरुपयोग किया है, या यह एक बग है?
रयानKalton

यह उत्तर -sql gis.stackexchange.com/questions/30691/… के बजाय -select का सुझाव देता है ... मुझे लगता है कि यह डेटा स्रोत अनुभाग में जाता है, परत में नहीं।
UnderDark

आपके किसी भी सुझाव के साथ मेरे लिए कोई भाग्य नहीं है, मैंने "ओजीआर निर्माण विकल्पों" के "लेयर" और "डेटा स्रोत" क्षेत्रों में -select & -qql दोनों विकल्पों के कई संयोजनों की भी कोशिश की :( निश्चित रूप से, मैं नहीं हो सकता खेतों के एक सबसेट का निर्यात करने की आवश्यकता के साथ पहला ...
रयानKDalton

डेवलपर्स के साथ जांच के लायक हो सकता है। एक बग हो सकता है।
UnderDark

जवाबों:


1

यदि यह ogr2ogr के साथ कमांड लाइन में आपके लिए काम करता है, तो मुझे लगता है कि इसका उपयोग करना सबसे अच्छा समाधान है। आप अपने MSSQL डेटाबेस से एक आकृति बनाने के लिए एक साधारण बैट फ़ाइल लिख सकते हैं। जाहिर है आप डेटा को संपादित नहीं कर सकते हैं और उस तरह से सर्वर पर वापस सहेज सकते हैं।

QGIS में डेटा स्रोत और लेयर इनपुट बॉक्स हैं, लेकिन वे केवल ogr2ogr के -dsco और -lco मापदंडों के लिए हैं। OGR शेपफाइल ड्राइवर के पास आपकी आवश्यकताओं के लिए कोई उपयोगी dsco या lco नहीं है:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

वैकल्पिक रूप से, यह एक अजगर प्लगइन लिखना संभव है जो आपकी आवश्यकताओं पर SQL SELECT कमांड वाले सर्वर से डेटा का अनुरोध करता है। यह भी डेटा संपादन सक्षम होगा।


अब तक यह सबसे व्यवहार्य विचार लगता है। वहाँ सीधे अपने खुद के ogr2ogr वाक्यविन्यास रोल में QGIS यूजर इंटरफेस से ogr2ogr कमांड-लाइन को कॉल करने का एक तरीका है?
रयानKalton

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

वैकल्पिक रूप से, क्या आपने कभी MSSQL और QGIS के बीच मध्यस्थ के रूप में GDAL VRT वर्चुअल फ़ाइल का उपयोग करने की कोशिश की है?
आंद्रे जे

मैं नहीं है, लेकिन आपदाओं के साथ काम करने के लिए GDAL नहीं है? मैं एक बिंदु वेक्टर परत के साथ काम कर रहा हूं। मुझे एक "वर्चुअल टेबल" का विचार पसंद है, हालांकि यह बीच-बीच में चलता रहता है। क्या QGIS 2 में इन-मेमोरी लेयर नहीं है जिसे हम लिख सकते हैं?
रयानKalton

1
GDAL ogrvrt ड्राइवर भी है: gdal.org/ogr/drv_vrt.html । लेकिन मुझे लगता है कि इसे बेहतर ढंग से दूसरे सवाल पर रखना चाहिए।
आंद्रे जे

0

मैं आपको सुझाव दूंगा कि TOC में परत के लिए विशेषताएँ तालिका की जाँच करें और यदि GlobalID फ़ील्ड मौजूद है। मोड संपादित करने के लिए टॉगल करें, निर्यात के दौरान समस्या पैदा करने वाले कॉलम को हटा दें और विंडो को बंद कर दें। फिर शेपफाइल या जो भी आउटपुट फॉर्मेट चाहिए, उसे सेव कर लें। आशा है कि ये आपकी मदद करेगा।


1
मुझे यकीन नहीं है कि SQL सर्वर तालिका में फ़ील्ड को हटाना एक अच्छा विकल्प है। यह अभी भी सर्वर द्वारा आवश्यक हो सकता है।
आंद्रे जे

मुझे लगता है कि क्यूजीआईएस टीओसी लेयर से एक विशेषता कॉलम को हटाने से क्यूजीआईएस बफर में अद्यतन संरचना को बचा जाता है और आपको फ़ाइल को अन्य प्रारूप में निर्यात करने की अनुमति मिलती है। एक बार जब आप निर्यात समाप्त कर लेते हैं तो परत में परिवर्तन (जो आपने हटा दिया है) को नहीं बचाते हैं
फरहत अब्बास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.