如何使用Spatial4j从点创建多边形

3

我想在Java中进行几何计算,发现Spatial4j应该符合我的需求。

我希望能够计算诸如两个多边形是否重叠以及它们的外包框是什么之类的内容。

我的想法是从一系列点创建一个多边形。

为此,我已经使用了以下代码进行测试:

Point point1 = shapeFactory.pointXY(0, 0);
Point point2 = shapeFactory.pointXY(5, 1);
Point point3 = shapeFactory.pointXY(3, 3);
Point point4 = shapeFactory.pointXY(0, 1);
List<Point> points = new ArrayList<>();
points.addAll(Arrays.asList(point1, point2, point3, point4));

所以,我现在有了我的点。我该怎么从这些点创建一个多边形(或者说任何形状)?

我认为shapeFactory.polygon()会创建一个多边形,但这却抛出了一个UnsupportedOperationException异常。需要帮助吗?


Shape4j 的源代码在哪里?我甚至找不到它。 - rjdkolb
我的错,名字搞错了。应该是 Spatial4j。我会编辑一下。 - k88
1个回答

4

好的,看起来Spatial4j没有连接这些点,所以它不是一个填充形状。相反,我依赖于JTS的Spatial4j实现,并且这样做就可以了。(Spatial4j的多边形未被实现)。

JtsSpatialContextFactory jtsSpatialContextFactory = new JtsSpatialContextFactory();
JtsSpatialContext jtsSpatialContext = jtsSpatialContextFactory.newSpatialContext();
JtsShapeFactory jtsShapeFactory = jtsSpatialContext.getShapeFactory();
ShapeFactory.PolygonBuilder polygonBuilder = jtsShapeFactory.polygon();
// note due to it being a builder one needs to chain the points.
Shape shape1 = polygonBuilder.pointXY(4, 0).pointXY(3, 3).pointXY(1, 4).pointXY(0, 0).pointXY(4, 0).build(); 

现在,例如shape.getArea()返回的是表面积。同时,通过执行jtsShapeFactory.getGeometryFrom(shape),可以从Shape创建一个Geometry。需要注意的是,在调用build()之后,使用polygonBuilder.pointXY()仍会将这些点附加到先前链接到构建器的任何内容之后。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接