如何从点创建多边形 (Spatial4j)

How to create Polygon from Point (Spatial4j)

我想在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。有帮助吗?

好吧,好像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() returns表面积。 还可以通过 jtsShapeFactory.getGeometryFrom(shape)Shape 创建 Geometry,然后 returns 一个 Geometry.

注意:即使在调用 build() 之后也要小心执行 polygonBuilder.pointXY()。它仍然会将这些点附加到 build.

之前链接到构建器的任何内容