我已经在平面内加载了大量点,我需要从给定点和以米为单位的半径距离绘制一个圆/椭圆,然后检查哪些点在圆内。
我已经用 inside() 方法用多边形完成了这个,但是我找不到一种方法来绘制圆/椭圆,而不必指定多边形周围的每个点。
有没有办法在 JTS 上做到这一点,还是我需要另一个 java 库?
如果我理解正确,你有半径和中心,所以你可以像这样用 JTS 画一个圆:
public static Geometry createCircle(double x, double y, final double RADIUS) {
GeometricShapeFactory shapeFactory = new GeometricShapeFactory();
shapeFactory.setNumPoints(32);
shapeFactory.setCentre(new Coordinate(x, y));
shapeFactory.setSize(RADIUS * 2);
return shapeFactory.createCircle();
}
您只需验证与该点的距离是否小于半径。无需绘制圆圈即可知道其中包含哪些点。为了更快的运行时间,比较距离的平方和半径的平方;这节省了不必要的平方根运算。
对于椭圆,问题只是稍微困难一点,涉及二次形式x^2 + k y^2
。
您可以简单地buffer
将圆心设为正值,如下所示:
Point centerPoint = ...;
Polygon circle = (Polygon) centerPoint.buffer(0.1);