Google地图折线未正确绘制

时间:2017-03-30 15:14:11

标签: java android google-maps google-polyline

我正在创建一个应用程序,当点击一个标记时,它将打开一个带有" Go"按钮,当用户按下该按钮时显示路径。我正在使用google方向api创建带有overview-polyline的路径,问题是该行未正确绘制,该行会创建直线,使路径通过建筑物,如图中所示:

enter image description here

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我认为您需要在Google Developer Console中启用Google Maps Direction API。这应该会为您提供沿着街道的路径。

  • 转到Google Developer Console。
  • 点击图书馆。
  • 点击Google Maps API下的Google Maps Directions API。
  • 点击ENABLE按钮。

答案 1 :(得分:0)

您可以使用Google Maps服务获取路线。

将依赖项用于地图服务和实用程序

compile 'com.google.maps:google-maps-services:0.1.20'
compile 'com.google.maps.android:android-maps-utils:0.5+'

创建GeoApiContext对象

private GeoApiContext createGeoApiContext() {
        GeoApiContext geoApiContext = new GeoApiContext();
        return geoApiContext.setQueryRateLimit(5)
                .setApiKey(GOOGLE_API_KEY)
                .setConnectTimeout(5, TimeUnit.SECONDS)
                .setReadTimeout(5, TimeUnit.SECONDS)
                .setWriteTimeout(5, TimeUnit.SECONDS);
    }

使用DirectionResult对象为地图服务创建请求。 wait()方法同步调用到地图服务。

 DateTime now = new DateTime();
            try {
                DirectionsResult result = DirectionsApi.newRequest(createGeoApiContext())
                        .mode(TravelMode.DRIVING)
                        .origin(new com.google.maps.model.LatLng(13.3392, 77.1140))
                        .destination(new com.google.maps.model.LatLng(13.9299, 75.5681))
                        .alternatives(true)
                        .departureTime(now).await();
                addMarkersToMap(result,map);
            } catch (ApiException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

处理响应DirectionResult

//您可以像这样在起始地址和结束地址中添加标记

 private void addMarkersToMap(DirectionsResult results, GoogleMap mMap) {
        for (int i=0;i<results.routes.length;i++) {
            mMap.addMarker(new MarkerOptions()
                    .position(
                            new LatLng(results.routes[i].legs[0].startLocation.lat,
                                    results.routes[i].legs[0].startLocation.lng)).
                            title(results.routes[i].legs[0].startAddress));
            mMap.addMarker(new MarkerOptions()
                    .position(
                            new LatLng(results.routes[i].legs[0].endLocation.lat,
                                    results.routes[i].legs[0].endLocation.lng)).
                            title(results.routes[i].legs[0].endAddress).snippet(getEndLocationTitle(results,i)));
            addPolyline(results, map, i);
        }
    } 

//这样添加折线。

 private String getEndLocationTitle(DirectionsResult results,int i) {
        return "Time :" + results.routes[i].legs[0].duration.humanReadable +
                " Distance :" + results.routes[i].legs[0].distance.humanReadable;
    }

    private void addPolyline(DirectionsResult results, GoogleMap mMap,int i) {
        List<LatLng> decodedPath = PolyUtil.decode(results.routes[i].overviewPolyline.getEncodedPath());
        mMap.addPolyline(new PolylineOptions().addAll(decodedPath).width(5));
    }
}

请参考此。 https://android.jlelse.eu/google-maps-directions-api-5b2e11dee9b0