Android的 - 如何确定坐标是否趴在谷歌地图的道路(Android - How to dete

2019-08-02 01:06发布

我需要让我的应用程序,确定指定的坐标是否趴在路上或没有在谷歌地图的支票。

有没有在谷歌地图API的功能,可以帮助我吗?

提前致谢!

Answer 1:

据我所知,这不能使用谷歌地图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 pointList<LatLng> line ,分别为),然后在你的代码调用:

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

......看看你的点为10米的线内。

请参阅入门指南该库对如何使用它的详细信息。



文章来源: Android - How to determine whether coordinates lie on road in Google Maps