【问题标题】:Lat/Lon + Distance + Heading --> Lat/Lon纬度/经度 + 距离 + 航向 --> 纬度/经度
【发布时间】:2008-12-18 15:53:55
【问题描述】:

所以:我有以下函数,改编自网上找到的公式,它采用两个纬度/经度坐标并找到它们之间的距离(沿球形地球):

public static double distance (double lat1, double lon1, double lat2, double lon2) {
        double theta = toRadians(lon1-lon2);
        lat1 = toRadians(lat1);
        lon1 = toRadians(lon1);
        lat2 = toRadians(lat2);
        lon2 = toRadians(lon2);

        double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
        dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;

        return dist;
    }

据我所知,这很好用。

我需要的是第二个函数,它使用完全相同的地球几何模型,采用单个纬度/经度对 [A]、一个航向和一个距离,并输出一个新的纬度/经度对 [B ] 这样,如果您从 [A] 点开始,并以给定的航向行进给定的距离,您将在 [B] 点结束。

这就是我的几何技能完全让我发挥作用的地方:)

任何帮助将不胜感激!

谢谢, -丹

【问题讨论】:

  • Dan,你能把你得到的解决方案贴出来吗?我有需要,想知道你是否真的得到了答案?
  • 查看接受的答案。我最终采用了那个公式,而且效果很好;我强烈建议您查看回答者提到的 The Aviation Formulary 网站,这对我很有帮助。

标签: function geometry geospatial


【解决方案1】:

我从The Aviation Formulary 获得了大部分这些类型的公式。

他给出的公式是:

给定径向和距离的纬度/经度

点 {lat,lon} 的距离为 d 从点 1 开始的 tc 径向如果:

 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF 

此算法仅限于 dlon

    lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
     dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat))
     lon=mod( lon1-dlon +pi,2*pi )-pi

请注意,他使用“tc”代表真实航向(从北顺时针以弧度表示),他给出的距离是沿地球表面的弧度弧度。公式的第一部分对此进行了解释(以及从海里来回转换的公式)。另外,请查看该页面上的“实施说明”和“工作示例”。

【讨论】:

  • [准备揭露我对地理空间所有事物的无知]“在 tc 径向上”到底是什么意思?如果我“在 90 度径向上”,这是否意味着我向东旅行?
  • 是的。抱歉,页面上的大部分术语都与航空有关。您应该阅读页面的第一部分,他解释了角度和距离也以弧度为单位。
  • "tc" 代表“真实课程”。另请查看该页面的“工作示例”和“实施说明”。
  • 丹,你有第二件事的功能吗?我急需一个!
  • d 的衡量标准是什么?根据页面,它看起来像是用弧度测量的,但这有什么意义呢?如果您想要以米为单位的距离,您会使用什么?
猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 2011-08-28
  • 2013-09-09
  • 2015-02-26
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多