我正在创建一个应用程序,当点击一个标记时,它将打开一个带有" Go"按钮,当用户按下该按钮时显示路径。我正在使用google方向api创建带有overview-polyline的路径,问题是该行未正确绘制,该行会创建直线,使路径通过建筑物,如图中所示:
我该如何解决这个问题?
答案 0 :(得分:0)
我认为您需要在Google Developer Console中启用Google Maps Direction API。这应该会为您提供沿着街道的路径。
答案 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