QGIS Geometrileri Basitleştir aracını kullanarak bitişik çokgenleri basitleştirme


11

Ben 200.000 çokgen ile büyük bir Shapefile var ama dosya onu kullanacak uygulama için çok büyük. Bu çokgenleri genelleştirmek ve çok daha küçük bir dosya oluşturmak istiyorum.

Bunu QGIS'de "Geometrileri Basitleştir" aracını kullanarak yapmaya çalıştım. Bunu Shapefile'ımın çok küçük bir bölümünde denedim ve sonuçlardan memnunum, ancak nasıl çözüleceğini bilmediğim küçük bir sorunum var. Sorunu göstermek için görüntüyü ekledim.

BEYAZ sınırlar sadeleştirmeden önceki sınırlardır. KIRMIZI sınırlar sadeleştirmeden sonradır. Sorunlu alanlar turuncu renkte daire içine alınmıştır. Gördüğünüz gibi "basitleştirilmiş sınırlar", basitleştirmeden sonra önceki çokgenlerin herhangi birine ait olmayan bazı alanlar içerir.

Bu Shapefile'ı nasıl basitleştirebilirim ve çokgenler arasındaki ortak sınırları tek bir satır olarak nasıl tutabilirim ve basitleştirmeden sonra oluşturulan alanları nasıl kaldırabilirim?

QGIS'de Basitleştirilmiş Çokgenler

EK BİLGİ:

Önerilen talimatları uyguladıktan sonra

  1. Çokgenleri çizgilere dönüştürme
  2. Çizgileri basitleştirin
  3. Çizgileri tekrar çokgenlere dönüştürme

Aşağıdaki sonuçları alıyorum. Öncekinden biraz daha iyi ama yine de orijinal çokgenlerin dışındaki alanları alıyorum (aşağıdaki resimde beyaz alanlara bakın).

@Andrew, her satırı bitişik poligonla ilişkilendirmemi önerdi, ancak QGIS'de nasıl yapacağımı bilmiyorum.

resim açıklamasını buraya girin

Hala basitleştirici çokgenler sürecini tamamlamaya çalışıyorum. Bu yazıda önerilen talimatları izledim ve kabul edilebilir sonuçlar aldığımı düşündüğümde bir sorun daha ortaya çıktı. Aşağıda sonuçların görüntüleri ile yaptığımın bir özeti bulunmaktadır. Tüm adımlar QGIS içindeki PROCESSING araç kutusu kullanılarak gerçekleştirilmiştir.

  1. İlk olarak, çokgenleri satırlara dönüştürdüm
  2. İkinci olarak, v.clean ile break seçeneğini kullanarak satırları temizledim. Bu, TEMİZLENMİŞ VEKTÖR KATMANI ve HATA KATMANI ile sonuçlandı. Hata Katmanı (sağlanan görüntüdeki yeşil noktalar) her satır kesişiminde yeşil noktaya sahiptir. Bunun ne anlama geldiğini bilmiyorum.
  3. Üçüncüsü, "SIMOMIFRY GEOMETRY" aracını kullanarak çizgileri basitleştirdim (resimlerde kırmızı çizgiler oluşmasına neden olur). Basitleştirilmiş kırmızı çizgileri ve orijinal turuncu çizgileri karşılaştırdığımda sonuçtan memnunum.
  4. Dördüncüsü, "PROCESSING" deki "Polygonize" aracını kullanarak çizgileri çokgenlere dönüştürmek istedim ve beklemediğim sonuçlar elde ettim (gölgeli koyu zeytin renkli çokgenleri olan ikinci resim). Poligonizer bağlı hata katmanı kavşaklarına benziyor ve basitleştirilmiş çizgileri yok sayarak tamamen farklı çokgenler oluşturdu.

Birisi burada neyin yanlış gittiğini açıklayabilir mi?

Neden kırmızı basitleştirilmiş çizgiler basitleştirilmiş çokgenlere düzgün dönüştürülmedi?

Gördüğünüz gibi ben bir CBS uzmanı değilim ama bunu kendim yapmalıyım. Çözümden çok uzak olup olmadığımı bilmiyorum ama yapmak istediğim şey için kabul edilebilir bulduğum basitleştirilmiş satırları görebiliyorum, ancak onları çokgenlere dönüştüremiyorum.

İşte sürecin son iki adımının sonuçlarını içeren iki resim:

Basitleştirilmiş Çizgiler ve Orijinal Çizgiler

Plygonized basitleştirilmiş hatların sonuçları


@nhopton Polygonizer web sayfasında plugins.qgis.org/plugins/Polygonizer "Kesişen çizgilerden çokgenler oluşturuyor" diyor. Bu, bir çizgi kesişimi olduğunda çokgenlerin oluşturulacağını gösterir (ancak benim yorumum yanlıştır). İhtiyacım olan şey, "geometrileri basitleştirin" aracını kullanırken yaratılan boşluklardan kurtulmak ve Polygonizer bunu yapabiliyorsa çok mutlu olurdum.
David

Bunu düşünerek, orijinal çokgen katmanınız sorunsuz bir şekilde basitleştirilmelidir. Bunu yapmazsa, muhtemelen orijinal verilerde kötü çokgenlerin olduğu anlamına gelir. Biraz üst üste binen veya aralarında küçük boşluklar bulunan çokgenler. Böyle bir şey bulup bulamayacağınızı görmek için sorunlu alanları yakınlaştırmayı deneyin. N.
nhopton

