百度地图的开发过程中,发现路径规划的api接口有一个缺陷,就是只显示有路的路线,在没有道路的情况下,比如我定位到了大厦里面,那路线就是在大厦附近的道路上起始的。
而很多单车app我发现解决了这个问题,我也是做单车产品的,然后发现这个问题,百度无果,自己想了一个方法添加了额外的路线。
百度地图app有这个功能,可能api没有完善吧。
<pre>
@Override
public void onGetWalkingRouteResult(WalkingRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(getApplicationContext(), "未找到路线规划结果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
** //构造纹理资源
LatLng pt1 = new LatLng(latitude, lontitude);
LatLng pt2 = new LatLng(result.getRouteLines().get(0).getAllStep().get(0).getWayPoints().get(0).latitude,
result.getRouteLines().get(0).getAllStep().get(0).getWayPoints().get(0).longitude);
List<LatLng> points = new ArrayList<LatLng>();
points.add(pt1);//点元素
points.add(pt2);//点元素
//构造对象
OverlayOptions ooPolyline = new PolylineOptions()
.points(points) // 折线的点集
.color(Color.parseColor("#A9A9A9")) // 折线颜色
.width(10) // 折线的宽度 单位像素 默认值5px
.dottedLine(true); // 设置是否为虚线
mBaiduMap.addOverlay(ooPolyline);
//构造纹理资源
LatLng pt1_end = new LatLng(result.getRouteLines().get(0).getAllStep().get(result.getRouteLines().get(0).getAllStep().
size() - 1).getWayPoints().get(result.getRouteLines().get(0).getAllStep().get(result.getRouteLines().get(0).getAllStep().size() - 1).
getWayPoints().size() - 1).latitude, result.getRouteLines().get(0).getAllStep().
get(result.getRouteLines().get(0).getAllStep().size() - 1).getWayPoints().get(result.getRouteLines().get(0).
getAllStep().get(result.getRouteLines().get(0).getAllStep().size() - 1).getWayPoints().size() - 1).longitude);
LatLng pt2_end = latLng_RouteplanningEnd;
List<LatLng> points_end = new ArrayList<LatLng>();
points_end.add(pt1_end);//点元素
points_end.add(pt2_end);//点元素
//构造对象
OverlayOptions ooPolyline_end = new PolylineOptions()
.points(points_end) // 折线的点集
.color(Color.parseColor("#A9A9A9")) // 折线颜色
.width(10) // 折线的宽度 单位像素 默认值5px
.dottedLine(true); // 设置是否为虚线
mBaiduMap.addOverlay(ooPolyline_end);**
// TransitOverlay是baidu map api提供的用于在地图上显示公交换乘路线的Overlay
route = result.getRouteLines().get(0);
WalkingRouteOverlay option = new WalkingRouteOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(option);
option.setData(result.getRouteLines().get(0));
option.addToMap();
option.zoomToSpan();
}
}
</pre>
主要是加粗的两段代码,最后一段是官网给出的示例。
根据请求回来的路线集合,取出来起始位置的坐标点,和我的位置以及终点坐标进行勾画折线覆盖物,来完成完整的路线规划。
网友评论