步行路线规划
功能场景
demo支持用户输入终点,发起步行路线规划,并展示在地图上。点击详情按钮,有弹窗可以看出该路线详细信息。
Android
iOS

//mapopen-website-wiki.bj.bcebos.com/demos/AndroidVideos/SVID_20200530_210121_1.mp4

扫码体验
核心接口
类
接口
描述
newInstance()
创建路线规划检索实例
setOnGetRoutePlanResultListener(OnGetRoutePlanResultListener listener)
设置路线规划检索监听器
RoutePlanSearch
walkingSearch(WalkingRoutePlanOption option)
发起步行路线规划检索请求
destory()
释放路线规划检索实例
OnGetRoutePlanResultListener
onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult)
步行路线规划的结果回调函数
PlanNode
withCityNameAndPlaceName(String cityName, String placeName)
路线规划起终点参数
from(PlanNode startNode)
设置路线规划起点参数
WalkingRoutePlanOption
to(PlanNode endNode)
设置路线规划终点参数
setData(WalkingRouteLine routeLine)
设置步行路线规划结果数据
WalkingRouteOverlay
addToMap()
添加步行路线添加到地图上
zoomToSpanPaddingBounds(int paddingLeft, int paddingTop, int paddingRight, int paddingRight)
将步行路线调整到地图显示的最佳视野范围内
核心代码
1.步行路线规划结果解析
JAVA
/** * 设置路线数据。 * * @param line 路线数据 */ public void setData(WalkingRouteLine line) { mRouteLine = line; } @Override public final List<OverlayOptions> getOverlayOptions() { if (mRouteLine == null) { return null; } List<OverlayOptions> overlayList = new ArrayList<OverlayOptions>(); if (mRouteLine.getAllStep()!= null && mRouteLine.getAllStep().size() > 0) { for (WalkingRouteLine.WalkingStep step: mRouteLine.getAllStep()) { Bundle b = new Bundle(); b.putInt("index", mRouteLine.getAllStep().indexOf(step)); if (step.getEntrance()!= null) { overlayList.add((new MarkerOptions()).position(step.getEntrance().getLocation()) .rotate((360 - step.getDirection())).zIndex(10).anchor(0.5f, 0.5f) .extraInfo(b) .icon(BitmapDescriptorFactory.fromAssetWithDpi("Icon_line_node.png"))); } // 最后路段绘制出口点 if (mRouteLine.getAllStep().indexOf(step) == (mRouteLine .getAllStep().size() - 1) && step.getExit()!= null) { overlayList.add((new MarkerOptions()).position(step.getExit().getLocation()) .anchor(0.5f, 0.5f).zIndex(10) .icon(BitmapDescriptorFactory.fromAssetWithDpi("Icon_line_node.png"))); } } } // starting if (mRouteLine.getStarting()!= null) { overlayList.add((new MarkerOptions()).position(mRouteLine.getStarting().getLocation()) .icon(getStartMarker()!= null? getStartMarker() : BitmapDescriptorFactory.fromAssetWithDpi("Icon_start.png")) .zIndex(10)); } // terminal if (mRouteLine.getTerminal()!= null) { overlayList .add((new MarkerOptions()) .position(mRouteLine.getTerminal().getLocation()) .icon(getTerminalMarker()!= null? getTerminalMarker(): BitmapDescriptorFactory .fromAssetWithDpi("Icon_end.png")) .zIndex(10)); } // poly line list if (mRouteLine.getAllStep()!= null && mRouteLine.getAllStep().size() > 0) { LatLng lastStepLastPoint = null; for (WalkingRouteLine.WalkingStep step: mRouteLine.getAllStep()) { List<LatLng> watPoints = step.getWayPoints(); if (watPoints!= null) { List<LatLng> points = new ArrayList<LatLng>(); if (lastStepLastPoint!= null) { points.add(lastStepLastPoint); } points.addAll(watPoints); overlayList.add(new PolylineOptions().points(points).width(15).dottedLine(true) .customTexture(getWalkRoadCustomTexture()).zIndex(0)); lastStepLastPoint = watPoints.get(watPoints.size() - 1); } } } return overlayList; } public BitmapDescriptor getWalkRoadCustomTexture() { return BitmapDescriptorFactory.fromAsset("Icon_road_blue_arrow.png"); }
复制
深色
复制成功
2.将步行路线添加到地图上
JAVA
/** * 将步行路线添加到地图上 */ public final void addToMap() { if (mBaiduMap == null) { return; } List<OverlayOptions> overlayOptions = getOverlayOptions(); if (overlayOptions!= null) { mOverlayOptionList.addAll(getOverlayOptions()); } for (OverlayOptions option: mOverlayOptionList) { mBaiduMap.addOverlay(option) } }
复制
深色
复制成功
3.将步行路线调整到地图显示的最佳视野范围内
JAVA
/** * 将步行路线调整到地图显示的最佳视野范围内 */ public void zoomToSpanPaddingBounds(int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) { if (mBaiduMap == null) { return; } if (mOverlayList.size() > 0) { LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (Overlay overlay: mOverlayList) { // polyline 中的点可能太多,只按marker 缩放 if (overlay instanceof Marker) { builder.include(((Marker) overlay).getPosition()); } } mBaiduMap.setMapStatus(MapStatusUpdateFactory .newLatLngBounds(builder.build(), paddingLeft, paddingTop, paddingRight, paddingBottom)); } }
复制
深色
复制成功
更多功能