我想用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
。有帮助吗?
答案 0 :(得分: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()
会返回表面积。
也可以通过执行Geometry
从Shape
创建jtsShapeFactory.getGeometryFrom(shape)
,然后返回Geometry
。
注意:即使呼叫polygonBuilder.pointXY()
,也要小心build()
。仍然会将这些点附加到build
之前链接到构建器的任何内容。