PostgreSQL ปัญหาการแก้ไขจุด / บรรทัด / รูปหลายเหลี่ยมใน QGIS


15

ฉันมีปัญหากับ postgresql และ QGIS:

  • ฉันสามารถเพิ่มคะแนน / เส้น / รูปหลายเหลี่ยมและฟิลด์การเติม

แต่ฉันไม่สามารถ:

  • ลบคะแนน / เส้น / รูปหลายเหลี่ยม
  • ปรับเปลี่ยนจุด / เส้น / รูปหลายเหลี่ยม (ย้ายหรือปรับเปลี่ยนฟิลด์)

เช่นโฮสต์ dbname = 'ยุโรป' = localhost พอร์ต = 5432 ผู้ใช้ = 'postgres' sslmode = ปิดใช้งานคีย์ = 'tid' โดยประมาณmetadadata = true srid = 900913 ประเภท = ตารางจุด = "สาธารณะ". "planet_osm_point" (วิธี) sql =

QGIS เชื่อมต่อในระดับผู้ดูแลเข้าสู่ฐานข้อมูล ด้วย pdAdmin III ฉันทำได้ทั้งหมด (สร้างลบแก้ไข ... )

ฐานข้อมูล PostgreSQL นำเข้าจาก OSM กับosm2pgsql

ในเลเยอร์อื่นเช่น. shp ฉันไม่มีปัญหานี้

ความคิดใด ๆ

กำหนดค่า: Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10


สวัสดี Mathieu คุณสามารถอธิบายความหมายที่ชัดเจนของ "ฉันไม่สามารถ" ได้ไหม เครื่องมือถูกปิดการใช้งานมันล้มเหลวในการบันทึกเลเยอร์หรือไม่ และที่สำคัญที่สุด: มีข้อผิดพลาดหรือไม่? ดูที่แผงบันทึกข้อความในแท็บ postgis
Matthias Kuhn

offcourse ฉันอยู่ในโหมดแก้ไขไปยังเลเยอร์ที่เกี่ยวข้อง (ปากกาสีเหลือง) เครื่องมือแก้ไขเป็นสีเทาทั้งหมดยกเว้นการเพิ่มไอคอนเอนทิตี ข้อความที่ฉันได้รับคือ: Le service prestataire ne supporte pas l'effacement: Le prestataire de données ne รองรับe pas l'effacement des objets
Mathieu

1
ข้อความแสดงข้อผิดพลาดเป็นภาษาอังกฤษ: ผู้ให้บริการไม่สนับสนุนการลบ: ผู้ให้บริการข้อมูลไม่รองรับคุณสมบัติการลบ
Mathieu

1
การแก้ไขไอคอนด้านบน: สีเทาทั้งหมดยกเว้นคุณสมบัติเพิ่ม
Mathieu

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 ประเภทคุณลักษณะหรือ srid สำหรับวิธี "สาธารณะ". "planet_osm_polygon" ไม่สามารถกำหนดได้หรือไม่ได้รับการร้องขอ
Mathieu

คำตอบ:


13

แก้ไขแล้ว. ปัญหาคือไม่มีคีย์หลัก

ใน pgAdmin ทำตามคำขอนี้

แก้ไข TableName ของตารางเพิ่มคีย์หลัก (id);

ตัวอย่างสำหรับตาราง planet_osm_line และการตั้งค่าคอลัมน์ osm_id เป็นคีย์หลัก:

เปลี่ยนตาราง planet_osm_line เพิ่มคีย์หลัก (osm_id);

จนกว่า osm_id จะไม่ซ้ำกัน


นั่นเป็นวิธีที่คุณทำมัน!
DPSSpatial

คุณคิดว่าถูกต้องหรือไม่
Mathieu

ฉันคิดอย่างนั้น! ฉันสามารถทดสอบได้ในที่ทำงานและรายงานกลับ แต่ตอนนี้รู้ว่าคุณนำเข้าข้อมูลนั่นคือวิธีแก้ปัญหาของคุณ แต่ปัญหาหนึ่ง - ทำไมคุณจึงแก้ไขข้อมูลนี้ใน QGIS ภายในเครื่องแทนที่จะแก้ไขข้อมูลโดยตรงในเครื่องมือแก้ไข OSM และให้ข้อมูลกลับคืน
DPSSpatial

1
เกี่ยวกับ OSM: เป็นเพราะเราเพียงแค่ต้องสร้างแผนที่เอาท์พุทที่มีข้อกำหนดการออกแบบ / กราฟิกของเราและเพิ่มข้อมูลที่จ่ายอื่น ๆ จากผู้ให้บริการ (เป็นไปไม่ได้ที่จะทำให้เป็นสาธารณะ) QGIS เป็นเครื่องมือที่สมบูรณ์แบบสำหรับสิ่งนั้น การมีส่วนร่วมเป็นอีกสิ่งหนึ่งที่เราจะทำในเวลา
Mathieu

