用2个地理点计算距离

我想计算两个地理点之间的距离,现在在我的学校和我的房子之间。 距离应该接近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; } 

你正在以错误的方式使用纬度和经度。 如果您搜索“@ 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米。