JTS中的圆内点问题

7

我已经在一个平面内加载了一组巨大的点,需要从给定的点和半径距离(以米为单位)开始画一个圆形/椭圆形,然后检查哪些点在圆内。

我已经使用within()方法通过多边形完成了这个过程,但是我找不到一种方法可以在不指定多边形周围每个点的情况下绘制圆形/椭圆形。

是否有一种方法可以在JTS上实现这一点,或者我需要另一个Java库?

3个回答

5

如果我理解正确,您已经有了半径和圆心,因此您可以使用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();
}

2
你只需要验证点到圆心的距离是否小于半径,不需要绘制圆来确定哪些点在内部。为了更快运行,可以将距离的平方与半径的平方进行比较;这可以避免不必要的平方根计算。
对于椭圆,问题稍微复杂一些,涉及二次形式 x^2 + k y^2。

1
为什么要使用shapeFactory.setNumPoints(32)?你是怎么想到32的? - Jeryl Cook

1
你可以简单地使用正值缓冲圆心,例如: buffer
Point centerPoint = ...;
Polygon circle = (Polygon) centerPoint.buffer(0.1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接