我想计算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位小数?