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

问题描述 投票:1回答:1

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

java polygon spatial shapes
1个回答
1
投票

好吧,似乎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()返回表面区域。人们也可以通过做GeometryShape创建一个jtsShapeFactory.getGeometryFrom(shape),然后返回Geometry

注意:即使在调用polygonBuilder.pointXY()之后,也要注意做build()。在build之前,它仍会将这些点附加到链接到建造者的任何东西上。

© www.soinside.com 2019 - 2024. All rights reserved.