QGIS'te PostgreSQL sorunları düzenleme / satır / çokgenler


15

Postgresql ve QGIS ile ilgili bir sorunum var:

  • Nokta / çizgi / çokgen ve doldurma alanı ekleyebilirim

Ama yapamam:

  • noktaları / çizgileri / çokgenleri sil
  • noktaları / çizgileri / çokgenleri değiştirme (alanı taşıma veya değiştirme)

örnek: dbname = 'Avrupa' ana bilgisayar = localhost bağlantı noktası = 5432 kullanıcı = 'postgres' sslmode = devre dışı bırakma anahtarı '' tid 'tahminimetadata = true srid = 900913 type = Nokta tablosu = "genel". "planet_osm_point" (yol) sql =

QGIS, yönetici seviyesi olarak veritabanına bağlanır. PdAdmin III ile hepsini yapabilirim (oluşturma, silme, değiştirme ...)

Postgresql veritabanı osm2pgsql ile OSM'den alınır .

.Shp gibi diğer katmanlarda bu sorun yok.

Herhangi bir fikir ?

Yapılandırma: Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10


Merhaba Mathieu, "Yapamam" ın tam anlamını açıklayabilir misin? Araçlar devre dışı bırakılmış mı, katman kaydetmede başarısız mı? Ve en önemlisi: bir hata mesajı var mı? Ayrıca postgis sekmesindeki mesaj günlüğü paneline de göz atın.
Matthias Kuhn

Ben ilgili katmana düzenleme modundayım (sarı kalem). Varlık simgesi eklemek dışında düzenleme araçlarının tümü Gri renktedir. Aldığım mesaj: Le service prestataire ne supporte pas l'effacement: Le prestataire de données ne supporte pas l'effacement des objets
Mathieu

1
İngilizce hata mesajı: Sağlayıcı silme işlemini desteklemiyor: Veri sağlayıcı özelliklerin silinmesini desteklemiyor
Mathieu

1
Düzenleme üst simge: Tümü Gri DIŞINDA Özellik Ekle
Mathieu

1
2015-08-08T12: 10: 22 1 Birincil anahtar ctid - mevcut özelliklerin değiştirilmesi devre dışı (yol; "genel". "Planet_osm_point") 2015-08-08T12: 10: 23 1 Birincil anahtar ctid - mevcut özelliklerin değiştirilmesi devre dışı (yol; "genel". "planet_osm_line") 2015-08-08T12: 10: 23 1 "Genel" yolu için özellik türü veya srid. "planet_osm_polygon" belirlenemedi veya istenmedi.
Mathieu

Yanıtlar:


13

Sabit. Sorun, birincil anahtar olmamasıydı.

PgAdmin'de bu isteği yapın.

ALTER TABLO tableName İLK ANAHTAR EKLE (id);

Planet_osm_line tablosu ve osm_id sütununu birincil anahtar olarak ayarlama örneği:

ALTER TABLE planet_osm_line İLK ANAHTAR EKLE (osm_id);

osm_id benzersiz olana kadar.


Bu iş böyle olur!
DPSSpatial

Doğru olduğunu mu düşünüyorsun?
Mathieu

Bence de! İş yerinde test edebilir ve geri raporlayabilirim, ancak şimdi verileri nasıl içe aktardığınızı bilmek, bu sizin geçici çözümünüzdür. Yine de bir sorun - bu verileri doğrudan bir OSM editöründe düzenlemek ve geri vermek yerine neden QGIS'de yerel olarak düzenliyorsunuz?
DPSSpatial

1
OSM hakkında: sadece tasarım / grafik spesifikasyonlarımızla bir çıktı haritası oluşturmamız ve sağlayıcılardan başka ücretli veriler eklememiz gerekiyor (bunları herkese açık hale getirmek mümkün değil). QGIS bunun için mükemmel bir araçtır. Katkıda bulunmak, zamanında yapacağımız başka bir şeydir.
Mathieu

10

Çözüm, daha önce de belirtildiği gibi, birincil bir anahtar oluşturmaktır.

Ancak tasarımla, eşsiz osm2pgsqlolduğunu garanti etmez osm_id. Aynı osm_id ile birkaç satır üretebilir .

planet_osm_*QGIS'deki tabloları düzenlemek için, örneğin başka bir kimlik sütunu eklemek akıllıca olacaktır gid.

Benzersiz bir gidsütun eklemek için :

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;

Geometri sütunu sadece GEOMETRİ ise QGIS problemleri vardır. Bazı sorgular başarısız olabilir. Ben planet_osm_polygongeometri değiştirmek için yararlı buldum MultiPolygon:

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

3

Bence bu temel bir konu. Tablonuzda bir tane olmalı ve tabloyu PGAdmin aracılığıyla görüntülediğinizde tanınacaktır.

Ben de aynı sorunu vardı, ancak ID (keyfi) adlı birincil anahtar alanı ile katman yeniden yüklendi ve tüm düzenleme araçları şimdi araç çubuğunda etkin.

SQL kullanarak 'seri' veri türünde bir OID sütunu ekleyebilir ve şu ifadeyi kullanarak birincil anahtar oluşturabilirsiniz:

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

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

Bir GUI kullanarak, katmanınızı veritabanı tarafından tanınacak birincil anahtar ve böylece PostGIS ve QGIS ile yeniden yükleyebilirsiniz:

  • DB Manager'ı aç
  • veri tabanına bağlan
  • 'katmanı / dosyayı içe aktar'ı seçin
  • 'Birincil Anahtar' kutusunu işaretleyin ve 'birincil anahtar' sütunu için düzenlemeyi etkinleştirecek benzersiz kimlikleri saklayacak bir ad girin:

resim açıklamasını buraya girin

Oradan, PGAdmin'e geri dönün, veritabanınıza bağlanın ve yeni oluşturduğunuz tabloya tıklayın; artık OID sütununun tanınıp tanınmadığını görebilirsiniz:

resim açıklamasını buraya girin


PGAdmin altında birincil anahtar yoktur. Katmanı nasıl yeniden yüklerim?
Mathieu

@Mathieu QGIS içinde DBManager eklentisini kullanır ve 'birincil anahtar' seçeneğini tıklar ve OBJECTID alanını veya benzer bir alanı adlandırırdım. Bu, düzenlenebilir özelliklere sahip olmanıza izin vermelidir ... birincil anahtarınız olarak kullanmak istediğiniz mevcut benzersiz bir kimlik alanınız varsa, bunu daha sonra istediğiniz zaman yeniden ayarlayabilirsiniz ...
DPSSpatial

Kesinlikle aptalım ama DBmanager altında birincil anahtarı nerede ayarlayacağımı bulamadım. Aslında "planetOSM poligon" (ve diğerleri) için birincil anahtar olmadığını söyleyen bir uyarı var.
Mathieu

tamam - cevabımı güncelledim, ama bunu yapmanın GUI yolu ... bunun sizin için uygun olup olmadığını bana bildirin ...
DPSSpatial

Yordam için çok teşekkürler ve şimdi neden bunu yapamıyorum anlıyorum: veritabanı osm2pgsql kullanarak doğrudan osm.pbf dosyasından postgis içine alınır. Yordamda, yüklenmesi gereken harici bir dosya var. Benim durumumda veritabanı zaten postgis ve ekran yakalamada gösterildiği gibi hiçbir birincil anahtar söylüyor. Pgsql altında birincil anahtar oluşturmak için veritabanı zaten içe aktarıldığında bir yol var mı?
Mathieu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.