2012-07-02 73 views
1

是否有一种干净的Java方法用于将两个给定重叠多边形的点合并为一个多边形?在Java中合并两个多边形

+0

合并怎么样?你试过什么? – m0skit0

+0

你的数据结构是怎样的? – mmoossen

+0

合并点,我试图单独运行的点,并检查相交。但是,要运行1000多个点的多边形是一项极其艰巨的任务。 –

回答

6

你想要的是一个Convex Hull Algorithm它将采用一组点并返回包含原始点的最小点集。这可以在n.log n时间完成。

+0

经过仔细检查,凸包算法是正确的做法。非常感谢。 –

6

Area类支持添加封闭多边形。

+0

现在,我正在寻找!谢谢你,先生。 –

+0

Upvoting this。结合多边形意味着您必须具备边缘感知功能,并且凸包算法通常只是查看点。如果您查看[Area.add()javadoc](http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Area.html#add(java.awt.geom。区域)),凸包算法只会产生一个矩形。 – mwoodman

2

凸凸不同于添加。添加意味着制作一个看起来像两个多边形重叠的多边形,而这不一定是凸面。

2

您可以使用JTS(Java拓扑套件)。

  • 创建多边形对象
  • 使用工会方法,将来自两个多边形返回所有点的设置

简单的代码示例:

  • 定的多边形1(作为WKT):POLYGON((0 0,0 10,10 10,10 0,0 0))
  • 鉴于多边形2(如WKT):POLYGON((5,15 5,15 15,10 15,5))

    // create polygons 
    Polygon p1 = new GeometryFactory().createPolygon(new Coordinate[]{new Coordinate(0, 0), new Coordinate(0,10), new Coordinate(10,10), new Coordinate(10,0), new Coordinate(0,0)}); 
    Polygon p2 = new GeometryFactory().createPolygon(new Coordinate[]{new Coordinate(5,5), new Coordinate(15,5), new Coordinate(15,15), new Coordinate(5,15), new Coordinate(5,5)}); 
    // calculate union 
    Geometry union = p1.union(p2); 
    // print as WKT 
    System.out.println(union.toText()); 
    

结果是一个新的多边形:

POLYGON ((0 0, 0 10, 5 10, 5 15, 15 15, 15 5, 10 5, 10 0, 0 0))