我需要让我的应用程序,确定指定的坐标是否趴在路上或没有在谷歌地图的支票。
有没有在谷歌地图API的功能,可以帮助我吗?
提前致谢!
我需要让我的应用程序,确定指定的坐标是否趴在路上或没有在谷歌地图的支票。
有没有在谷歌地图API的功能,可以帮助我吗?
提前致谢!
据我所知,这不能使用谷歌地图API来完成。
我认为最好的方法是使用人群来源的数据集,如OpenStreetMap的(OSM) 。
你需要自己的空间数据库(例如,设立了PostGIS )和进口OSM数据到数据库中。
然后,您可以创建一个服务器端API(在一个Web服务器,如托管的Tomcat或Glassfish的 )来接收手机的当前位置,具有一定的半径缓冲区的位置给你一个圆形的多边形,并做了空间查询通过PostGIS的 ,以确定是否缓冲区相交的任何道路(例如,方式与标签“公路=主”或“高速公路=次级”,这取决于你想要什么样的道路类型包括-看到这个网站 ),并返回true或false反应到手机上。
编辑2015年8月
现在有在方法Android的地图-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
对象(具体来讲, LatLng point
和List<LatLng> line
,分别为),然后在你的代码调用:
double tolerance = 10; // meters
boolean isLocationOnPath = PolyUtil.isLocationOnPath(point, line, true, tolerance);
......看看你的点为10米的线内。
请参阅入门指南该库对如何使用它的详细信息。