cascaded_union(多边形)恢复圆周点指数

时间:2017-03-29 02:48:56

标签: python shapely

我的问题很简单,但解决方案可能非常棘手。我有一组三角形,我想找到他们的联盟。三角形以标准方式给出:通过坐标点列表(每个点2个坐标)和连接列表,其中每条线是由其顶点索引给出的三角形:

分:

[ 15.02716923  81.72425842]
[ 21.42242702  79.91459549]
[ 24.87068939  79.0222168 ]
[ 29.25767326  77.96657562]
[ 34.07667923  76.65890503]

三角形:

7 8 9
8 18 20
8 20 10
8 10 9
9 10 11
9 11 108

我可以使用cascaded_union非常有效地找到联合:

import shapely.geometry as geometry
from shapely.ops import cascaded_union, polygonize

polys = [geometry.Polygon([[points[point, 0], points[point, 1]] for point in triangle]) for triangle in triangles]
result = cascaded_union (polys)

问题是,这给出了结果多边形的坐标。然而,我希望result的周长作为初始points数组中的索引。到目前为止,我还没有找到办法做到这一点。一种方法可能是编写我自己的组合函数,它会吐出点索引而不是坐标本身。

1 个答案:

答案 0 :(得分:0)

如果联合始终返回带有列表中点数的多边形,则可以只查找索引。构建一个字典,其中一个坐标元组指向您使用的索引(在代码中名为coord_to_pointer),然后您可以轻松获取索引:

polys = [geometry.Polygon([[points[point, 0], points[point, 1]] 
                          for point in triangle]) for triangle in triangles]
result = cascaded_union (polys)
geom_indexes = [coord_to_pointer[p] for p in list(result.exterior.coords)]