我正在开发app,我首先将用户的纬度和经度发送到服务器。服务器也有一些以前存储的坐标,现在应用程序必须检查用户坐标是否在1km或2km的坐标服务器已经有的范围内。
我发现的一种方法是将初始坐标作为圆心,但不准确。 任何建议我应该遵循哪种算法和来源可以帮助我理解这一点。
答案 0 :(得分:2)
R = 6378.1; // radius of the Earth (km)
dlat = deg2rad( $lat1-$lat2 ) // lattitude diference in radians
dlang = deg2rad ( $lang1 - $lang2 ) //longitude diference in radian
地球的半径比1-2公里大得多,所以我们可以使用毕达哥拉斯理论,我们的精度为0.03%〜0.3米。
distance = R * sqrt( $dlat^2 + $dlang^2 );
// same: distance = sqrt( ($dlat*R)^2 + ($dlang*R)^2) )
这可以帮助您理解: http://en.wikipedia.org/wiki/Spherical_coordinate_system
球面坐标系与地理定位坐标系不一样,但要了解你的需要,我认为下面的链接有一个很好的解释。
如果你需要更多的准确性: 请参阅工作示例部分的<{3}}
当距离只有几公里时,精度差异很小,但使用我写的公式时计算时间要好得多。