Topolojiyi korumanın iyi bir yolu, @radouxju tarafından önerilen (gerekli olmayan centroid hesaplaması hariç) ve cevabımda İşleme modelinde temsil edilen iş akışından oluşur. Alternatif olarak, GRASS'ın v.generalizebaşka bir harika seçenek olduğunu düşünüyorum . Bu yardımcı olur umarım.
Antonio Falciano

Yanıtlar:


8

Varsayılan değerleri kullanarak İşleme Araç Kutusu'ndan GRASS v.generalize kullanarak oldukça iyi bir sonuç aldım:

resim açıklamasını buraya girin

Bazı çizgiler dokunulmadan kalır.


@Kantan tarafından önerilen v.in.ogr snap toleransını -1'den (snap yok) 0.00001'e ayarladıktan sonra bu yöntemle başarılı oldu .
cm1

4

Qgis2.16 ile bu sorunu yaşadım, ancak GRASS @AndreJ gibi topolojik olarak doğru bir sonuç veremedi.

Güzel bir çözüm, v.generalize.simplify aracının gelişmiş parametrelerinde v.in.ogr ek toleransını değiştirmektir . Varsayılan değer -1'dir ve GRASS'a yapışmayı önler.

Buraya (1e-05 m gibi) küçük bir değer koyarak, yakalama etkinleştirilir ve GRASS çokgenlerin paylaşılan sınırlarını tanır. Daha sonra basitleştirme, deliksiz topolojik olarak doğru bir katman verir.

Not: Yapış toleransını daha yüksek değerlere ayarlayarak, çokgenleri değiştirmek, hatta isterseniz çok ince olanları silmek bile mümkündür. Bu işlemi rmarea ve küçük artıkları silmek için yeterince büyük bir eşik kullanarak v.clean ile takip edin ve işte bitti!


3

önce çokgeninizi çizgilere dönüştürün

topolojinizi temizlemek için v.clean kullanın ("break" seçeneğiyle)

o zaman hatlarınızı basitleştiriyorsunuz

Sonunda satırlarınızı çokgenlere geri döndürürsünüz.

DÜZENLEME: Çokgenlerinizin özelliklerini elde etmek için, orijinal veri kümesinde çok parçalı çokgenleriniz yoksa , en iyi yol, eski ve basitleştirilmiş çokgenlerin sentroidlerini almak ve onlara en yakın konuma göre katılmaktır (centroids gerekir sınırlarınızı hafifçe değiştirirseniz çok hareket etmeyin)


1
Bana iş akışı sonunda çalışsa da birkaç adım atmış gibi geliyor. Çokgenleri çizgilere dönüştürdüğünüzde, çizgiyi tüm bitişik çokgenlerle ilişkilendirmeniz gerekebilir. Daha sonra basitleştirmeden sonra çizgileri çok parçalı çokgenlere dönüştürmeniz gerekir. Orijinal çokgenler dışbükey ise, orijinali centroid kullanarak basitleştirilmişle eşleştirebilirsiniz (örneğin, orijinalin sentroidi basitleştirilmiş poli içinde bulunuyorsa, bu bir eşleşmedir). Dışbükey değilse, çok daha zor olacaktır.
Andy W

Merhaba, radouxju tarafından önerilen prosedürü izledim ama orijinal poligonun bazı kısımlarını orijinal sınırları dışında hala alıyorum. Çizgiyi QGIS'deki tüm bitişik çokgenlerle nasıl ilişkilendirebilirim? Bu çokgenleri web uygulamalarında kullanmayı planlıyorum ve daha hızlı yükleme için düğüm sayısını azaltmam gerekiyor. Şu an elde ettiğim iyi bir azalma ama basitleştirmeden sonra bu küçük alanlardan kurtulamıyorum. Bunu çözmek için herhangi bir fikir büyük takdir edilecektir.
David

@ David. Bence probleminiz Adım 3, çokgenlere doğru çizgiler olabilir. İşleme araç setinde "Poligonize" adlı bir araç var ve ben bunu denemek istiyorum. Bunun hala Shapely ve Numpy paketlerinin kurulması gerektiğini düşünüyorum. Bu, QGIS-Master'da benim için çalışmak için "Poligonize" edemediğimi söyledi. N.
nhopton

2

Sorunu şu şekilde bir İşleme (eski SEXTANTE) modeliyle çözebilirsiniz:

resim açıklamasını buraya girin

Komut dosyası sürümü:

##Simplify polygons=name
##vectorlayer_input=vector
##number_tolerance=number 0.0
##output_layer_alg3=output vector
outputs_0=Processing.runalg("qgis:polygonstolines", vectorlayer_input, None)
outputs_1=Processing.runalg("qgis:simplifygeometries", outputs_0['OUTPUT'], number_tolerance, None)
outputs_2=Processing.runalg("qgis:linestopolygons", outputs_1['OUTPUT'], None)
outputs_3=Processing.runalg("qgis:joinattributestable", outputs_2['OUTPUT'], vectorlayer_input, ID, ID, output_layer_alg3)

Not: Yalnızca kısıt ortak alan olmak zorunda olmasıdır IDiçinde Join attributes tableçıktısının tek alan olduğu için, Lines to polygons. Bu nedenle ortak alan modelin değişken bir girdisi değildir. Dolayısıyla IDgiriş çokgen katmanında bir alan bulunmalıdır.

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.