【问题标题】:calculate distance with 2 geo points用 2 个地理点计算距离
【发布时间】:2011-12-21 10:06:32
【问题描述】:

我想计算 2 个地理点之间的距离,现在我的学校和我家之间。距离应接近 1200 米。

我得到了这些没有意义的值。

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;
}

【问题讨论】:

  • 关于第二个查询,您可以选择您想要的文本部分作为代码,然后单击文本区域上方提供的{}选项以及其他选项,如粗体等。
  • 您可以通过选择所有代码并按下窗口顶部的 {} 按钮来发布代码 ^_^

标签: java latitude-longitude


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2020-01-28
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多