哈罗
我不认为您要寻找的是特定算法。根据您的数据集,该任务可能非常困难或非常简单。
您应该将问题至少分为两部分。1)更多是一个网络问题,如何找到线串的闭合环。2)将封闭的线串表示为多边形
第二部分是“将线转换为多边形”,其格式比多边形/线串表示更多。我的意思是从:
LINESTRING(1 1,2 2)
LINESTRING(2 2,2 1)
LINESTRING(2 1,1 1)
到:
POLYGON((1 1,2 2,2 1,1 1))
正在将线转换为多边形,但我想这不是您要说的。较困难的部分是第一个。如果您有意大利面条的线条,如何将它们作为闭合的线串排序。
我想这个问题的答案取决于很多数据集。正如柯克(Kirk)所问的,线是否可以跨越,问题就更大了。如果您知道所有“行集合”都是闭合线串的一部分,那么它将变得越来越容易。然后,您可以抓住任何一条线,沿着路径行走,直到再次回来,然后继续执行上面的第二步。
我的观点是,数据集的条件设置了有关如何执行操作的所有规则。如果您想在一串意大利面条中找到所有可能的多边形,我认为必须涉及很多不同的算法才能在所有交叉中放置顶点,搜索所有可能的路径,依此类推。
在PostGIS中,该函数称为ST_Polygonize。
该函数根据您提供的线串创建所有可能的多边形。
这是由GEOS执行的,因此您可以在GEOS和JTS代码中找到背后的算法。
只是一些想法
/尼克拉斯