पोस्टग्रेक्यूएल QGIS में संपादन बिंदुओं / लाइनों / बहुभुजों को परेशान करता है


15

मुझे postgresql और QGIS से समस्या है:

  • मैं अंक / रेखाएँ / बहुभुज और फिलअप फ़ील्ड जोड़ सकता हूँ

लेकिन मैं नहीं कर सकता:

  • पॉइंट / लाइन्स / पॉलीगॉन हटाएं
  • अंक / रेखाएँ / बहुभुज संशोधित करें (क्षेत्र को स्थानांतरित करें या संशोधित करें)

ex: dbname = 'Europe' host = localhost port = 5432 user = 'postgres' sslmode = disable key = 'tid' अनुमानितमेटाटा = true srid = 900913 टाइप = पॉइंट टेबल = "public"। "planet_osm_point" (रास्ता) sql =।

QGIS डेटाबेस में व्यवस्थापक स्तर के रूप में जुड़ा हुआ है। PdAdmin III के साथ मैं सभी कर सकता हूं (बनाएं, हटाएं, संशोधित करें ...)

Postgresql डेटाबेस osm2pgsql के साथ OSM से आयात किया जाता है ।

अन्य परत पर, .shp की तरह, मेरे पास यह मुद्दा नहीं है।

कोई उपाय ?

कॉन्फ़िगरेशन: Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10


हाय मैथ्यू, क्या आप "I can" का सही अर्थ स्पष्ट कर सकते हैं। क्या उपकरण निष्क्रिय हैं, क्या यह परत को बचाने में विफल रहता है? और सबसे महत्वपूर्ण: क्या कोई त्रुटि संदेश है? पोस्टजी टैब में संदेश लॉग पैनल पर भी एक नज़र डालें।
मथियास कुह्न

ऑफकोर्स मैं एडिटिंग मोड में संबंधित लेयर (येलो पेन) में हूं। इकाई आइकन जोड़ने के अलावा संपादन उपकरण सभी ग्रे हैं। संदेश मुझे मिलता है: Le सेवा prestataire ne supporte pas l'effacement: Le prestataire de données ne supporte pas l'effacement des objets
Mathieu

1
अंग्रेजी में त्रुटि संदेश: प्रदाता विलोपन का समर्थन नहीं करता है: डेटा प्रदाता सुविधाओं को हटाने का समर्थन नहीं करता है
मैथ्यू

1
एडिटिंग टॉप आइकन: ऑल ग्रे एक्जिप्ट एड फीचर
मैथ्यू

1
2015-08-08T12: 10: 22 1 प्राथमिक कुंजी ctid है - मौजूदा सुविधाओं को बदलने में अक्षम (वैसे; "सार्वजनिक"। "planet_osm_point") 2015-08-08T12: 10: 23 1 प्राथमिक कुंजी ctid है - मौजूदा सुविधाओं का बदलना विकलांग (रास्ता; "सार्वजनिक"। "planet_osm_line") 2015-08-08T12: 10: 23 1 "जनता" के रास्ते के लिए फ़ीचर प्रकार या श्रीड। "planet_osm_polygon" निर्धारित नहीं किया जा सकता है या अनुरोध नहीं किया गया था।
मैथ्यू

जवाबों:


13

फिक्स्ड। समस्या कोई प्राथमिक कुंजी नहीं थी।

PgAdmin में यह अनुरोध करें।

अन्य तालिका सारणी में जोड़ें प्राथमिक कुंजी (आईडी);

Planet_osm_line तालिका और प्राथमिक कुंजी के रूप में osm_id कॉलम सेट करने के लिए उदाहरण:

टेटर टेबल ग्रह_ोसm_line ADD प्राथमिक कुंजी (osm_id);

अद्वितीय osm_id अद्वितीय है।


ऐसे आप इसको करते हैं!
DPSSpatial

आपको लगता है कि सही है?
मैथ्यू

मुझे ऐसा लगता है! मैं इसे काम पर परीक्षण कर सकता हूं और वापस रिपोर्ट कर सकता हूं, लेकिन अब यह जानना कि आपने डेटा को कैसे आयात किया, वह आपका वर्कअराउंड है। एक मुद्दा हालांकि - आप इस डेटा को क्यूजीआईएस में स्थानीय रूप से ओएसएम संपादक में सीधे डेटा को संपादित करने और वापस योगदान करने के बजाय संपादित क्यों कर रहे हैं?
DPSSpatial

1
OSM के बारे में: क्योंकि हमें सिर्फ अपने डिजाइन / ग्राफिक विनिर्देशों के साथ आउटपुट मैप तैयार करना है और प्रदाताओं से कुछ अन्य भुगतान किए गए डेटा को जोड़ना है (उन्हें सार्वजनिक करना संभव नहीं है)। QGIS उसके लिए एक आदर्श उपकरण है। योगदान एक और बात है, कि हम इसे समय पर करेंगे।
मैथ्यू

10

समाधान प्राथमिक कुंजी बनाने के लिए है, जैसा कि पहले ही उल्लेख किया गया है।

