PostGIS kullanarak bitişik çokgenleri basitleştirmek?


24

Komşu çokgen kümesini basitleştiren bir sorunla karşılaştım. Her bir poligonu Douglas-Peucker algoritmasıyla ayrı ayrı sadeleştirirsem (birçok açık kaynaklı araç tarafından kullanılır), ortaya çıkan poligonlar genellikle artık bitişik değildir. Bu sorun, örneğin, ülkelerin / illerin sınırlarını basitleştirirken mevcuttur.

PostGIS kullanarak bunun için bir çözümü olan var mı?

Yanıtlar:


19

Topolojik bir vektör modeli ihtiyacınız olanı sağlayacaktır. Topolojik olmayan bir depoda (bir şekil dosyası gibi), geometriler arasında tek bir kenar iki kez depolanır. Bir topolojik vektörde, alanlar çizgilerden ayrı olarak depolanır, böylece topolojiyi etkilemeden ayarlamalar yapılabilir. İyi bir diyagram bulamadım, bu yüzden bu basit örneği yarattım; burada A, B ve C alanları onları ayıran çizgilerin kesişimlerinden (1-4 bağlanır) hesaplanır. topolojik bir vektör örneği

Bu model ArcInfo tarafından ortalama olarak, GRASS'da varsayılan vektör modeli olarak kullanılır ve deneysel PostGIS Topoloji aracıyla PostGIS'te kullanılabilir . Belki de daha basit bir çözüm, verilerinizi çizgiye dönüştürmek, gereksiz bölümleri kaldırmak ve daha sonra basitleştirmeden sonra çokgenlerinizi yeniden oluşturmaktır.


15

Poligonlarınızı çizgilere dönüştürmek, bu çizgileri basit kapsama kenarları haline getirmek, bu kenarları basitleştirmek, ardından tekrar çokgenlere yeniden oluşturmak ve son olarak eski poligonların özelliklerini yeniden birleştirmek için çokgenli nokta kullanın. Yeni olanlar.

CREATE TABLE rings AS SELECT (ST_DumpRings(polys)).geom AS rings FROM polytable;
CREATE TABLE simplerings AS SELECT ST_Union(rings) AS simplerings FROM rings;
CREATE TABLE newpolycollection AS SELECT ST_Polygonize(ST_Simplify(simplerings, 10.0)) AS geom FROM simplerings;
CREATE TABLE newpolysnoattributes AS SELECT (ST_Dump(geom)).geom FROM newpolycollection;
CREATE TABLE newpolytable AS SELECT new.geom, old.attr FROM newpolysnoattributes new, polytable old WHERE ST_Contains(new.geom, ST_PointOnSurface(old.polys));

Yukarıdakilerde hatalar var, ancak ana kavram orada. İsterseniz hepsini tek bir sorguda yapabilirsiniz.



-1

Mozaiklemelisin. Eski ARC / INFO teorisinde geometri oluşturma teorisinde, iki bitişik geometri bir çoklu çizgi tarafından yaratılır ve bu çoklu çizgiyi paylaşır. Bu nedenle, genelleştiğinizde, her iki sınırı da genelleştirdi, çünkü aynı polyline'a başvurdu.

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.