Suite

Dissoudre un TIN à l'aide de la liaison python/ogr

Dissoudre un TIN à l'aide de la liaison python/ogr


J'ai un modèle TIN où je supprime certains des triangles (voir fig. 1). La plupart des triangles se touchent sur un bord, certains sur un sommet. Je voudrais maintenant générer un fichier de formes de polygones contenant les triangles restants, dissous en un polygone (de plusieurs anneaux, voir fig. 2).

Fig 1. - TIN avec quelques triangles supprimés. Les sommets des triangles qui se touchent sont exactement identiques, pas de polygones de ruban.

Fig. 2 - Notez que ce n'est que un polygone avec une seule ligne dans la table attributaire

Les images ont été réalisées à l'aide de l'outil QGIS "Vector-->Geoprocessing Tools-->Dissolve". Est-ce possible avec les liaisons python ogr ? Voici ce que j'ai essayé jusqu'à présent :

depuis osgeo import 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) # renvoie Aucun poly.Intersect(poly2) # renvoie False poly.Touches(poly2) # renvoie False (?) poly.Disjoint(poly2) # renvoie False

il me manque quelque chose commepoly.Dissoudre(), peut-être utilisé sur unogr.wkbGeometryCollection?


Comme demandé par l'OP, j'ai mis cela en réponse. Le problème ne venait pas de la méthode utilisée, car ogr.Geometry.Union() est celui qui convient mais avec le deuxième polygone qui n'était pas fermé.
Cela peut être fait avec :
tri2.CloseRings()
ou en répétant le premier point :
tri2.AjouterPoint(1,1)
S'il y a beaucoup de fonctionnalités à dissoudre (comme le calque entier), cela peut être fait avecUnionCascaded()ce qui est censé apporter un gain de temps important par rapport à une union itérative.