लेकिन डिजाइन के अनुसार, osm2pgsqlयह osm_idअद्वितीय नहीं है। यह एक ही osm_id के साथ कई पंक्तियों का उत्पादन कर सकता है ।

planet_osm_*QGIS में तालिकाओं को संपादित करने के लिए, उदाहरण के लिए एक और आईडी कॉलम जोड़ना बुद्धिमानी है gid

एक अद्वितीय gidस्तंभ जोड़ने के लिए :

ALTER TABLE planet_osm_point ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_line ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_polygon ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_roads ADD gid serial PRIMARY KEY;

यदि ज्यामिति स्तंभ सिर्फ GEOMETRY है तो QGIS में समस्याएँ हैं। कुछ प्रश्न विफल हो सकते हैं। मैंने planet_osm_polygonज्यामिति को इसके MultiPolygonसाथ बदलना उपयोगी पाया :

ALTER TABLE planet_osm_polygon
    ALTER COLUMN way TYPE geometry(MultiPolygon,3857) USING ST_Multi(way);

3

मुझे लगता है कि यह एक प्राथमिक महत्वपूर्ण मुद्दा है। आपकी तालिका में एक होना चाहिए और जब आप तालिका को PGAdmin के माध्यम से देखते हैं, तो इसे पहचाना जाना चाहिए।

मुझे भी यही समस्या थी, लेकिन आईडी (मनमानी) नामक प्राथमिक कुंजी फ़ील्ड के साथ परत को फिर से लोड किया गया और मेरे सभी संपादन उपकरण अब टूलबार पर सक्रिय हैं।

SQL का उपयोग करके आप 'सीरियल' डेटा प्रकार का एक OID कॉलम जोड़ सकते हैं और इस कथन का उपयोग करके एक प्राथमिक कुंजी बना सकते हैं:

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

ALTER TABLE schema."Tablename" ADD PRIMARY KEY (id);

GUI का उपयोग करके, आप अपनी परत को एक प्राथमिक कुंजी के साथ फिर से लोड कर सकते हैं जिसे डेटाबेस द्वारा मान्यता प्राप्त होगी और इस तरह PostGIS और QGI:

  • DB प्रबंधक खोलें
  • अपने डेटाबेस से कनेक्ट करें
  • 'आयात परत / फ़ाइल चुनें'
  • 'प्राथमिक कुंजी' बॉक्स की जांच करें, और 'प्राथमिक कुंजी' कॉलम के लिए एक नाम दर्ज करें जो अद्वितीय आईडी को संग्रहीत करेगा जो संपादन को सक्षम करेगा:

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

वहां से, PGAdmin पर वापस जाएं, अपने डेटाबेस से कनेक्ट करें, और उस तालिका पर क्लिक करें जिसे आपने अभी बनाया है - अब आप देख सकते हैं कि क्या OID कॉलम मान्यता प्राप्त है:

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


PGAdmin के तहत कोई प्राथमिक कुंजी नहीं है। मैं परत को फिर से कैसे लोड करूं?
मैथ्यू

@ मैथ्यू मैं QGIS में DBManager प्लगइन का उपयोग करेगा और 'प्राथमिक कुंजी' विकल्प पर क्लिक करके फ़ील्ड OBJECTID या कुछ इसी तरह का नाम देगा। यह आपको संपादन योग्य सुविधाएँ प्रदान करने की अनुमति देता है ... यदि आपके पास एक मौजूदा विशिष्ट आईडी फ़ील्ड है जिसे आप अपनी प्राथमिक कुंजी के रूप में उपयोग करना चाहते हैं, तो आप हमेशा बाद में इसे फिर से सेट कर सकते हैं ...
DPSSpatial

मैं निश्चित रूप से गूंगा हूं, लेकिन DBmanager के तहत मुझे प्राथमिक कुंजी सेट करने के लिए नहीं मिला। वास्तव में मेरे पास "प्लैनेटओएस बहुभुज" (और अन्य) के लिए एक चेतावनी है जिसमें कहा गया है कि कोई प्राथमिक कुंजी नहीं है।
मैथ्यू

ठीक है - बस मेरे उत्तर को अपडेट किया है, लेकिन यह करने का GUI तरीका है ... मुझे बताएं कि क्या आपके लिए काम करता है ...
DPSSpatial

प्रक्रिया के लिए बहुत बहुत धन्यवाद, और अब मुझे समझ में आया कि मैं ऐसा क्यों नहीं कर सकता: डेटाबेस को सीधे osm.pbf फ़ाइल से डाक में osm2pgsql का उपयोग करके आयात किया जाता है। आप प्रक्रिया में एक बाहरी फ़ाइल है जिसे लोड किया जाना है। मेरे मामले में डेटाबेस पहले से ही पोस्टगिस में है और कह रहा है कि आपकी स्क्रीन कैप्चर में कोई प्राथमिक कुंजी नहीं दिखाई गई है। तो एक तरीका है - जब डेटाबेस पहले से ही आयात किया गया है - एक प्राथमिक कुंजी pgsql के तहत उत्पन्न करने के लिए?
मैथ्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.