Android - 如何确定坐标是不是位于谷歌地图中的道路上

Posted

技术标签:

【中文标题】Android - 如何确定坐标是不是位于谷歌地图中的道路上【英文标题】:Android - How to determine whether coordinates lie on road in Google MapsAndroid - 如何确定坐标是否位于谷歌地图中的道路上 【发布时间】:2012-10-17 12:21:49 【问题描述】:

我需要在我的应用程序中进行检查,以确定给定坐标是否位于 Google 地图中的道路上。

Google Maps API 中是否有任何功能可以帮助我解决这个问题?

提前致谢!

【问题讨论】:

Check if a GPS Lat/Lng point lies on a road in Google maps的可能重复 【参考方案1】:

据我所知,这无法使用 Google Maps API 完成。

我认为最好的办法是使用众包数据集,例如 OpenStreetMap (OSM)。

您需要建立自己的空间数据库(例如,PostGIS)并将 OSM 数据导入数据库。

然后,您将创建一个服务器端 API(托管在 Web 服务器中,例如 Tomcat 或 Glassfish)来接收手机的当前位置,并以一定的半径缓冲该位置给您一个圆形多边形,并执行spatial query via PostGIS 以确定缓冲区是否与任何道路相交(例如,标签为“highway=primary”或“highway=secondary”的方式,具体取决于您要包含的道路类型 - 请参阅this site) ,并将真假响应返回给手机。

2015 年 8 月编辑

android-maps-utils library 中现在有一个名为 PolyUtil.isLocationOnPath() 的方法,它允许您在 Android 应用程序本身内进行此类计算,假设您拥有构成道路的一组点(或任何其他线) )。

这是代码looks like in the library:

   /**
     * Computes whether the given point lies on or near a polyline, within a specified
     * tolerance in meters. The polyline is composed of great circle segments if geodesic
     * is true, and of Rhumb segments otherwise. The polyline is not closed -- the closing
     * segment between the first point and the last point is not included.
     */
    public static boolean isLocationOnPath(LatLng point, List<LatLng> polyline,
                                           boolean geodesic, double tolerance) 
        return isLocationOnEdgeOrPath(point, polyline, false, geodesic, tolerance);
    

要使用这个库,您需要将该库添加到您的build.gradle

dependencies 
    compile 'com.google.maps.android:android-maps-utils:0.4+'

然后,当你有你的观点和你的路径时,你需要将你的纬度/经度转换为 LatLng 对象(具体来说,分别是 LatLng pointList&lt;LatLng&gt; line),然后在你的代码调用中:

double tolerance = 10; // meters
boolean isLocationOnPath = PolyUtil.isLocationOnPath(point, line, true, tolerance);

...查看您的点是否在您的线的 10 米范围内。

有关如何使用它的更多信息,请参阅此库的 Getting Started Guide。

【讨论】:

MapUtils 的 Pro-guard 设置? 不应与使用支持库和 Google Play 服务的任何其他项目有任何不同 - 例如,请参阅 github.com/CUTR-at-USF/OpenTripPlanner-for-Android/blob/master/…

以上是关于Android - 如何确定坐标是不是位于谷歌地图中的道路上的主要内容,如果未能解决你的问题,请参考以下文章

使用地图坐标确定点是不是在矩形中

在android中将坐标传递给谷歌地图

考虑到视图位于其之上,如何专注于谷歌地图上的位置?

Android:使用谷歌地图实时获取当前坐标

如何将这些坐标转换为谷歌地图可读的坐标?

如何使用 CoreLocation 框架而不是谷歌地图 API 获取任何给定地址的坐标?