PostgreSQL kesulitan mengedit poin / baris / poligon di QGIS

14

Saya punya masalah dengan postgresql dan QGIS:

  • Saya bisa menambahkan titik / garis / poligon dan bidang isian

Tetapi saya tidak bisa:

  • hapus titik / garis / poligon
  • memodifikasi titik / garis / poligon (pindahkan atau modifikasi bidang)

mis: dbname = 'host Eropa' = port host lokal = 5432 pengguna = 'postgres' sslmode = menonaktifkan kunci = 'tid' estimmetadata = true srid = 900913 type = Tabel titik = "publik". "planet_osm_point" (cara) sql =

QGIS terhubung sebagai level admin ke dalam basis data. Dengan pdAdmin III saya dapat melakukan semuanya (membuat, menghapus, memodifikasi ...)

Database postgresql diimpor dari OSM dengan osm2pgsql .

Pada layer lain, seperti .shp, saya tidak memiliki masalah ini.

Ada ide ?

Konfigurasi: Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10

Mathieu
sumber
Hai Mathieu, bisakah Anda mengklarifikasi arti tepat dari "Saya tidak bisa". Apakah alat dinonaktifkan, apakah gagal pada lapisan simpan? Dan yang paling penting: apakah ada pesan kesalahan? Lihat juga panel log pesan di tab postgis.
Matthias Kuhn
Saya sedang dalam mode edit ke layer yang bersangkutan (pena kuning). Alat pengeditan semuanya berwarna Abu-abu kecuali menambahkan ikon entitas. pesan yang saya Dapatkan adalah: Layanan penuh dan dukungan: Pengaturan tinggi: dukungan dan dukungan
Mathieu
1
pesan kesalahan dalam bahasa Inggris: Penyedia tidak mendukung penghapusan: Penyedia data tidak mendukung penghapusan fitur
Mathieu
1
Mengedit ikon atas: All Grey KECUALI Tambahkan Fitur
Mathieu
1
2015-08-08T12: 10: 22 1 Kunci primer adalah ctid - mengubah fitur yang ada dinonaktifkan (cara; "publik". "Planet_osm_point") 2015-08-08T12: 10: 23 1 Kunci primer adalah ctid - mengubah fitur yang ada dinonaktifkan (cara; "publik". "planet_osm_line") 2015-08-08T12: 10: 23 1 Jenis fitur atau srid untuk cara "publik". "planet_osm_polygon" tidak dapat ditentukan atau tidak diminta.
Mathieu

Jawaban:

13

Tetap. Masalahnya bukan kunci utama.

Di pgAdmin lakukan permintaan ini.

ALTER TABLE tableName TAMBAHKAN KUNCI UTAMA (id);

Contoh untuk planet_osm_line tabel dan pengaturan kolom osm_id, sebagai kunci utama:

ALTER TABLE planet_osm_line ADD KUNCI UTAMA (osm_id);

sampai osm_id unik.

Mathieu
sumber
Begitulah cara Anda melakukannya!
DPSSpatial
Anda pikir itu benar?
Mathieu
Aku pikir begitu! Saya dapat mengujinya di tempat kerja dan melaporkan kembali, tetapi sekarang mengetahui bagaimana Anda mengimpor data, itu solusi Anda. Satu masalah - mengapa Anda mengedit data ini di QGIS secara lokal alih-alih mengedit data secara langsung di editor OSM dan berkontribusi kembali?
DPSSpatial
1
Tentang OSM: karena kami hanya perlu membuat peta keluaran dengan spesifikasi desain / grafis kami dan menambahkan beberapa data berbayar lainnya dari penyedia (tidak mungkin membuatnya menjadi publik). QGIS adalah alat yang sempurna untuk itu. Berkontribusi adalah hal lain, yang akan kita lakukan tepat waktu.
Mathieu
9

Solusinya adalah membuat kunci utama, seperti yang telah disebutkan.

Tetapi dengan desain, osm2pgsqltidak menjamin bahwa osm_iditu unik. Itu dapat menghasilkan beberapa baris dengan osm_id yang sama .

Untuk mengedit planet_osm_*tabel di QGIS, sebaiknya tambahkan kolom id lain, misalnya gid.

Untuk menambahkan gidkolom unik :

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 memiliki masalah jika kolom geometri hanya GEOMETRI. Beberapa kueri mungkin gagal. Saya merasa berguna untuk mengubah planet_osm_polygongeometri menjadi MultiPolygondengan:

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

Saya pikir ini adalah masalah utama. Meja Anda harus memiliki satu dan itu dikenali ketika Anda melihat tabel melalui PGAdmin.

Saya memiliki masalah yang sama, tetapi memuat kembali layer dengan bidang kunci utama yang disebut ID (arbitrary) dan semua alat edit saya sekarang aktif di bilah alat.

Menggunakan SQL Anda dapat menambahkan kolom OID dari tipe data 'serial' dan membuat kunci utama menggunakan pernyataan ini:

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

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

Menggunakan GUI, Anda dapat memuat ulang layer Anda dengan kunci utama yang akan dikenali oleh database dan dengan demikian PostGIS dan QGIS:

  • buka DB Manager
  • terhubung ke database Anda
  • pilih 'impor layer / file'
  • centang kotak 'Kunci Utama', dan masukkan nama untuk kolom 'kunci utama' yang akan menyimpan ID unik yang akan memungkinkan pengeditan:

masukkan deskripsi gambar di sini

Dari sana, kembali ke PGAdmin, sambungkan ke database Anda, dan klik pada tabel yang baru saja Anda buat - Anda sekarang dapat melihat apakah kolom OID dikenali:

masukkan deskripsi gambar di sini

DPSSpatial
sumber
Di bawah PGAdmin tidak ada kunci utama. Bagaimana cara memuat ulang layer?
Mathieu
@Mathieu Saya akan menggunakan plugin DBManager di QGIS dan klik opsi 'primary key' dan beri nama bidang OBJECTID atau yang serupa. Itu akan memungkinkan Anda untuk memiliki fitur yang dapat diedit ... jika Anda memiliki bidang ID unik yang ada yang ingin Anda gunakan sebagai kunci utama, Anda selalu dapat mengatur ulang nanti ...
DPSSpatial
Saya tentu saja bodoh tetapi di bawah DBmanager saya tidak menemukan tempat untuk mengatur kunci primer. Sebenarnya saya punya untuk "planetOSM poligon" (dan lain-lain) peringatan yang mengatakan tidak ada kunci utama.
Mathieu
ok - baru saja memperbarui jawaban saya, tetapi itu adalah cara GUI untuk melakukannya ... beri tahu saya jika itu berhasil untuk Anda ...
DPSSpatial
Terima kasih banyak untuk prosedur ini, dan sekarang saya mengerti mengapa saya tidak bisa melakukannya: database diimpor menggunakan osm2pgsql langsung ke postgis dari file osm.pbf. Dalam prosedur Anda adalah file eksternal yang harus dimuat. Dalam kasus saya database sudah dalam postgis dan mengatakan tidak ada kunci utama seperti yang ditunjukkan pada tangkapan layar Anda. Jadi ada cara - ketika database sudah diimpor - untuk menghasilkan di bawah pgsql kunci utama?
Mathieu