用2个地理点计算距离

时间:2011-12-21 10:06:32

标签: java latitude-longitude

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

1 个答案:

答案 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米。