在JTS中使用LineString拆分多边形

时间:2010-11-08 23:56:28

标签: computational-geometry jts

我有一个多边形和一个线段,其端点位于多边形的两侧。将多边形拆分为两个多边形的最简单方法是什么。 (我正在使用jts包)。

我尝试过使用polygonizer,但我认为我没有正确使用它,因为它似乎没有用。

谢谢,

2 个答案:

答案 0 :(得分:2)

迟到的答案,但也许有人也想知道这一点。

假设你有以下几何:
GEOMETRYCOLLECTION(POLYGON((100 150,100 340,350 340,350 150,100 150)),   LINESTRING(220 340,220 150))

你可以尝试行合并这个几何集合,结果应该是:
MULTILINESTRING((220 340,220 150),   (100 150,100 340,350 340,350 150,100 150))

从这里做一元联盟,结果是:
MULTILINESTRING((220 340,220 150),   (100 150,100 340,220 340),   (220 340,350 340,350 150,220 150),   (220 150,100 150))

最后,您可以使用多边形化器并获取两个多边形:
GEOMETRYCOLLECTION(POLYGON((220 150,220 340,350 340,350 150,220 150)),   POLYGON((100 150,100 340,220 340,220 150,100 150)))

因此,要使多边形工具正常工作,您必须将单个线串作为输入而不是整个多边形。

在JTS testbuilder中测试

答案 1 :(得分:1)

我做过类似的事情,让线条分段成为一个非常大的多边形,然后与两个多边形相交。你可以通过在segement的每一端添加segements来制作大的多边形,直到你在多边形的边界之外,然后添加两个超过原始多边形边界的90度的segements,然后用最后的两个段链接最后一个部分,用于制作一个大的多边形,将原始的poylgon沿着原始的segement分开并围绕原始多边形的其余部分。这相当痛苦但有效。 吉姆