它甚至不准确?我重新implented整个事情与Apfloat任意精度和它并没有区别,我应该知道开始与!!

public static double bearing(LatLng latLng1, LatLng latLng2) {
 double deltaLong = toRadians(latLng2.longitude - latLng1.longitude);

 double lat1 = toRadians(latLng1.latitude);
 double lat2 = toRadians(latLng2.latitude);

 double y = sin(deltaLong) * cos(lat2);
 double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(deltaLong);
 double result = toDegrees(atan2(y, x));
 return (result + 360.0) % 360.0;
}

@Test
 public void testBearing() {

  LatLng first = new LatLng(36.0, 174.0);
  LatLng second = new LatLng(36.0, 175.0);
  assertEquals(270.0, LatLng.bearing(second, first), 0.005);
  assertEquals(90.0, LatLng.bearing(first, second), 0.005);
 }

在测试的第一个断言给出了这样的:

  

java.lang.AssertionError:   预期:<270.0>但   是:<270.29389750911355>

0.29似乎相当长的路要走?这是我选择实施公式?

有帮助吗?

解决方案

如果你做你似乎什么都做,并正确地完成它,你已经从沿最短路径B想出了一个轴承从A到B的,球形(ISH)的表面上地球是A和B之间的大圆的圆弧,NOT纬度的A和B之间的线的圆弧

Mathematica的大地测量功能给轴承,为您的测试位置,如89.7061270.294

所以,这看起来好像(一)你的计算是正确的,但(b)您的导航能力需要抛光了。

其他提示

您确定这是由于数字问题?我必须承认,我不知道究竟你想什么来计算,但是当你使用角度上球处理,小偏差,你会期望在欧几里得几何的东西。

  

java.lang.AssertionError:期望值<270.0>但:<270.29389750911355>

此0.29绝对误差表示0.1%的相对误差。这是怎么“长路漫漫”?

浮标会给7个显著数字;双打是良好的16可能是三角函数或度弧度的转换。

公式看起来正确,如果这个源是可以相信的

如果我将你的起点和最终值到该页面,结果他们报告089°42'22“。如果我从360减去你的结果,并转换为度,分,秒你的结果是相同的他们。要么你俩都正确,或者你都错了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top