【问题标题】:Calculating a radius with longitude and latitude [duplicate]用经度和纬度计算半径[重复]
【发布时间】:2013-03-12 21:39:11
【问题描述】:

我正在尝试确定两个位置(每个位置都有自己的纬度和经度值)是否在一定距离内,例如半径为 3 英里。我有 double 值来表示每个位置的纬度和经度。

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

//Location 2
Double lattitude2 = 33.325;
Double longitude2 = 44.422000000000025;

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

【问题讨论】:

标签: java gis geospatial


【解决方案1】:

Great Circle distance

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));
}

如果您的纬度和经度以度为单位,请将它们转换为弧度。

【讨论】:

    【解决方案2】:

    要获得两点之间的距离,您只需要使用这个 sn-p 代码。

    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));
    

    ---已编辑---

    请检查 cmets 以获得两个坐标(不是 2D)的解决方案。

    【讨论】:

    • 这给出了二维空间中两点之间的直线距离。他正在寻找的是在球体上移动的球体上两点之间的最短距离。所以大圆距离是他所需要的。
    • 公平地说,距离的限制是 3 英里,与局部拓扑中奇数局部山丘的影响相比,超过 3 英里的地球曲率不会非常显着。 :)
    • 要获得坐标之间的距离,他必须阅读这篇文章 (stackoverflow.com/questions/365826/…)。这里有更完整的解释(movable-type.co.uk/scripts/latlong.html)。很抱歉我的其他回复。
    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    相关资源
    最近更新 更多