QGIS, Postgis: ज्यामिति प्रकार स्तंभ प्रकार से मेल नहीं खाता है


30

मैं SPG के माध्यम से QGIS में Postgis के लिए कुछ बहुभुज आकार के आयात करने की कोशिश कर रहा हूँ। उनमें से एक को आयात नहीं किया जा सकता है और यह त्रुटि लौटाता है:

ERROR: Geometry type (Polygon) does not match column type (MultiPolygon)

मैंने MITIPOLYGON से POLYGON तक, SPIT में उस तालिका में विशेषता "फ़ीचर क्लास" को बदलने की कोशिश की है, लेकिन कुछ नहीं हुआ।

क्या दोनों प्रकार (बहुभुज और बहुभुज) को स्वीकार करने के लिए पोस्टगिस बनाने का कोई तरीका है? या हो सकता है कि किसी तरह मैं आकृति को ज्यामिति को बहुभुज से बहुभुज में बदल सकता हूं? कोई विचार?

मैंने विंडोज में Qgis 2.0.1 और ArchLinux में Qgis 2.3 की कोशिश की है।

जवाबों:


14

थूक अचूक है और अब अनुशंसित नहीं है। मैं सुझाव देता हूं कि प्रसंस्करण टूलबॉक्स का उपयोग करें और "इंपोर्ट इन पोस्टजीआईएस" एल्गोरिदम चुनें। मुझे उस दिनचर्या का उपयोग करने में बहुत अधिक भाग्य मिला है। ध्यान देने योग्य कुछ बातें:

  • डेटाबेस (कनेक्शन नाम) पैरामीटर को आपके डेटाबेस कनेक्शन को "Add PostGIS लेयर" डायलॉग से मिलाया जाना चाहिए।
  • स्कीमा पहले से मौजूद होना चाहिए - यह स्वचालित रूप से नहीं बनाया जाएगा

यह पूरी तरह से काम करता है। धन्यवाद। इसके अलावा मैंने डीबी मैनेजर के साथ इस शेपफाइल को लोड किया। पहले मैंने SPIT द्वारा मल्टीपिलगॉन के साथ अन्य परत को लोड किया, फिर मैंने इसे DBM (आयात परत / फ़ाइल) में POLYGON परत के साथ ओवरवोट किया। यह भी काम करता है।
dmh126

डेटाबेस नहीं दिखाएगा (भले ही इसका विंडोज पर QGIS 2.10 में एक ही नाम हो)
मेनेलाओस कोत्सोलारिस

19

यह एक ज्ञात समस्या प्रतीत होती है जिसे ठीक नहीं किया जाएगा: http://hub.qgis.org/issues/5328 देखें

यदि आपको वर्कअराउंड की आवश्यकता है, तो अपनी तालिका के ज्यामिति कॉलम प्रकार को सामान्य 'ज्यामिति' में बदलने का प्रयास करें:

ALTER TABLE my_table ALTER COLUMN geom SET DATA TYPE geometry;

अपना आयात पूरा करने के बाद, आप इसे वापस कर सकते हैं MultiPolygon:

ALTER TABLE my_table ALTER COLUMN geom 
    SET DATA TYPE geometry(MultiPolygon) USING ST_Multi(geom);

वैकल्पिक रूप से, ogr2ogr का उपयोग करके अपने डेटा को लोड करने का प्रयास करें ।


अपना उत्तर @dbaston को देकर। यह मेरे से बेहतर है। :)
sfletche

19

मैं ogr2ogr का उपयोग एक PostGIS डेटाबेस में शेपफाइल्स के अंतर्ग्रहण को स्वचालित करने के लिए करता हूं। विशेष रूप से प्रश्न के संबंध में, विकल्प का उपयोग करें:

-nlt PROMOTE_TO_MULTI

यह ogr2ogr को बहुउद्देशीय बहुभुज को MULTIPOLYGON में बढ़ावा देने के लिए बाध्य करेगा, जिससे त्रुटि से बचा जा सके। एक बहुत ही सरल उदाहरण:

ogr2ogr -f "PostgreSQL" PG:"dbname='<my_db>'" -nlt PROMOTE_TO_MULTI <shapefile>

मैंने pgsql होस्ट / ऑर्टिकल विवरण को छोड़ दिया है। कई आकार-प्रकारों को बैचने के लिए आप कुछ ऐसा कर सकते हैं:

