百度地圖的搜索模塊,是可以去掉地圖模塊獨(dú)立使用的。為了方便使用在《Android百度地圖——路線規(guī)劃搜索》這篇文章前提下再次封裝成獨(dú)立的類。
先來看一下封裝后的調(diào)用方法:
BaiduSearch search = new BaiduSearch(context);
search.setOnMyGetRoutePlanResultListener(new OnMyGetRoutePlanResultListener() {
@Override
public void onGetWalkingRouteResult(WalkingRouteResult arg0) {
// TODO Auto-generated method stub
//搜索結(jié)果可以自行解析,也可以直接在地圖上加載,下面onGetDrivingRouteResult給出了地圖加載例子
}
@Override
public void onGetTransitRouteResult(TransitRouteResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult arg0) {
// TODO Auto-generated method stub
DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaidumap);
overlay.setData(arg0.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
@Override
public void onGetBikingRouteResult(BikingRouteResult arg0) {
// TODO Auto-generated method stub
}
});
ArrayList<LatLng> pass=new ArrayList<LatLng>();
pass.add(new LatLng( 23.102603,113.304713));
search.SearchProcess(new LatLng( 23.159499,113.261269)
, new LatLng(23.15312,113.328859 )
, pass
, BaiduSearch.DrivingRoute);
下面是BaiduSearch.java的代碼:
import java.util.ArrayList;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.route.BikingRoutePlanOption;
import com.baidu.mapapi.search.route.BikingRouteResult;
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.TransitRoutePlanOption;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRoutePlanOption;
import com.baidu.mapapi.search.route.WalkingRouteResult;
import android.content.Context;
import android.widget.Toast;
/**
* @author 王家宇
*
*/
public class BaiduSearch implements OnGetRoutePlanResultListener{
private Context context;
private RoutePlanSearch mSearch = null; // 搜索模塊,也可去掉地圖模塊獨(dú)立使用
/** 路徑規(guī)劃接口 */
public interface OnMyGetRoutePlanResultListener{
public void onGetBikingRouteResult(BikingRouteResult arg0);
public void onGetDrivingRouteResult(DrivingRouteResult arg0);
public void onGetTransitRouteResult(TransitRouteResult arg0) ;
public void onGetWalkingRouteResult(WalkingRouteResult arg0);
}
private OnMyGetRoutePlanResultListener listener=null;
public void setOnMyGetRoutePlanResultListener(OnMyGetRoutePlanResultListener listener){
this.listener=listener;
}
/** 自行車 */
public static final int BikingRoute=0;
/** 駕車 */
public static final int DrivingRoute=1;
/** 公交 */
public static final int TransitRoute=2;
/** 步行 */
public static final int WalkingRoute=3;
public BaiduSearch(Context context){
this.context=context;
// 初始化搜索模塊,注冊事件監(jiān)聽
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(this);
}
/**發(fā)起路線規(guī)劃搜索示例
* @param start 起點(diǎn)
* @param end 終點(diǎn)
* @param passBy 途經(jīng)點(diǎn),僅在drivingSearch有效
* @param state 選擇搜索方式
*/
public void SearchProcess(LatLng start,LatLng end,ArrayList<LatLng> passBy,int state) {
ArrayList<PlanNode> arg0 =new ArrayList<PlanNode>();
//設(shè)置起終點(diǎn)信息,對于tranistsearch 來說,城市名無意義
PlanNode stNode = PlanNode.withLocation(start);
PlanNode enNode = PlanNode.withLocation(end);
if (passBy!=null) {
for (int i = 0; i < passBy.size(); i++) {
PlanNode node = PlanNode.withLocation(passBy.get(i));
arg0.add(node);
}
}
// 實(shí)際使用中請對起點(diǎn)終點(diǎn)城市進(jìn)行正確的設(shè)定
switch (state) {
case BikingRoute:
mSearch.bikingSearch((new BikingRoutePlanOption())
.from(stNode)
.to(enNode));
break;
case DrivingRoute:
mSearch.drivingSearch((new DrivingRoutePlanOption())
.from(stNode)
.passBy(arg0)
.to(enNode));
break;
case TransitRoute:
mSearch.transitSearch((new TransitRoutePlanOption())
.from(stNode)
.to(enNode));
break;
case WalkingRoute:
mSearch.walkingSearch((new WalkingRoutePlanOption())
.from(stNode)
.to(enNode));
break;
default:
break;
}
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult result) {
// TODO Auto-generated method stub
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起終點(diǎn)或途經(jīng)點(diǎn)地址有岐義,通過以下接口獲取建議查詢信息
//result.getSuggestAddrInfo()
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
if (listener!=null) {
listener.onGetDrivingRouteResult(result);
}
}
}
@Override
public void onGetBikingRouteResult(BikingRouteResult result) {
// TODO Auto-generated method stub
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起終點(diǎn)或途經(jīng)點(diǎn)地址有岐義,通過以下接口獲取建議查詢信息
//result.getSuggestAddrInfo()
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
if (listener!=null) {
listener.onGetBikingRouteResult(result);
}
}
}
@Override
public void onGetTransitRouteResult(TransitRouteResult result) {
// TODO Auto-generated method stub
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起終點(diǎn)或途經(jīng)點(diǎn)地址有岐義,通過以下接口獲取建議查詢信息
//result.getSuggestAddrInfo()
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
if (listener!=null) {
listener.onGetTransitRouteResult(result);
}
}
}
@Override
public void onGetWalkingRouteResult(WalkingRouteResult result) {
// TODO Auto-generated method stub
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起終點(diǎn)或途經(jīng)點(diǎn)地址有岐義,通過以下接口獲取建議查詢信息
//result.getSuggestAddrInfo()
Toast.makeText(context, "抱歉,未找到結(jié)果", Toast.LENGTH_SHORT).show();
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
if (listener!=null) {
listener.onGetWalkingRouteResult(result);
}
}
}
}