用经度和纬度计算半径

6 java gis geospatial

我试图确定两个位置(每个位置有自己的纬度和经度值)是否在彼此的特定距离内,例如半径为3英里.我有两个值来表示每个位置的纬度和经度.

//Location 1
Double lattitude1 = 40.7143528;
Double longitude1 = -74.0059731;

//Location 2
Double lattitude2 = 33.325;
Double longitude2 = 44.422000000000025;
Run Code Online (Sandbox Code Playgroud)

我想知道如何确定这两个位置是否在彼此的半径范围内,因为我不完全确定如何使用这种类型的值.

Boa*_*oaz 6

查看大圆距离

double CoordDistance(double latitude1, double longitude1, double latitude2, double longitude2)
{
    return 6371 * Math.acos(
        Math.sin(latitude1) * Math.sin(latitude2)
        + Math.cos(latitude1) * Math.cos(latitude2) * Math.cos(longitude2 - longitude1));
}
Run Code Online (Sandbox Code Playgroud)

如果您的经度和纬度以度为单位,则将其转换为弧度。


Dan*_*ena 0

要获取两点之间的距离,您只需要使用这段代码。

Point2D p1 = new Point2D(lattitude1, longitude2);
Point2D p2 = new Point2D(lattitude2, longitude2);

double distanceBetweenTwoPoints = (double)Math.sqrt((double)Math.pow((p1.x - p2.x), 2.0) + (double)Math.pow((p1.y - p2.y), 2.0));
Run Code Online (Sandbox Code Playgroud)

--- 已编辑 ---

请检查两坐标(非二维)解决方案的注释。

  • 这给出了二维空间中两点之间的直线距离。他要寻找的是在球体上运动的球体上两点之间的最短距离。所以大圆距离就是他所需要的。 (3认同)
  • 公平地说,距离限制为 3 英里,与当地拓扑中奇怪的当地山丘的影响相比,超过 3 英里的地球曲率不会非常显着。:) (3认同)