10

ทางออกคือการสร้างคีย์หลักตามที่ได้กล่าวไปแล้ว

แต่ด้วยการออกแบบosm2pgsqlไม่ได้รับประกันว่าosm_idจะไม่ซ้ำกัน สามารถผลิตหลายแถวที่มี osm_id

หากต้องการแก้ไขplanet_osm_*ตารางใน QGIS ก็ควรที่จะเพิ่มคอลัมน์ id อื่นเช่น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;

QGIS มีปัญหาหากคอลัมน์รูปทรงเรขาคณิตเป็นเพียง GEOMETRY แบบสอบถามบางอย่างอาจล้มเหลว ฉันพบว่ามีประโยชน์ในการเปลี่ยนplanet_osm_polygonรูปทรงเรขาคณิตเป็นMultiPolygon:

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

3

ฉันคิดว่านี่เป็นปัญหาหลักที่สำคัญ ตารางของคุณควรมีหนึ่งและที่ได้รับการยอมรับเมื่อคุณดูตารางผ่าน PGAdmin

ฉันมีปัญหาเดียวกันนี้ แต่โหลดเลเยอร์ใหม่ด้วยเขตข้อมูลคีย์หลักที่เรียกว่า ID (โดยพลการ) และเครื่องมือแก้ไขทั้งหมดของฉันจะทำงานบนแถบเครื่องมือ

การใช้ SQL คุณสามารถเพิ่มคอลัมน์ OID ของชนิดข้อมูล 'อนุกรม' และสร้างคีย์หลักโดยใช้คำสั่งนี้:

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

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

การใช้ GUI คุณสามารถโหลดเลเยอร์ของคุณอีกครั้งด้วยคีย์หลักที่ฐานข้อมูลจะรู้จักและทำให้ PostGIS และ QGIS:

  • เปิดตัวจัดการฐานข้อมูล
  • เชื่อมต่อกับฐานข้อมูลของคุณ
  • เลือก 'เลเยอร์นำเข้า / ไฟล์'
  • ทำเครื่องหมายที่ช่อง 'คีย์หลัก' และป้อนชื่อสำหรับคอลัมน์ 'คีย์หลัก' ที่จะเก็บ ID ที่ไม่ซ้ำที่จะเปิดใช้งานการแก้ไข:

ป้อนคำอธิบายรูปภาพที่นี่

จากตรงนั้นกลับไปที่ PGAdmin เชื่อมต่อกับฐานข้อมูลของคุณและคลิกที่ตารางที่คุณเพิ่งสร้างขึ้นใหม่ - ตอนนี้คุณสามารถดูได้ว่าคอลัมน์ OID นั้นเป็นที่รู้จักหรือไม่:

ป้อนคำอธิบายรูปภาพที่นี่


ภายใต้ PGAdmin ไม่มีคีย์หลัก ฉันจะโหลดเลเยอร์ใหม่ได้อย่างไร
Mathieu

@Mathieu ฉันจะใช้ปลั๊กอิน DBManager ใน QGIS และคลิกตัวเลือก 'คีย์หลัก' และตั้งชื่อฟิลด์ OBJECTID หรือสิ่งที่คล้ายกัน สิ่งนี้จะช่วยให้คุณมีคุณสมบัติที่แก้ไขได้ ... หากคุณมีฟิลด์ ID ที่ไม่ซ้ำกันซึ่งคุณต้องการใช้เป็นคีย์หลักของคุณคุณสามารถตั้งค่าใหม่ได้ในภายหลัง ...
DPSSpatial

แน่นอนฉันโง่ แต่ภายใต้ DBmanager ฉันไม่พบตำแหน่งที่จะตั้งค่าคีย์หลัก จริงๆแล้วฉันมีคำว่า "planetOSM polygon" (และอื่น ๆ ) เตือนว่าไม่มีคีย์หลัก
Mathieu

ok - เพิ่งปรับปรุงคำตอบของฉัน แต่นั่นเป็นวิธี GUI ในการทำ ... แจ้งให้เราทราบว่ามันเหมาะกับคุณหรือไม่
DPSSpatial

ขอบคุณมากสำหรับขั้นตอนและตอนนี้ฉันเข้าใจว่าทำไมฉันไม่สามารถทำได้: ฐานข้อมูลจะถูกนำเข้าโดยใช้ osm2pgsql โดยตรงใน postgis จากไฟล์ osm.pbf ในขั้นตอนของคุณเป็นไฟล์ภายนอกที่จะต้องโหลด ในกรณีของฉันฐานข้อมูลอยู่ใน postgis แล้วและบอกว่าไม่มีคีย์หลักเช่นที่แสดงในการดักจับหน้าจอของคุณ ดังนั้นจึงมีวิธี - เมื่อนำเข้าฐานข้อมูล - เพื่อสร้างภายใต้ pgsql คีย์หลักหรือไม่
Mathieu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.