2011-12-21 147 views
1

我想计算两个地理位置点之间的距离,现在在我的学校和我的房子之间。距离应该接近1200米。用2个地理位置点计算距离

我得到这些值是没有道理的。

104.247784180256 
35.017200205306295 (if I reverse lat and lon) 

谷歌地图说:

51.987957 is N 
5.911305 is O 

为51.987957纬度或经度?根据我从哪里得到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

关于第二个查询,您可以选择想要的文本部分作为代码,然后单击文本区域上方提供的{}选项,并使用其他选项(如粗体等)。 – Nik 2011-12-21 10:09:18

+0

您可以通过选择全部并按窗口顶部的{}按钮,您可以在此输入^ _^ – Manuel 2011-12-21 10:10:13

回答

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

+0

非常感谢! – clankill3r 2011-12-21 14:34:28