我需要在我的应用程序中进行检查,以确定给定坐标是否位于 Google 地图中的道路上。
Google Maps API 中是否有任何功能可以帮助我解决这个问题?
提前致谢!
我需要在我的应用程序中进行检查,以确定给定坐标是否位于 Google 地图中的道路上。
Google Maps API 中是否有任何功能可以帮助我解决这个问题?
提前致谢!
据我所知,这无法使用 Google Maps API 完成。
我认为您最好的选择是使用众包数据集,例如OpenStreetMap (OSM)。
您需要建立自己的空间数据库(例如PostGIS)并将 OSM 数据导入数据库。
然后,您将创建一个服务器端 API(托管在Tomcat或Glassfish等 Web 服务器中)来接收手机的当前位置,以一定的半径缓冲该位置以给您一个圆形多边形,并进行空间查询通过 PostGIS确定缓冲区是否与任何道路相交(例如,带有“highway=primary”或“highway=secondary”标签的方式,具体取决于您要包含的道路类型 - 请参阅此站点),并返回 true 或 false对电话的回应。
编辑 2015 年 8 月
现在在android-maps-utils 库中有一个名为的方法,PolyUtil.isLocationOnPath()
它允许您在 Android 应用程序本身内进行这种类型的计算,假设您有一组构成道路(或任何其他线)的点。
这是库中代码的样子:
/**
* 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
对象(特别是,分别是 aLatLng point
和List<LatLng> line
),然后在你的代码调用中:
double tolerance = 10; // meters
boolean isLocationOnPath = PolyUtil.isLocationOnPath(point, line, true, tolerance);
...查看您的点是否在您的线的 10 米范围内。
有关如何使用它的更多信息,请参阅此库的入门指南。