php获取距离,关于php:如何在2对纬度之间获得几米的距离

我想计算PHP中的经度和纬度两个点之间的距离(不输入ANDROID)**我已经阅读过** Haversine公式和余弦球定律用于计算两个点之间的距离,但是我的主要动机是获得最佳位置差在2点之间,以米为单位。

例如,两个设备彼此相邻放置,并且android设备正在向服务器发送位置,因此我们需要获取每个设备的位置,并以米为单位计算这两个设备之间的最小距离。计算后来自Server的结果应类似于设备彼此相邻放置2-3米

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

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

@KNeerajLal这个问题是给PHP服务器端而不是应用程序android端。

您是在寻找视线还是基于道路? 您是否看过API的距离矩阵部分?

@Takarii不是基于道路,我正在寻找解决方案,以使用上述公式获得两台设备之间的最小距离,并且当两台设备相互放置时,距离应在5米以下

关于原始帖子中的最后一个注释:如果您使用的公式对于很小的距离不够准确,则可以尝试使用椭圆三角函数。 无论如何,GPS坐标都是在椭球上测量的,因此Haversine公式是一个近似值。 如果您采用这种方式,则还应该查看gis.stackexchange。

(这是作为评论,因为我不了解完整的答案,但是我没有足够的声誉来评论) sub>

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

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

}

我猜,以lon和lat为单位的足够的精度将产生一个结果,乘以1,000 migth可以作为以米为单位的距离的度量,对吗?

根据https://gis.stackexchange.com/questions/8650/measuring-accuracy-of-latitude-and-longitude,小数点后第五位的值最大为1.1 m:它将树彼此区分。

这可能有效,但是我使用了类似的方法,当2个设备彼此相邻时,它不会在5-10米内返回距离。仍然我会尝试这个

lon和lat都需要5位小数精度

这就是android设备如何生成位置的原因看看28.5312119和77.2569046的位置是否超过5,我认为如果我从最后删除一些位置,那么位置将不正确,应该是正确的。

根据gis.stackexchange.com/questions/8650/,小数点后第五位的值最大为1.1 m:它将树彼此区分。

谢谢您上面的链接,它的确非常有用,我需要尽可能地减少差异,为此,我认为我需要使用更多的5位小数?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值