QGIS'de (GEOS) çokgenleri toleransla çözün


11

Bir sel sular altında kalan alanı temsil eden bir çokgen vektör katman var. Katman, bazı alanların birden çok daha küçük dokunma poligonundan oluşacağı şekilde üretilmiştir (aşağıdaki "orijinal veriler" etiketli ekran görüntüsüne bakın).

Çokgenleri dokundukları yerde eritmek istiyorum. GEOS kütüphanesini kullanan QGIS'in fTools'unda dissolve geoprocessing aracını kullanırsam beklenmedik sonuçlar elde ederim (bkz. "QGIS fTools ile çözün"). GEOS, bu konularda belirtildiği gibi çokgenlerin dokunup dokunmadığını belirlemede bir eşik kullanmıyor gibi görünüyor:

http://trac.osgeo.org/qgis/ticket/3126

http://trac.osgeo.org/qgis/ticket/3184

http://hub.qgis.org/issues/2806

ArcGIS'de aynı yaklaşım beklenen sonucu verir (bkz. "ArcGIS 10.1 ile çözün").

Görünüşe göre bu bir hata yerine GEOS bir "özelliği" dir. Beklenen sonucu elde etmek için ihtiyacım olan verileri düzeltmenin bir yolu var mı? Küçük bir hassasiyet kaybı (birkaç cm?) Benim için kabul edilebilir. İdeal olarak çözüm, bir ön işleme adımı olarak bir QGIS eklentisine yazabileceğim bir şey olurdu.

İlgili soru (cevapsız): QGIS'de Coğrafi İşleme aracının tolerans değeri nasıl ayarlanır?

Örnek verilere şekil dosyası olarak bağlantı: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip

çokgenleri çözün v.dissolve


Bir çözüm, önce fTools ile çözünmüş çokgeni büyütmek ve sonra daraltmak olacaktır (önce pozitif ve sonra negatif tamponla tamponlama).
Jake

Bunu denedim, ancak diğer sorunları ile bitirmek (örneğin i.stack.imgur.com/LnFJy.png ). Burada mavi alan, olmamam gereken yerde tampon / erittiğim / negatif tampon kullandığım zaman oluşturulur. Bu orijinal problemden çok daha iyi değil. Orijinal "keskin" köşeyi nasıl kurtarabileceğimi göremiyorum.
Snorfalorpagus

Yanıtlar:


14

Bu durumda, önce topolojiyi sabitleyerek çözme aracına yardımcı olmanız gerekir. Bunu GRASS'ta nasıl yapabileceğiniz aşağıda açıklanmıştır.

Şekil dosyasını yüklediğinizde GRASS bunu böyle görür:

Her çarpı bir alanı işaretler. Sınır çizgilerinde bazı haçlar olduğunu görebilirsiniz: Bunlar, sınır çizgileri arasındaki hafif kaymanın neden olduğu şerit çokgenleridir.

  1. Gerçek çokgenler arasındaki boşlukların oluşturduğu şerit çokgenlerini çıkarın:

    v.clean input=sample output=tempA --o tool=rmarea thresh=0.001
  2. Sınır çizgilerini yaslayın:

    v.clean input=tempA output=tempB --o tool=snap thresh=0.001
  3. Yeni kavşaklarda sınır çizgilerini kırın:

    v.clean input=tempB output=tempA --o tool=break thresh=0.001
  4. Şimdi yinelenen sınır çizgilerini kaldırın:

    v.clean input=tempA output=tempB --o tool=rmdupl thresh=0.001
  5. Çokgenleri çözün

    v.dissolve input=tempB output=cleaned --o column=ID

Et voilà:


Teşekkürler @ Jake. Bu çok açık bir cevap. Ne yazık ki süreci tüm veri setime (2500km2 kapsayan) uygulamaya çalıştığımda, "HATA: G_realloc: snap.c: 186" adresinde 144720024 bayt bellek ayıramadığı için bir hata iletisi alıyorum. Sanırım daha küçük parçalara ayırmak zorunda kalacağım. Kavşakları / uzamsal indekslemeyi hızlandırmak için zaten 0.25km2 kareye böldüğüm için bu iyi olmalı (bu, örnek verilerdeki "ID" alanıdır).
Snorfalorpagus

7

GRASS GIS komutunu v.dissolve kullanın (Sextante eklentisinde -> GRASS Komutları -> Vektör)

Size hızlı bir şekilde çoğaltırsam örnek: resim açıklamasını buraya girin

V.dissolve ile sonuç:

resim açıklamasını buraya girin

açıklama

Sorunu anlamak kolaydır. İki alan ortak bir sınırı paylaşıyorsa, bu sınırın iki kez dijitalleştirilmesi ve aynı zamanda kopya halinde depolanması durumunda bir şekil dosyasının topolojisi yoktur.

Şekil dosyasını düzenlemeye çalıştığınızda bunu açıkça görüyorsunuz:

resim açıklamasını buraya girin

GRASS GIS (ArcGIS olarak) topolojik bir gis'dir. GRASS'ta şekil dosyasını içe aktardığınızda, elde edilen katmanın bir topolojisi vardır: iki alan arasındaki ortak kenarlık bir kez var olur ve paylaşılır.

resim açıklamasını buraya girin

Bu nedenle, bir şekil dosyasını çözmek istediğinizde ( iki sınırı çözdüğünüzde) sorunlarla karşılaşabilirsiniz (QGIS, GvSIG, OpenJUMP veya eski ArcView 3.x'te), bkz. ArcUserI: Topoloji ve Şekil Dosyalarını Anlama .

GRASS'ta v.dissolve, aynı kategori numarasına sahip alanlar arasındaki ortak sınırları çözmek için tasarlanmıştır


1
Benim tahminim bu sayısal bir sorun ve merak ediyorum OP geometri oldukça iyi bir kopyasını aynı sayısal özellikleri yakalar?
Chau

@Chau: v.dissolveOP'nin problemini ele alan bir tolerans parametresine sahiptir.
Jake

Bu detay yukarıdaki cevaba dahil edilmelidir, açıkladığınız için teşekkürler :)
Chau

Soruya şekil dosyası olarak orijinal verilere bir bağlantı ekledim. Kullandığım zaman v.dissolve, özelliklerin ortasındaki küçük kareyi "doldurması" dışında işe yarar görünüyor. i.stack.imgur.com/AA59l.png
Snorfalorpagus

1
Bir açıklama öneriyorum
gen
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.