百度地图的搜索模块,是可以去掉地图模块独立使用的。为了方便使用在《Android百度地图——路线规划搜索》这篇文章前提下再次封装成独立的类。

先来看一下封装后的调用方法:

        BaiduSearch search = new BaiduSearch(context);        search.setOnMyGetRoutePlanResultListener(new OnMyGetRoutePlanResultListener() {            @Override            public void onGetWalkingRouteResult(WalkingRouteResult arg0) {                // TODO Auto-generated method stub                //搜索结果可以自行解析,也可以直接在地图上加载,下面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 pass=new ArrayList();        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;    // 搜索模块,也可去掉地图模块独立使用        /** 路径规划接口  */    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;        // 初始化搜索模块,注册事件监听        mSearch = RoutePlanSearch.newInstance();        mSearch.setOnGetRoutePlanResultListener(this);    }    /**发起路线规划搜索示例     * @param start 起点     * @param end 终点     * @param passBy 途经点,仅在drivingSearch有效     * @param state 选择搜索方式     */    public void SearchProcess(LatLng start,LatLng end,ArrayList passBy,int state) {        ArrayList arg0 =new ArrayList();        //设置起终点信息,对于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);            }        }        // 实际使用中请对起点终点城市进行正确的设定        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, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            //起终点或途经点地址有岐义,通过以下接口获取建议查询信息            //result.getSuggestAddrInfo()            Toast.makeText(context, "抱歉,未找到结果", 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, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            //起终点或途经点地址有岐义,通过以下接口获取建议查询信息            //result.getSuggestAddrInfo()            Toast.makeText(context, "抱歉,未找到结果", 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, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            //起终点或途经点地址有岐义,通过以下接口获取建议查询信息            //result.getSuggestAddrInfo()            Toast.makeText(context, "抱歉,未找到结果", 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, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            //起终点或途经点地址有岐义,通过以下接口获取建议查询信息            //result.getSuggestAddrInfo()            Toast.makeText(context, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();            return;        }        if (result.error == SearchResult.ERRORNO.NO_ERROR) {            if (listener!=null) {                listener.onGetWalkingRouteResult(result);            }        }    }    }

更多相关文章

  1. Android硬件渲染之LockCanvas()
  2. Android调用接口,获取并解析数据(json格式)
  3. Android(安卓)Gradle plugin升级 3.0.1 和升级 3.1.1遇到的坑
  4. NDK Mediacodec
  5. Android(安卓)NDK开发指南(一) Application.mk文件
  6. javascript 与 webview 交互
  7. 百度地图SDK for Android【事件监听】
  8. Android(安卓)跨进程通信(一)
  9. Android(安卓)4.0 wifi 和 Ethernet 的实现分析

随机推荐

  1. OpenSignal给出的Android现状分析及技巧
  2. android 自定义软键盘
  3. android菜单和对话框
  4. android 下用ant编译脚本执行批量渠道打
  5. NDK学习笔记
  6. android软键盘的搜索按钮
  7. android 日历控件
  8. Android:禁止滚动的解决方法
  9. Android 优秀文章收集
  10. 【android】模拟点击某个指定坐标作用在V