find ./ -name *.shp | xargs -n1 ogr2ogr <ogr2ogr args omitting the shapefile>

यह काम करता है और अन्य उत्तरों की तुलना में आसान है। यह उत्थान के योग्य है।
जो जर्मनका

5

हालांकि मैंने इसे "इंपोर्ट टू पोस्टगिस" एल्गोरिदम के साथ हल करने की कोशिश की, मुझे सफलता नहीं मिली (मेरा डेटाबेस सूची में दिखाई नहीं दे रहा था - मैं क्यूजीआईएस 2.10 का उपयोग कर रहा हूं)।

इसके बजाय, मैंने shp2pgsql का उपयोग किया , जो नीचे वर्णित के रूप में एक साधारण कमांड प्रॉम्प्ट कार्य था:

  • ओपन कमांड प्रॉम्प्ट ( प्रशासक के रूप में )
  • PostgreSQL / बिन फ़ोल्डर में जाएं जो कुछ इस तरह दिखना चाहिए: C:\Program Files\PostgreSQL\9.4\bin>
  • बस अपनी .shpफ़ाइलों को इस निर्देशिका में कॉपी और पेस्ट करें । (मैंने अपने संपूर्ण फ़ोल्डर को अपनी .shpफ़ाइलों के साथ कॉपी किया ।
  • कमांड प्रॉम्प्ट पर निम्न टाइप करें: shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sqlजहां MyShpDirआपकी निर्देशिका, 4326 WGS84 का SRID है इसलिए यदि आप अलग-अलग SSID का उपयोग कर रहे हैं, तो MySHPFile.shpआपकी विशेष फ़ाइल ( MYSQLFileस्वचालित रूप से बनाई जाएगी)। स्पष्ट रूप से उन सभी फ़ाइलों के लिए करें जिन्हें आप कनवर्ट करना चाहते हैं। फ़ाइलें आपकी वर्तमान निर्देशिका ( C:\Program Files\PostgreSQL\9.4\binमेरे मामले में) में सहेजी जाएंगी

तो बस अपने PLSQL DataBase में SQL फ़ाइलों को कॉपी और पेस्ट करें।

इसके अलावा, इसके बारे में एक और अच्छी बात shp2pgsqlयह है कि आप कमांड में केवल पैरामीटर जोड़कर अपनी तालिका में तुरंत एक इंडेक्स बना सकते हैं I, जैसे:

shp2pgsql -s 4326 -I MyShpDir/MySHPFile.shp> MYSQLFile.sql

फायदा! :)


3

हां, आप अपनी तालिका में निम्नलिखित बाधा जोड़कर किसी भी ज्यामिति प्रकार (बहुभुज, बहुभुज, बिंदु, लिनेस्ट्रिंग, आदि) को स्वीकार करने के लिए PostGIS को बता सकते हैं।

PostGIS 2.x के लिए (जेनेरिक ज्यामिति टाइपमोड का उपयोग करके)

ALTER TABLE my_table ALTER COLUMN geom TYPE geometry(Geometry,4326);

पिछला उत्तर (बाधाओं के लिए PostGIS 1.x के लिए)

CONSTRAINT enforce_geometry_type CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geometrytype(geom) = 'POLYGON'::text OR geom IS NULL)

CONSTRAINT में या उसके पास सिंटैक्स त्रुटि। मैंने SET CONSTRAINTS की कोशिश की है, लेकिन इसके बजाय मुझे CHECK के पास एक ही त्रुटि मिली।
dmh126

आप किस संस्करण का प्रयोग कर रहे हैं?
sfletche

PostgreSQL 9.3 के लिए पोस्टगिस 2.1
dmh126

के enforce_geotype_geomबजाय का उपयोग करके देखें enforce_geometry_type। मुझे पता है कि अगर यह काम करता है, और मैं अपनी प्रतिक्रिया को संपादित करता हूँ अगर यह करता है।
sfletche

यह काम नहीं करता है। वही त्रुटि।
dmh126 15

2

मैंने 'इंपोर्ट इन पोस्टजीआईएस' एल्गोरिथम सॉल्यूशन की कोशिश की, लेकिन पाया कि यह काम भी नहीं किया। मुझे सबसे आसान समाधान डेटाबेस > DB प्रबंधक पर जाना , अपने डेटाबेस में नेविगेट करना और आयात परत / फ़ाइल (नीचे तीर) बटन पर क्लिक करना था।

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