Java - 从给定的坐标、方位和距离计算第二个坐标

Posted

技术标签:

【中文标题】Java - 从给定的坐标、方位和距离计算第二个坐标【英文标题】:Java - Calculate second coordinates from a given coordinates, bearing, and distance 【发布时间】:2016-10-21 16:14:26 【问题描述】:

我找到了计算第二个坐标here的公式。但是当我把它转换成Java的时候,结果却不是我想象的那样。

private Point get(double lat1, double lon1, double tc, int d) 
    double lat = Math.asin(
                          Math.sin(lat1) * Math.cos(d) 
                        + Math.cos(lat1) * Math.sin(d) * Math.cos(tc)
                        );

    double dlon= Math.atan2(
                          Math.sin(tc) * Math.sin(d) * Math.cos(lat1)
                        , Math.cos(d) - Math.sin(lat1) * Math.sin(lat));
    double lon = ((lon1 - dlon + Math.PI) % (2 * Math.PI)) - Math.PI;

    return new Point(lat, lon);

我用 get(50, 10, 0, 0) 之类的简单案例测试了上面的代码。所以预期结果将与第一点相同,但这是我得到的结果:

Lat: 1.4432701894877245, lon: -3.8108244707674395

我是否使用正确的公式来计算第二个坐标?

[编辑] 这是我尝试转换为 java 代码的公式

 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的单位是弧度,d是公里。我认为主要类型不会影响该算法的结果。 我认为你的公式有问题,因为cos(d) 没有任何意义。 @talex 我包含了我用于计算的公式 我认为 d 也可能是弧度。可能是距离除以地球周长,再乘以 2π。 @KlitosKyriacou 因为我的距离输入为 0,所以我认为情况并非如此。但是我只是将距离转换为弧度,它也不起作用 【参考方案1】:

如 cmets 中所述,您的公式期望纬度、经度、真实航向和距离都以弧度为单位。

如果您想传递纬度、经度、真实航向(度)和距离(海里),则需要在任何数学下方进行以下转换:

// convert to radians
lat1 = lat1 * Math.PI / 180; 
lon1 = lon1 * Math.PI / 180; 
tc = tc * Math.PI / 180;
d = (Math.PI / (180*60)) * d;

然后将您的纬度和经度从弧度转换回度数:

// convert to degrees
lat = lat * 180 / Math.PI;
lon = lon * 180 / Math.PI;

但是,还有两个注意事项:

1) java.awt.Point (不清楚这是你正在使用的)只能保存整数;您可能想改用 Point2D.Double ;和

2) 距离的测量也应包括海里或弧度的分数,因此应为双倍。

通过这些编辑, get(50, 10, 0, 0) 将起作用。与您页面上的工作示例一样,在 66 度径向上距离洛杉矶国际机场 100 海里的航路点 - get(33.95, 118.4, 66, 100) (请记住,分钟转换为分数度)返回 34.6141 纬度和 116.5499 经度,匹配 34d 37m和 116d 33m。

【讨论】:

为什么不使用Math.toRadiansMath.toDegrees 因为我盯着 Hien 链接的公式网页,它在那里有弧度 度数转换。

以上是关于Java - 从给定的坐标、方位和距离计算第二个坐标的主要内容,如果未能解决你的问题,请参考以下文章

在给定点、方位角和距离的情况下计算 gps 坐标

怎么计算2个坐标点的距离?

计算两个纬度坐标之间的距离/方位

如何计算给定中心和方位角的扇区点的坐标

通过距离和方位从已知位置查找点坐标的地理算法

如何从距离、方位角和仰角获取 3D 坐标