/*
* 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;
}
}