一、说明
同一经度:纬度差x111km
1、在纬度相等的情况下:
赤道上:经度差*111KM;
其他维度:COS纬度数*经度差*111km
经度每隔0.00001度,距离相差约1米:
每隔0.0001度,距离相差约10米;
每隔0.001度,距离相差约100米;
每隔0.01度,距离相差约1000米;
每隔0.1度,距离相差约10000米。
2、在经度相等的情况下:
纬度每隔0.00001度,距离相差约1.1米:
每隔0.0001度,距离相差约11米
每隔0.001度,距离相差约111米;
每隔0.01度,距离相差约1113米
每隔0.1度,距离相差约11132米
二、C代码实现
const float EARTH_RADIUS_M = 6371008.7714; // 地球半径,单位:米
// 计算两点之间的距离(单位:米)
float getDistanceByLonLat(double lat1, double lon1, double lat2, double lon2) {
float dLat = (lat2-lat1) * (M_PI / 180.0);
float dLon = (lon2-lon1) * (M_PI / 180.0);
float lat1Rad = lat1 * (M_PI / 180.0);
float lat2Rad = lat2 * (M_PI / 180.0);
// 使用哈弗赛恩公式计算两点之间的距离
float a = pow(sin(dLat / 2),2) + cos(lat1Rad) * cos(lat2Rad) * pow(sin(dLon / 2),2);
float c = 2 * atan2(sqrt(a), sqrt(1 - a));
float distance = EARTH_RADIUS_M * c;
return distance;
}
int main()
{
double lat1 = 39.855651; // 北京的纬度
double lon1 = 115.462863; // 北京的经度
double lat2 = 39.855650; // 上海的纬度
double lon2 = 115.462860; // 上海的经度
double distance = getDistanceByLonLat(lat1, lon1, lat2, lon2);
std::cout << "The distance between the two points is: " << distance << " M" << std::endl;
return 0;
}
三、在线计算工具