【问题标题】:Why SphericalUtil.computeDistanceBetween method does not return accurate result?为什么 SphericalUtil.computeDistanceBetween 方法不返回准确的结果?
【发布时间】:2017-07-25 15:16:45
【问题描述】:

您好,我正在计算与任何路线最近点的距离。我正在测试 2 条路线(折线)。路线相对于原点的最近点几乎在同一个坐标或点,但谷歌地图android库的SphericalUtil.computeDistanceBetween方法返回的结果非常不同。

根据我的代码示例:

  for(Route route : routes){

        boolean isLocationOnEdge = PolyUtil.isLocationOnEdge(location, route.getLatLngCoordinates(), true, ROUTE_SEARCH_RADIUS);
        boolean isLocationOnPath = PolyUtil.isLocationOnPath(location, route.getLatLngCoordinates(), true,  ROUTE_SEARCH_RADIUS);

        if(isLocationOnEdge || isLocationOnPath){

            //meaning this route is near at the and compute distance from origin
            LatLng nearestPoint = findNearestPoint(location, route.getLatLngCoordinates());
            double distance = SphericalUtil.computeDistanceBetween(location, nearestPoint);
            Log.i(TAG, "origin: "+location);
            Log.i(TAG, "nearest point: "+nearestPoint); 
            Log.i(TAG, "distance: "+distance);
            route.setDistanceFromOrigin(distance);
            route.setNearestPointFromOrigin(nearestPoint);

            nearRoutes.add(route);
        }
    }

日志中的结果如下:

origin: lat/lng: (7.0792276,125.6248482)
nearest point: lat/lng: (7.079228237884086,125.6248559529709)
distance: 0.8584555298849629
origin: lat/lng: (7.0792276,125.6248482)
nearest point: lat/lng: (7.0792199725865546,125.62475406260717)
distance: 10.422383454451605

如您所见,即使它们的最近点几乎相同,但两个距离之间存在很大差异。 (请看下面的重点对比)

路线A

原产地:纬度/经度:(7.0792276,125.6248482)

最近点:lat/lng:(7.079228237884086,125.6248559529709)

距离:0.8584555298849629


路线 B

原产地:纬度/经度:(7.0792276,125.6248482)

最近点:lat/lng:(7.0792199725865546,125.62475406260717)

距离:10.422383454451605


为了说明,我绘制了多边形/路线及其与原点最近的点。我根据 logcat 中的代码记录的结果突出显示并指示了距离。为什么Route A最近点到原点的距离(红线)与Route B的距离(绿线)相比只有0.8584555298849629 > 哪个是10.422383454451605?基于最近点的位置和坐标,它们彼此接近,因此它们的距离应该相差不大。

这让我有点困惑。我是否遗漏了什么或者我的代码有什么问题?

【问题讨论】:

  • 是什么让您认为这些数字是错误的? 10米的差别是很小的。
  • @BenP。 10.42223 与 0.8584?与原点相差近 10 米,并且考虑到两个最近点几乎位于同一位置,这并不小。
  • 我对所讨论的位置并不十分熟悉,但 10 米在宏伟的计划中是一个非常小的差异。您确定这两点相距 10 米吗?
  • @BenP。场景是我在地图中有 2 个多边形/路线,并且我有一个参考点,它是原点,现在我设法查明了两条路线相对于原点的最近点。如您所见,两个最近点的坐标几乎相同,这意味着它们靠得很近,并且到原点的距离应该几乎相同,但该方法的结果会产生非常不同的距离。
  • 但是你仍然没有回答这个问题。当我将这两个坐标放入谷歌地图时,我看到路的一侧有一个大头针,而马路的另一侧有一个大头针。如果那是一条多车道的道路,它们之间的距离很容易达到 10 米。 10 米并不远。

标签: android google-maps google-maps-android-api-2


【解决方案1】:

没有证据表明SphericalUtil 返回的信息不准确。

这张地图标出了你提到的原点和两点:

您可以在图片底部看到地图的比例尺。如果这么多像素是 5 英尺,那么两个“最近”点似乎相距大约 11 米,这正是您的程序输出所说的。

【讨论】:

  • 你没有明白我不是在寻找两个最近点之间的距离,而是在比较原点到 A 点的距离(路线 A 的最近点)和原点距离到 B 点(路线 B ​​的最近点)。现在它们到原点的距离不应该偏离那么多,因为它们彼此非常接近。几乎 0 与 10 相差很大。
  • 我更新了我的问题/帖子,请查看它以了解情况如何。
  • @ArielMagbanua 您更新后的问题中的蓝点不是位于 7.0792276,125.6248482。这些坐标位于我上图中不同颜色的图钉上。看这张地图:google.com/maps/place/…
  • 我再次运行应用程序是听者提供的位置,蓝点的位置与我提供的图片中的位置相同。蓝色不是这里的问题,而是每个最近点到蓝点(原点)之间的距离。
  • @ArielMagbanua,点 (7.0792276,125.6248482) 与您在上述更新中提供的不匹配。该点位于您的两个“最近”点之间。您是否偶然将原点坐标从双精度浮点数转换为浮点数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
相关资源
最近更新 更多