Daha çox

Python / ogr bağlayaraq bir VÖEN-in həll edilməsi


Bəzi üçbucaqları götürdüyüm bir VÖEN modelim var (bax Şəkil 1). Üçbucaqların əksəriyyəti bir kənara, bəziləri bir təpəyə toxunur. İndi qalan bir üçbucağı ehtiva edən, bir çoxbucaqlıda həll edilmiş bir çoxbucaqlı şəkillər yaratmaq istərdim (çoxlu halqalardan, bax. Şəkil 2).

Şəkil 1. - Bəzi üçbucaqlar götürülmüş VÖEN. Toxunan üçbucaqların dikləri tam olaraq eyni, heç bir çoxbucaqlı yoxdur.

Şəkil 2 - Qeyd edək ki, bu yalnızdır bir atribut cədvəlində tək sətir olan çoxbucaqlı

Şəkillər QGIS "Vektor -> Geoprosessinq Alətləri -> Çözün" alətindən istifadə edilərək hazırlanmışdır. Ogr python bağlamaları ilə mümkündürmü? Budur indiyə qədər sınadığım şey:

osgeo idxalından ogr tri = ogr.Geometry (ogr.wkbLinearRing) tri.AddPoint (0,0) tri.AddPoint (0,1) tri.AddPoint (1,1) tri.CloseRings () poly = ogr.Geometry (ogr .wkbPolygon) poly.AddGeometry (tri) tri2 = ogr.Geometry (ogr.wkbLinearRing) tri2.AddPoint (1,1) tri2.AddPoint (0,1) tri2.AddPoint (0,4) poly2 = ogr.Geometry (ogr) .wkbPolygon) poly2.AddGeometry (tri2) poly.Union (poly2) # heç birini qaytarır.Intersect (poly2) # False poly qaytarır. Touchs (poly2) # False (?) poly qaytarır. Disjoint (poly2) # False

Bənzər bir şeyimi itirirəmpoli. həll (), bəlkə dəogr.wkbGeometriyaCollection?


OP-nin soruşduğu kimi bunu cavab olaraq qoydum. Problem, olduğu kimi istifadə edilən metodda deyildi ogr.Geometry.Union () uyğun olan, lakin bağlanmamış ikinci çoxbucaqlıdır.
Bunu etmək olar:
tri2.CloseRings ()
və ya ilk nöqtəni təkrarlayaraq:
tri2.AddPoint (1,1)
Çözmək üçün bir çox xüsusiyyət varsa (bütün təbəqə kimi) bunu etmək olarUnionCascaded ()təkrarlanan ittifaqla müqayisədə xeyli vaxt qənaəti təmin etməlidir.


Videoya baxın: Vergi borcunu necə öyrənməli? (Oktyabr 2021).