package pyp.navigation.map;
import java.util.ArrayList;
import java.util.List;
import pyp.navigation.R;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.overlayutil.BusLineOverlay;
import com.baidu.mapapi.overlayutil.DrivingRouteOvelray;
import com.baidu.mapapi.overlayutil.OverlayManager;
import com.baidu.mapapi.overlayutil.PoiOverlay;
import com.baidu.mapapi.overlayutil.TransitRouteOverlay;
import com.baidu.mapapi.overlayutil.WalkingRouteOverlay;
import com.baidu.mapapi.search.busline.BusLineResult;
import com.baidu.mapapi.search.busline.BusLineSearch;
import com.baidu.mapapi.search.busline.BusLineSearchOption;
import com.baidu.mapapi.search.busline.OnGetBusLineSearchResultListener;
import com.baidu.mapapi.search.core.CityInfo;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.RouteLine;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import com.baidu.mapapi.search.route.DrivingRouteLine;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.RoutePlanSearch;
import com.baidu.mapapi.search.route.TransitRouteLine;
import com.baidu.mapapi.search.route.TransitRoutePlanOption;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteLine;
import com.baidu.mapapi.search.route.WalkingRoutePlanOption;
import com.baidu.mapapi.search.route.WalkingRouteResult;
import com.baidu.mapapi.search.sug.OnGetSuggestionResultListener;
import com.baidu.mapapi.search.sug.SuggestionResult;
import com.baidu.mapapi.search.sug.SuggestionSearch;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
/**
* @Title: BaiduMapActivity
* @Description: 百度地图
* @author 张伟杰
* @date 2014-7-27
* @email 531724220@qq.com
*/
public class BaiduMapActivity extends Activity implements
OnGetPoiSearchResultListener, OnGetSuggestionResultListener,
BaiduMap.OnMapClickListener,OnGetBusLineSearchResultListener,
OnGetRoutePlanResultListener {
@SuppressWarnings("unused")
private static final String LTAG = BaiduMapActivity.class.getSimpleName();
private MapView mMapView;
private BaiduMap mBaiduMap;
private Context local_context;
private ImageView map_location_baiduMapBtn;
private ImageView map_baidu_layyer;
private Button baidu_nearBtn;
private Button baidu_routeBtn;
private Button baidu_naviBtn;
private Button baidu_busBtn;
/**
* 字段 int : HIDESTYLELAYER
* TODO 等于1的时候显示地图类型按钮,反之则隐藏。
*/
private int HIDESTYLELAYER = 1;
private Button satellite_layerBtn;
private Button commen_layerBtn;
private CheckBox traffic_layerCheck;
/**
* 字段 int : HIDENEAR
* TODO 等于1的时候显示地图的附近按钮,反之则隐藏。
*/
private int HIDENEAR = 1;
private TextView textview1;
private EditText baidu_poi_city;
private TextView textview2;
private EditText baidu_poi_target;
private Button baidu_poi_startBtn;
private Button baidu_poi_nextGroupBtn;
/**
* 字段 int : HIDEROUTE
* TODO 等于1的时候显示地图的附近按钮,反之则隐藏。
*/
private int HIDEROUTE = 1;
private TextView textView3;
private EditText baidu_route_start;
private TextView textView4;
private EditText baidu_route_end;
private Button baidu_route_driveCar;
private Button baidu_route_byBus;
private Button baidu_route_walk;
/**
* 字段 int :SHARE_UI_ID
* TODO 等于1的时候显示地图的附近按钮,2表示公交。
*/
private int SHARE_UI_ID = 0;
//poi变量(bus)
private PoiSearch mPoiSearch = null;
private SuggestionSearch mSuggestionSearch = null;
//搜索关键字输入窗口
private ArrayAdapter<String> sugAdapter = null;
private int load_Index = 0;
/*//浏览路线节点相关
Button mBtnPre = null;//上一个节点
Button mBtnNext = null;//下一个节点
*/ int nodeIndex = -2;//节点索引,供浏览节点时使用
RouteLine route = null;
OverlayManager routeOverlay = null;
boolean useDefaultIcon = false;
private TextView popupText = null;//泡泡view
private View viewCache = null;
RoutePlanSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用
private List<String> busLineIDList = null;
private int busLineIndex = 0;
private BusLineResult route_bus = null;// 保存驾车/步行路线数据的变量,供浏览节点时使用
// 搜索相关
private PoiSearch mSearch_bus = null; // 搜索模块,也可去掉地图模块独立使用
private BusLineSearch mBusLineSearch = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initData();
initViews();
initListensers();
}
public void initData() {
// TODO Auto-generated method stub
}
public void initViews() {
//隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this.getApplicationContext());
setContentView(R.layout.map_main_baidumap);
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
local_context = this;
//隐藏地图类型
this.satellite_layerBtn = (Button) findViewById(R.id.satellite_layerBtn);
this.commen_layerBtn = (Button) findViewById(R.id.commen_layerBtn);
this.traffic_layerCheck = (CheckBox) findViewById(R.id.traffic_layerBtn);
this.satellite_layerBtn.setVisibility(View.GONE);
this.commen_layerBtn.setVisibility(View.GONE);
this.traffic_layerCheck.setVisibility(View.GONE);
//隐藏POI(附近)
this.textview1 = (TextView) findViewById(R.id.textView1);
this.baidu_poi_city = (EditText) findViewById(R.id.baidu_poi_city);
this.textview2 = (TextView) findViewById(R.id.textView2);
this.baidu_poi_target = (EditText) findViewById(R.id.baidu_poi_target);
this.baidu_poi_startBtn = (Button) findViewById(R.id.baidu_poi_start);
this.baidu_poi_nextGroupBtn = (Button) findViewById(R.id.baidu_poi_nextGroup);
this.textview1.setVisibility(View.GONE);
this.baidu_poi_city.setVisibility(View.GONE);
this.textview2.setVisibility(View.GONE);
this.baidu_poi_target.setVisibility(View.GONE);
this.baidu_poi_startBtn.setVisibility(View.GONE);
this.baidu_poi_nextGroupBtn.setVisibility(View.GONE);
//隐藏route(路线区域)
this.textView3 = (TextView) findViewById(R.id.textView3);
this.baidu_route_start = (EditText) findViewById(R.id.baidu_route_start);
this.textView4 = (TextView) findViewById(R.id.textView4);
this.baidu_route_end = (EditText) findViewById(R.id.baidu_route_end);
this.baidu_route_driveCar = (Button) findViewById(R.id.baidu_route_driveCar);
this.baidu_route_byBus = (Button) findViewById(R.id.baidu_route_byBus);
this.baidu_route_walk = (Button) findViewById(R.id.baidu_route_walk);
this.textView3.setVisibility(View.GONE);
this.baidu_route_start.setVisibility(View.GONE);
this.textView4.setVisibility(View.GONE);
this.baidu_route_end.setVisibility(View.GONE);
this.baidu_route_driveCar.setVisibility(View.GONE);
this.baidu_route_byBus.setVisibility(View.GONE);
this.baidu_route_walk.setVisibility(View.GONE);
//POI初始化
// 初始化搜索模块,注册搜索事件监听
mPoiSearch = PoiSearch.newInstance();
mPoiSearch.setOnGetPoiSearchResultListener(this);
mSuggestionSearch = SuggestionSearch.newInstance();
mSuggestionSearch.setOnGetSuggestionResultListener(this);
//地图点击事件处理
mBaiduMap.setOnMapClickListener(this);
// 初始化搜索模块,注册事件监听
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(this);
//bus初始化
mSearch_bus = PoiSearch.newInstance();
mSearch_bus.setOnGetPoiSearchResultListener(this);
mBusLineSearch = BusLineSearch.newInstance();
mBusLineSearch.setOnGetBusLineSearchResultListener(this);
busLineIDList = new ArrayList<String>();
//地图切换按钮
this.map_location_baiduMapBtn = (ImageView) findViewById(R.id.map_location_baiduMap);
//地图类型切换按钮
this.map_baidu_layyer = (ImageView) findViewById(R.id.map_baidumap_layyer);
//附近切换按钮(poi)
this.baidu_nearBtn = (Button) findViewById(R.id.baidu_near);
//路线切换按钮(route)
this.baidu_routeBtn = (Button) findViewById(R.id.baidu_route);
//公交切换按钮(bus)
this.baidu_busBtn = (Button) findViewById(R.id.baidu_bus);
//导航功能(navi)
this.baidu_naviBtn = (Button) findViewById(R.id.baidu_navi);
}
public void initListensers() {
this.map_location_baiduMapBtn.setOnClickListener(map_location_baiduMapOnListensers);
this.map_baidu_layyer.setOnClickListener(map_baidu_layyerOnListensers);
this.commen_layerBtn.setOnClickListener(commen_layerBtnOnListensers);
this.satellite_layerBtn.setOnClickListener(satellite_layerBtnOnListensers);
this.traffic_layerCheck.setOnCheckedChangeListener(traffic_layerCheckChangeListensers);
this.baidu_nearBtn.setOnClickListener(baidu_nearOnListensers);
this.baidu_poi_startBtn.setOnClickListener(baidu_poi_startBtnOnListensers);
this.baidu_poi_nextGroupBtn.setOnClickListener(baidu_poi_nextGroupBtnOnListensers);
this.baidu_routeBtn.setOnClickListener(baidu_routeBtnOnListensers);
this.baidu_route_driveCar.setOnClickListener(baidu_route_driveCarOnListensers);
this.baidu_route_byBus.setOnClickListener(baidu_route_byBusOnListensers);
this.baidu_route_walk.setOnClickListener(baidu_route_walkOnListensers);
this.baidu_busBtn.setOnClickListener(baidu_findBtnOnListensers);
this.baidu_naviBtn.setOnClickListener(baidu_naviBtnOnListensers);
}
OnClickListener baidu_naviBtnOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), "正在不要命开发中!!!", Toast.LENGTH_LONG).show();
}
};
OnClickListener baidu_findBtnOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
if(HIDESTYLELAYER == 1) {
textview1.setVisibility(View.VISIBLE);
baidu_poi_city.setVisibility(View.VISIBLE);
textview2.setVisibility(View.VISIBLE);
baidu_poi_target.setVisibility(View.VISIBLE);
baidu_poi_startBtn.setVisibility(View.VISIBLE);
baidu_poi_nextGroupBtn.setVisibility(View.VISIBLE);
HIDESTYLELAYER = 0;
SHARE_UI_ID = 2;
} else {
textview1.setVisibility(View.GONE);
baidu_poi_city.setVisibility(View.GONE);
textview2.setVisibility(View.GONE);
baidu_poi_target.setVisibility(View.GONE);
baidu_poi_startBtn.setVisibility(View.GONE);
baidu_poi_nextGroupBtn.setVisibility(View.GONE);
HIDESTYLELAYER = 1;
SHARE_UI_ID = 0;
}
}
};
OnClickListener baidu_route_driveCarOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
SearchButtonProcess_forRoute(view);
}
};
OnClickListener baidu_route_byBusOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
SearchButtonProcess_forRoute(view);
}
};
OnClickListener baidu_route_walkOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
SearchButtonProcess_forRoute(view);
}
};
OnClickListener baidu_routeBtnOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
if(HIDEROUTE == 1) {
textView3.setVisibility(View.VISIBLE);
baidu_route_start.setVisibility(View.VISIBLE);
textView4.setVisibility(View.VISIBLE);
baidu_route_end.setVisibility(View.VISIBLE);
baidu_route_driveCar.setVisibility(View.VISIBLE);
baidu_route_byBus.setVisibility(View.VISIBLE);
baidu_route_walk.setVisibility(View.VISIBLE);
HIDEROUTE = 0;
} else {
textView3.setVisibility(View.GONE);
baidu_route_start.setVisibility(View.GONE);
textView4.setVisibility(View.GONE);
baidu_route_end.setVisibility(View.GONE);
baidu_route_driveCar.setVisibility(View.GONE);
baidu_route_byBus.setVisibility(View.GONE);
baidu_route_walk.setVisibility(View.GONE);
HIDEROUTE = 1;
}
}
};
/**
* 方法 searchButtonProcess
* 方法描述:poi搜索按功能是调用,供baidu_poi_nextGroupBtnOnListensers,baidu_poi_startBtnOnListensers使用
* @param v
* void
*/
public void searchButtonProcess(View v) {
EditText editCity = (EditText) findViewById(R.id.baidu_poi_city);
EditText editSearchKey = (EditText) findViewById(R.id.baidu_poi_target);
mPoiSearch.searchInCity((new PoiCitySearchOption())
.city(editCity.getText().toString())
.keyword(editSearchKey.getText().toString())
.pageNum(load_Index));
}
OnClickListener baidu_poi_nextGroupBtnOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
if(SHARE_UI_ID == 1) {
load_Index++;
searchButtonProcess(null);
} else if (SHARE_UI_ID == 2){
//Toast.makeText(getApplicationContext(), "bus next button!!!", Toast.LENGTH_LONG).show();
load_Index++;
searchButtonProcess_forBus(view);
}
}
};
OnClickListener baidu_poi_startBtnOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
if(SHARE_UI_ID == 1) {
searchButtonProcess(view);
} else if (SHARE_UI_ID == 2){
//Toast.makeText(getApplicationContext(), "start button!!!", Toast.LENGTH_LONG).show();
searchButtonProcess_forBus(view);
}
}
};
OnClickListener map_location_baiduMapOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
((Activity) local_context).finish();
}
};
OnClickListener commen_layerBtnOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); // 普通地图
}
};
OnClickListener satellite_layerBtnOnListensers = new OnClickListener()
{
@Override
public void onClick(View view) {
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); // 卫星地图
}
};
OnCheckedChangeListener traffic_layerCheckChangeListensers = new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton view, boolean arg1) {
mBaiduMap.setTrafficEnabled(((CheckBox) view).isChecked()); //交通路况
}
};
/**
* 字段 OnClickListener : map_baidu_layyerOnListensers
* TODO 隐藏和显示更换地图类型功能中的输入区域
*/
OnClickListener map_baidu_layyerOnListensers = new OnClickListener()
{
@Override
public void onClick(View arg0) {
if(HIDENEAR == 1) {
satellite_layerBtn.setVisibility(View.VISIBLE);
commen_layerBtn.setVisibility(View.VISIBLE);
traffic_layerCheck.setVisibility(View.VISIBLE);
HIDENEAR = 0;
} else {
satellite_layerBtn.setVisibility(View.GONE);
commen_layerBtn.setVisibility(View.GONE);
traffic_layerCheck.setVisibility(View.GONE);
HIDENEAR = 1;
}
}
};
/**
* 字段 OnClickListener : baidu_nearOnListensers
* TODO 隐藏和显示附近功能中的输入区域
*/
OnClickListener baidu_nearOnListensers = new OnClickListener()
{
@Override
public void onClick(View arg0) {
if(HIDESTYLELAYER == 1) {
textview1.setVisibility(View.VISIBLE);
baidu_poi_city.setVisibility(View.VISIBLE);
textview2.setVisibility(View.VISIBLE);
baidu_poi_target.setVisibility(View.VISIBLE);
baidu_poi_startBtn.setVisibility(View.VISIBLE);
baidu_poi_nextGroupBtn.setVisibility(View.VISIBLE);
HIDESTYLELAYER = 0;
SHARE_UI_ID = 1;
} else {
textview1.setVisibility(View.GONE);
baidu_poi_city.setVisibility(View.GONE);
textview2.setVisibility(View.GONE);
baidu_poi_target.setVisibility(View.GONE);
baidu_poi_startBtn.setVisibility(View.GONE);
baidu_poi_nextGroupBtn.setVisibility(View.GONE);
HIDESTYLELAYER = 1;
SHARE_UI_ID = 0;
}
}
};
@Override
protected void onPause() {
super.onPause();
// activity 暂停时同时暂停地图控件
mMapView.onPause();
}
@Override
protected void onResume() {
super.onResume();
// activity 恢复时同时恢复地图控件
mMapView.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
mPoiSearch.destroy();
mSuggestionSearch.destroy();
// activity 销毁时同时销毁地图控件
mMapView.onDestroy();
}
/**
*以下到下一个注释方法为poi功能的代码,是实现OnGetPoiSearchResultListener, OnGetSuggestionResultListener这两个接口
*
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onGetPoiResult(PoiResult result) {
if(this.SHARE_UI_ID == 1) {
if (result == null
|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
mBaiduMap.clear();
PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result);
overlay.addToMap();
overlay.zoomToSpan();
return;
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {
// 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表
String strInfo = "在";
for (CityInfo cityInfo : result.getSuggestCityList()) {
strInfo += cityInfo.city;
strInfo += ",";
}
strInfo += "找到结果";
Toast.makeText(BaiduMapActivity.this, strInfo, Toast.LENGTH_LONG)
.show();
}
} else if(this.SHARE_UI_ID == 2) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BaiduMapActivity.this, "抱歉,未找到结果",
Toast.LENGTH_LONG).show();
return;
}
// 遍历所有poi,找到类型为公交线路的poi
busLineIDList.clear();
for (PoiInfo poi : result.getAllPoi()) {
if (poi.type == PoiInfo.POITYPE.BUS_LINE
|| poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
busLineIDList.add(poi.uid);
}
}
SearchNextBusline(null);
route = null;
}
}
@Override
public void onGetPoiDetailResult(PoiDetailResult result) {
if (result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BaiduMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(BaiduMapActivity.this, "成功,查看详情页面", Toast.LENGTH_SHORT)
.show();
}
}
@Override
public void onGetSuggestionResult(SuggestionResult res) {
if (res == null || res.getAllSuggestions() == null) {
return;
}
sugAdapter.clear();
for (SuggestionResult.SuggestionInfo info : res.getAllSuggestions()) {
if (info.key != null)
sugAdapter.add(info.key);
}
sugAdapter.notifyDataSetChanged();
}
private class MyPoiOverlay extends PoiOverlay {
public MyPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public boolean onPoiClick(int index) {
super.onPoiClick(index);
PoiInfo poi = getPoiResult().getAllPoi().get(index);
if (poi.hasCaterDetails) {
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())
.poiUid(poi.uid));
}
return true;
}
}
/**
*以下到下一个注释方法为route功能的代码,是实现BaiduMap.OnMapClickListener,OnGetRoutePlanResultListener这两个接口
*
*/
/**
* 发起路线规划搜索示例
*
* @param v
*/
public void SearchButtonProcess_forRoute(View v) {
//重置浏览节点的路线数据
route = null;/*
mBtnPre.setVisibility(View.INVISIBLE);
mBtnNext.setVisibility(View.INVISIBLE);*/
mBaiduMap.clear();
// 处理搜索按钮响应
EditText editSt = (EditText) findViewById(R.id.baidu_route_start);
EditText editEn = (EditText) findViewById(R.id.baidu_route_end);
//设置起终点信息,对于tranist search 来说,城市名无意义
PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", editSt.getText().toString());
PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", editEn.getText().toString());
// 实际使用中请对起点终点城市进行正确的设定
if (v.getId() == R.id.baidu_route_driveCar) {
mSearch.drivingSearch((new DrivingRoutePlanOption())
.from(stNode)
.to(enNode));
} else if (v.getId() == R.id.baidu_route_byBus) {
mSearch.transitSearch((new TransitRoutePlanOption())
.from(stNode)
.city("北京")
.to(enNode));
} else if (v.getId() == R.id.baidu_route_walk) {
mSearch.walkingSearch((new WalkingRoutePlanOption())
.from(stNode)
.to(enNode));
}
}
/**
* 节点浏览示例
*
* @param v
*/
public void nodeClick(View v) {
if (nodeIndex < -1 || route == null ||
route.getAllStep() == null
|| nodeIndex > route.getAllStep().size()) {
return;
}
//获取节结果信息
LatLng nodeLocation = null;
String nodeTitle = null;
Object step = route.getAllStep().get(nodeIndex);
if (step instanceof DrivingRouteLine.DrivingStep) {
nodeLocation = ((DrivingRouteLine.DrivingStep) step).getEntrace().getLocation();
nodeTitle = ((DrivingRouteLine.DrivingStep) step).getInstructions();
} else if (step instanceof WalkingRouteLine.WalkingStep) {
nodeLocation = ((WalkingRouteLine.WalkingStep) step).getEntrace().getLocation();
nodeTitle = ((WalkingRouteLine.WalkingStep) step).getInstructions();
} else if (step instanceof TransitRouteLine.TransitStep) {
nodeLocation = ((TransitRouteLine.TransitStep) step).getEntrace().getLocation();
nodeTitle = ((TransitRouteLine.TransitStep) step).getInstructions();
}
if (nodeLocation == null || nodeTitle == null) {
return;
}
//移动节点至中心
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation));
}
/**
* 切换路线图标,刷新地图使其生效
* 注意: 起终点图标使用中心对齐.
*/
public void changeRouteIcon(View v) {
if (routeOverlay == null) {
return;
}
if (useDefaultIcon) {
((Button) v).setText("自定义起终点图标");
Toast.makeText(this,
"将使用系统起终点图标",
Toast.LENGTH_SHORT).show();
} else {
((Button) v).setText("系统起终点图标");
Toast.makeText(this,
"将使用自定义起终点图标",
Toast.LENGTH_SHORT).show();
}
useDefaultIcon = !useDefaultIcon;
routeOverlay.removeFromMap();
routeOverlay.addToMap();
}
@Override
public void onGetWalkingRouteResult(WalkingRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BaiduMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起终点或途经点地址有岐义,通过以下接口获取建议查询信息
//result.getSuggestAddrInfo()
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
route = result.getRouteLines().get(0);
WalkingRouteOverlay overlay = new MyWalkingRouteOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
routeOverlay = overlay;
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
@Override
public void onGetTransitRouteResult(TransitRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BaiduMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起终点或途经点地址有岐义,通过以下接口获取建议查询信息
//result.getSuggestAddrInfo()
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
route = result.getRouteLines().get(0);
TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
routeOverlay = overlay;
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BaiduMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起终点或途经点地址有岐义,通过以下接口获取建议查询信息
//result.getSuggestAddrInfo()
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
route = result.getRouteLines().get(0);
DrivingRouteOvelray overlay = new MyDrivingRouteOverlay(mBaiduMap);
routeOverlay = overlay;
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
//定制RouteOverly
private class MyDrivingRouteOverlay extends DrivingRouteOvelray {
public MyDrivingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
}
return null;
}
@Override
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
}
return null;
}
}
private class MyWalkingRouteOverlay extends WalkingRouteOverlay {
public MyWalkingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
}
return null;
}
@Override
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
}
return null;
}
}
private class MyTransitRouteOverlay extends TransitRouteOverlay {
public MyTransitRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
}
return null;
}
@Override
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
}
return null;
}
}
@Override
public void onMapClick(LatLng point) {
mBaiduMap.hideInfoWindow();
}
@Override
public boolean onMapPoiClick(MapPoi poi) {
return false;
}
/**
*以下到下一个注释方法为route功能的代码,是实现OnGetBusLineSearchResultListener接口
*
*/
/**
* 发起检索
*
* @param v
*/
public void searchButtonProcess_forBus(View v) {
busLineIDList.clear();
busLineIndex = 0;
EditText editCity = (EditText) findViewById(R.id.baidu_poi_city);
EditText editSearchKey = (EditText) findViewById(R.id.baidu_poi_target);
// 发起poi检索,从得到所有poi中找到公交线路类型的poi,再使用该poi的uid进行公交详情搜索
mSearch_bus.searchInCity((new PoiCitySearchOption()).city(
editCity.getText().toString()).keyword(
editSearchKey.getText().toString()));
}
public void SearchNextBusline(View v) {
if (busLineIndex >= busLineIDList.size()) {
busLineIndex = 0;
}
if (busLineIndex >= 0 && busLineIndex < busLineIDList.size()
&& busLineIDList.size() > 0) {
mBusLineSearch.searchBusLine((new BusLineSearchOption()
.city(((EditText) findViewById(R.id.baidu_poi_city)).getText()
.toString()).uid(busLineIDList.get(busLineIndex))));
busLineIndex++;
}
}
@Override
public void onGetBusLineResult(BusLineResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BaiduMapActivity.this, "抱歉,未找到结果",
Toast.LENGTH_LONG).show();
return;
}
mBaiduMap.clear();
route_bus = result;
nodeIndex = -1;
BusLineOverlay overlay = new BusLineOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result);
overlay.addToMap();
overlay.zoomToSpan();
baidu_poi_startBtn.setVisibility(View.VISIBLE);
baidu_poi_nextGroupBtn.setVisibility(View.VISIBLE);
Toast.makeText(BaiduMapActivity.this, result.getBusLineName(),
Toast.LENGTH_SHORT).show();
}
}