我正在开发应用程序,我首先将用户纬度和经度发送到服务器。服务器也有一些以前存储的坐标,现在应用程序必须检查用户坐标是否在服务器已有坐标的 1km 或 2km 半径内。
我发现的一种方法是将初始坐标作为圆心,但这并不准确。任何建议我应该遵循哪种算法和来源可以帮助我理解这一点。
我正在开发应用程序,我首先将用户纬度和经度发送到服务器。服务器也有一些以前存储的坐标,现在应用程序必须检查用户坐标是否在服务器已有坐标的 1km 或 2km 半径内。
我发现的一种方法是将初始坐标作为圆心,但这并不准确。任何建议我应该遵循哪种算法和来源可以帮助我理解这一点。
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 m。
distance = R * sqrt( $dlat^2 + $dlang^2 );
// same: distance = sqrt( ($dlat*R)^2 + ($dlang*R)^2) )
这可能有助于您理解: http ://en.wikipedia.org/wiki/Spherical_coordinate_system
球坐标系与地理位置坐标系不同,但要了解您需要什么,我认为下面的链接有一个很好的解释。
如果您需要更高的准确性:请参阅工作示例部分的http://en.wikipedia.org/wiki/Great-circle_distance
当距离只有几公里时,精度差异很小,但使用我写的公式计算时间要好得多。