我需要在我的应用程序中检查一下,确定给定的坐标是否在Google地图上。
Google Maps API中是否有任何可以帮助我的功能?
提前致谢!
答案 0 :(得分:13)
据我所知,使用Google Maps API无法做到这一点。
我认为您最好的选择是使用人群来源的数据集,例如OpenStreetMap (OSM)。
您需要设置自己的空间数据库(例如PostGIS)并将OSM数据导入数据库。
然后,您将创建服务器端API(托管在Tomcat或Glassfish等Web服务器中)以接收移动电话的当前位置,缓冲具有特定半径的位置给你一个圆形多边形,并做一个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 point
和List<LatLng> line
),然后在你的代码调用中:
double tolerance = 10; // meters
boolean isLocationOnPath = PolyUtil.isLocationOnPath(point, line, true, tolerance);
...看你的点是否在你的线的10米范围内。
有关如何使用它的更多信息,请参阅此库的Getting Started Guide。