我想计算两个地理点之间的距离,现在在我的学校和我的房子之间。距离应该接近1200米。
我得到了这些没有意义的值。
104.247784180256
35.017200205306295 (if I reverse lat and lon)
谷歌地图说:
51.987957 is N
5.911305 is O
是51.987957 lat还是lon?根据我的文件,我从哪里得到GPS信号应该是纬度,但我对此有所怀疑。
float R = 6371; // km
// 104.247784180256
float lat1 = 5.894213; // school
float lon1 = 51.98381; // school
float lat2 = 5.909912; // keuken
float lon2 = 51.988781; // keuken
// switched > distance = 35.017200205306295
/*
float lon1 = 5.894213; // school
float lat1 = 51.98381; // school
float lon2 = 5.909912; // keuken
float lat2 = 51.988781; // keuken
*/
void setup() {
double d = calculateDistance( lon1, lat1, lon2, lat2);
println(d);
}
double calculateDistance(float lon1, float lat1, float lon2, float lat2) {
double d = Math.acos(Math.sin(lat1)*Math.sin(lat2) +
Math.cos(lat1)*Math.cos(lat2) *
Math.cos(lon2-lon1)) * R;
return d;
}
答案 0 :(得分:3)
你正在以错误的方式使用纬度和经度。 如果您搜索“@ 51.98381,5.894213”,您可以直接查看谷歌地图,这指向您的学校。请记住,它是纬度,经度。
我使用以下代码进行计算(注意我是在sql中做的,但是关于这个想法):
((ACOS(SIN(lat1 * PI() / 180) * SIN(lat2 * PI() / 180) + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180) * COS((long1 - long2) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344)
以千米为单位返回距离。 另请注意,函数使用的是弧度,而不是度数。
结果是1.20877685491371公里,这是你期望的1200米。