【发布时间】:2018-11-12 00:43:41
【问题描述】:
我已经在平面内加载了大量点,我需要从给定点开始绘制一个圆/椭圆,半径距离以米为单位,然后检查哪些点在圆内。
我已经使用 inside() 方法对多边形进行了此操作,但我找不到一种无需指定多边形周围的每个点即可绘制圆/椭圆的方法。
有没有办法在 JTS 上做到这一点,还是我需要另一个 java 库?
【问题讨论】:
我已经在平面内加载了大量点,我需要从给定点开始绘制一个圆/椭圆,半径距离以米为单位,然后检查哪些点在圆内。
我已经使用 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);
【讨论】: