【问题标题】:How to get distance in few meters between 2 pair of latitude longitude如何在2对纬度经度之间获得几米的距离
【发布时间】:2016-09-19 09:04:25
【问题描述】:

我想在 PHP(非 ANDROID)中计算 2 个纬度和经度点之间的距离**我已经阅读了有关 **Haversine 公式和余弦的球面定律 以计算两个点之间的距离点,但我的主要动机是在米中获得 2 点之间的最佳位置差异。

例如两台设备并排放置,安卓设备正在向服务器发送位置,因此我们需要获取每台设备的位置并计算这两个设备之间的最小距离(以米为单位) .当设备彼此相邻放置时,服务器计算后的结果应该在 2-3 米内

那么当设备在服务器端彼此相邻时,有哪些可能的方法来计算两个设备之间的最小距离(以米为单位)

注意:我需要计算以公里或英里为单位的距离,这在设备彼此相邻时会有很大差异。 Haversine 公式和余弦球面定律是我找到的最佳计算方法,但我需要在这些公式中做更多工作才能获得 2 个设备之间的最小差异。不在 Android 设备上。此问题与This Question无关

【问题讨论】:

  • @KNeerajLal 这个问题是针对 PHP 服务器端的,而不是针对应用程序 android 端的。在标记为重复之前阅读问题
  • 您是在寻找视线还是基于道路?你看过 API 的距离矩阵部分吗?
  • @Takarii 不是基于道路我正在寻找解决方案,通过使用上述公式获得 2 个设备之间的最小距离,并且当 2 个设备彼此放置时,它应该在 5 米以下

标签: php google-maps navigation geolocation


【解决方案1】:

我使用 PHP 中的 Haversine 公式计算两个地理坐标之间的距离(以公里为单位):

// Haversine formula
function geoDistance($lon1, $lat1, $lon2, $lat2) {
    $R = 6371; // Radius of the earth in km
    $dLat = deg2rad($lat2 - $lat1);
    $dLon = deg2rad($lon2 - $lon1);
    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
    $c = 2 * atan2(sqrt($a), sqrt(1-$a));
    $d = $R * $c; // Distance in km

    return $d;
}

我猜,足够精确的经纬度会产生乘以 1,000 米的结果,这对于以米为单位的距离度量是有用的,对吧?

根据https://gis.stackexchange.com/questions/8650/measuring-accuracy-of-latitude-and-longitude,小数点后五位最高可达1.1 m:它可以区分树木。

【讨论】:

  • 这可能有效,但我使用了类似的方法,当 2 个设备彼此相邻时,它不会返回 5-10 米以下的距离。我仍然会尝试这个
  • 经度和纬度都需要 5 位小数精度
  • 这就是 android 设备生成位置的方式 看看 28.5312119 和 77.2569046 它超过 5 个,我认为如果我从最后删除一些,那么位置将不准确,因为它应该是。请看看这个
  • 根据gis.stackexchange.com/questions/8650/…,小数点后五位最高可达1.1 m:它可以区分树木。
  • 感谢上面的链接,它真的非常有用,我需要尽可能地减少差异,所以我认为我需要使用超过 5 个小数位?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 2013-07-30
  • 2017-01-05
  • 2020-03-22
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多