【发布时间】: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