/* * Copyright (C) 2016 Baidu, Inc. All Rights Reserved. */ package com.baidu.mapapi.overlayutil; import java.util.ArrayList; import java.util.List; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.map.Polyline; import com.baidu.mapapi.map.PolylineOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.route.IndoorRouteLine; import android.graphics.Color; import android.os.Bundle; public class IndoorRouteOverlay extends OverlayManager { private IndoorRouteLine mRouteLine; int[] colorInfo; /** * 构造函数 * * @param baiduMap * 该TransitRouteOverlay引用的 BaiduMap 对象 */ public IndoorRouteOverlay(BaiduMap baiduMap) { super(baiduMap); colorInfo = new int[]{ Color.argb(178, 0, 78, 255), Color.argb(178, 88, 208, 0), Color.argb(178, 88, 78, 255)}; } /** * 设置路线数据 * * @param routeOverlay * 路线数据 */ public void setData(IndoorRouteLine routeOverlay) { this.mRouteLine = routeOverlay; } /** * 覆写此方法以改变默认起点图标 * * @return 起点图标 */ public BitmapDescriptor getStartMarker() { return null; } /** * 覆写此方法以改变默认终点图标 * * @return 终点图标 */ public BitmapDescriptor getTerminalMarker() { return null; } public int getLineColor() { return 0; } @Override public List<OverlayOptions> getOverlayOptions() { if (mRouteLine == null) { return null; } List<OverlayOptions> overlayList = new ArrayList<OverlayOptions>(); // 添加step的节点 if (mRouteLine.getAllStep() != null && mRouteLine.getAllStep().size() > 0) { for (IndoorRouteLine.IndoorRouteStep step : mRouteLine.getAllStep()) { Bundle b = new Bundle(); b.putInt("index", mRouteLine.getAllStep().indexOf(step)); if (step.getEntrace() != null) { overlayList.add((new MarkerOptions()).position(step.getEntrace().getLocation()) .zIndex(10).anchor(0.5f, 0.5f).extraInfo(b) .icon(BitmapDescriptorFactory.fromAssetWithDpi("Icon_walk_route.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_walk_route.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; int idex = 0; for (IndoorRouteLine.IndoorRouteStep 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(10) .color(getLineColor() != 0 ? getLineColor() : colorInfo[idex++ % 3]).zIndex(0)); lastStepLastPoint = watPoints.get(watPoints.size() - 1); } } } return overlayList; } // private BitmapDescriptor getIconForStep(IndoorRouteLine.TransitStep step) { // switch (step.getVehileType()) { // case ESTEP_WALK: // return BitmapDescriptorFactory.fromAssetWithDpi("Icon_walk_route.png"); // case ESTEP_TRAIN: // return BitmapDescriptorFactory.fromAssetWithDpi("Icon_subway_station.png"); // case ESTEP_DRIVING: // case ESTEP_COACH: // case ESTEP_PLANE: // case ESTEP_BUS: // return BitmapDescriptorFactory.fromAssetWithDpi("Icon_bus_station.png"); // default: // return null; // } // } @Override public boolean onMarkerClick(Marker marker) { return false; } @Override public boolean onPolylineClick(Polyline polyline) { return false; } }