Android百度地图Poi检索开发总结

Android百度地图Poi检索开发总结

本文对百度地图显示后的各种功能开发做详细总结!

显示百度地图的基本步骤

  1. 下载SDK
  2. 加入lib中,依赖jar,并且依赖so文件
  3. application中添加开发者的key
  4. 添加权限
  5. 初始化sdk
  6. 添加布局,实例化对象,显示视图

之前已经有很详细的介绍了:http://blog.csdn.net/wenzhi20102321/article/details/54344613


百度地图的基本图层知识

百度地图SDK为广大开发者提供的基础地图和上面的各种覆盖物元素,具有一定的层级压盖关系,具体如下(从下至上的顺序):
1、基础底图(包括底图、底图道路、卫星图、室内图等);
2、瓦片图层(TileOverlay);
3、地形图图层(GroundOverlay);
4、热力图图层(HeatMap);
5、实时路况图图层(BaiduMap.setTrafficEnabled(true););
6、百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true););
7、底图标注(指的是底图上面自带的那些POI元素);
8、几何图形图层(点、折线、弧线、圆、多边形);
9、标注图层(Marker),文字绘制图层(Text);
10、指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);
11、定位图层(BaiduMap.setMyLocationEnabled(true););
12、弹出窗图层(InfoWindow);
13、自定义View(MapView.addView(View););
上面十三层,并不是全部都要我们去理解或接触,比如只要简单显示的话,第一层就够用了,2至6层可以选择性的显示,简单的代码就可以实现,7到13层就要使用代码去详细设置了!

百度地图的基础知识

重要类和方法

关于百度地图所有的类和方法的地址:http://wiki.lbsyun.baidu.com/cms/androidsdk/doc/1025v4.1.1/index.html

MapView 百度地图的布局的对象
BaiduMap 百度地图的控制对象
Latlng 地理位置对象 latitude纬度,longitude经度
这里科普一下知识:纬度度数范围,0-90。.经度度数范围,0-180度。0度纬线就是赤道。0度经线就是本初子午线。
Overlay 是覆盖物的对象类,标记物Marker是它的子类
OverlayOptions 覆盖物选型基类,子类有很多,
— TextOptions 创建文字覆盖物选项
— DotOptions 创建圆点的选项类
— MarkerOptions 创建图片覆盖物的选项
— GroundOverlayOptions 构造 ground 覆盖物的选项类
— ArcOptions 弧线构造选项
— CircleOptions 创建圆的选项
— PolylineOptions 创建折线覆盖物选项类
— PolygonOptions 创建多边形覆盖物选项类
SearchResult 搜索的对象
—PoiResult Poi检索结果对象
—PoiDetailResult Poi详细检索结果对象
PoiInfo 检索结果数据对象,里面包含很多数据,比如城市,地理位置,电话号码,uid等等,
PoiSearch Poi检索对象,用来发起Poi检索,
BusLineSearch 公交搜索对象,用来发起公交检索,
RoutePlanSearch 路线检索的对象,可以发起步行、驾车、跨城等等路线检索

最简单的地图显示代码

1.设置经纬度
//经纬度是反的 纬度在前,经度在后
LatLng latlng = new LatLng(22.536269, 113.95169);
2.地图的显示
//1-20级,20级为室内地图
MapStatusUpdate mapStatusUpdate =MapStatusUpdateFactory.newLatLngZoom(latlng, 18);
mBaiduMap.setMapStatus(mapStatusUpdate);

百度地图的其他设置

3.地图类型
//打开交通图
// mBaiduMap.setTrafficEnabled(true);
//打开热力图
// mBaiduMap.setBaiduHeatMapEnabled(true);
//打开卫星图
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
4.地图标注

BitmapDescriptor 生成覆盖物的图片
Overlay是所有覆盖物的基类 文字,点,线,弧,圆,矩形,图片
显示小图标图片在某一个经纬度位置的示例代码:

         Marker marker;//定义Marker标志对象
        //定义Maker坐标点,设置大学经度和纬度113.943062,22.54069
        //设置的时候经纬度是反的 纬度在前,经度在后
        LatLng point = new LatLng(22.54069, 113.943062);
        //构建Marker图标
        BitmapDescriptor bitmap = BitmapDescriptorFactory
                .fromResource(R.mipmap.shenzhen);
        //构建MarkerOption,用于在地图上添加Marker
        OverlayOptions option = new MarkerOptions()
                .position(point)
                .icon(bitmap);
        //在地图上添加Marker,并显示
         marker = (Marker) (mBaiduMap.addOverlay(options));
        //1-20级 20级室内地图
        MapStatusUpdate mapStatusUpdate =
                MapStatusUpdateFactory.newLatLngZoom(point, 19);
        mBaiduMap.setMapStatus(mapStatusUpdate);

在地图范围显示一个圆圈

    //在地图范围添加一个圆圈,传入圆心点的坐标point,填充的颜色,半径(米),还可以设置边框等等
        CircleOptions circle = new CircleOptions().center(point).fillColor(0x80ff0000).radius(100);
        mBaiduMap.addOverlay(circle);
5.地图事件

//监听事件

   //地图改变时的监听, 缩放等级,一般用于地图缩放时,标记的图标消失,或变小!
        mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {
           //地图缩放状态改变开始时
           @Override
           public void onMapStatusChangeStart(MapStatus mapStatus) {
           }

           //地图缩放状态改变时
           @Override
           public void onMapStatusChange(MapStatus mapStatus) {
               //清除所有覆盖物
               mBaiduMap.clear();
               if (mapStatus.zoom >= 15) {
                   //创建覆盖物
                   OverlayOptions options = new
                           MarkerOptions().position(latlng).icon(bitmap);
                   //添加覆盖物
                   mBaiduMap.addOverlay(options);
               }
           }

           //地图缩放状态改变后
           @Override
           public void onMapStatusChangeFinish(MapStatus mapStatus) {
           }
       }
    );
    //单击地图的监听
        mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
                    //地图单击事件回调方法
                    @Override
                    public void onMapClick(LatLng latLng) {
                        Log.e("TAG", "点击到地图上了!纬度" + latLng.latitude + "经度" + latLng.longitude);
                    }

                     //Poi 单击事件回调方法,比如点击到地图上面的商店,公交车站,地铁站等等公共场所
                        @Override
                        public boolean onMapPoiClick(MapPoi mapPoi) {
                            Log.e("TAG", "点击到地图上的POI物体了!名称:" + mapPoi.getName() + ",Uid:" + mapPoi.getUid());
                            return true;
                        }
                }

        );
    //双击地图的监听
        mBaiduMap.setOnMapDoubleClickListener(new BaiduMap.OnMapDoubleClickListener() {
                          @Override
                          public void onMapDoubleClick(LatLng latLng) {
                              Log.e("TAG", "双击到地图上了!" + latLng.latitude + "经度" + latLng.longitude);
                          }
                      }

        );
//长按地图时的监听    mBaiduMap.OnMapLongClickListener 因为没啥应用就不详细写了
     //地图上标记物点击的监听
        mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                Toast.makeText(getBaseContext(), "点击了标记物",Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    //覆盖物拖拽事件,这个有必要要说一下:有时候拖拽事件的方法为啥没有得到回调!!因为会跟其他的监听事件有才冲突
    //如果要拖拽事件得到回调,不能监听地图改变的缩放事件,也就是setOnMapStatusChangeListener方法不能设置
        mBaiduMap.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() {
             //拖拽中
             public void onMarkerDrag(Marker marker) {
                Log.e("TAG", "拖拽中");
            }

            //拖拽结束
            public void onMarkerDragEnd(Marker marker) {
                Log.e("TAG", "拖拽结束,纬度:" + marker.getPosition().latitude + ",经度:" + marker.getPosition().longitude);
            }

            //开始拖拽
            public void onMarkerDragStart(Marker marker) {
                Log.e("TAG", "开始拖拽");
            }
        });
6.弹出窗覆盖物
        //一个地图页面只能显示一个弹出框,创建第二个时,第一个会消失
        ImageView iv = new ImageView(getApplication());
        iv.setImageResource(R.mipmap.shenzhen);
        //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量(坐标的位置偏离的像素点)
        InfoWindow mInfoWindow = new InfoWindow(iv, latLng, -47);
        //显示InfoWindow
        mBaiduMap.showInfoWindow(mInfoWindow);
7.POI检索

这是百度地图中,比较实用的,也是有点难的知识!
包括的内容也是比较多的,有:城市检索,周边检索,公交路线检索,驾车路线检索,骑车路线检索等等
这里最好实用百度地图里面的工具包的类,里面已经写好了很多代码,特别是数据传递这一块。
下载里面的百度地图的Demo文件夹的src\com\baidu\mapapi\overlayutil下有十几个java文件的工具类,复制到自己的工程中,就可以使用。但是要记得把\res\drawable-hdpi里面的图标也复制到自己的工程中,因为搜索地点是会有ABC这样的标记图标。


PoiSearch的详细说明:http://wiki.lbsyun.baidu.com/cms/androidsdk/doc/1025v4.1.1/index.html

具体的操作步骤:

1.搜索对象的创建,这里要使用的是静态方法:newInstance

  PoiSearch   search = PoiSearch.newInstance();

2.重写简单搜索的类,可以进行市区搜索和周边搜索,如果是路线搜索要重写另外的类
代码如下:

/**
 * 重写和设置最基础的覆盖类
 * 用来处理搜索到的对象的信息数据
 * 这里的PoiOverlay是工具类里面的类,需要自己去复制过来使用
 */
public class MyOverLay extends PoiOverlay {
    /**
     * 构造函数
     */
    PoiSearch poiSearch;
    public MyOverLay(BaiduMap baiduMap, PoiSearch poiSearch) {
        super(baiduMap);
        this.poiSearch = poiSearch;
    }
    /**
     * 覆盖物被点击时
     */
    @Override
    public boolean onPoiClick(int i) {
        //获取点击的标记物的数据
        PoiInfo poiInfo = getPoiResult().getAllPoi().get(i);
        Log.e("TAG", poiInfo.name + "   " + poiInfo.address + "   " + poiInfo.phoneNum);
        //  发起一个详细检索,要使用uid
        poiSearch.searchPoiDetail(new PoiDetailSearchOption().poiUid(poiInfo.uid));
        return true;
    }
}

3.创建搜索的监听对象,要重写三个方法,代码:

    //POI检索的监听对象
    OnGetPoiSearchResultListener resultListener = new OnGetPoiSearchResultListener() {
        //获得POI的检索结果,一般检索数据都是在这里获取
        @Override
        public void onGetPoiResult(PoiResult poiResult) {
            //如果搜索到的结果不为空,并且没有错误
            if (poiResult != null && poiResult.error == PoiResult.ERRORNO.NO_ERROR) {
                MyOverLay overlay = new MyOverLay(mBaiduMap, search);//这传入search对象,因为一般搜索到后,点击时方便发出详细搜索
                //设置数据,这里只需要一步,
                overlay.setData(poiResult);
                //添加到地图
                overlay.addToMap();
                //将显示视图拉倒正好可以看到所有POI兴趣点的缩放等级
                overlay.zoomToSpan();//计算工具
                //设置标记物的点击监听事件
                mBaiduMap.setOnMarkerClickListener(overlay);
            } else {
                Toast.makeText(getApplication(), "搜索不到你需要的信息!", Toast.LENGTH_SHORT).show();
            }
        }
        //获得POI的详细检索结果,如果发起的是详细检索,这个方法会得到回调(需要uid)
        //详细检索一般用于单个地点的搜索,比如搜索一大堆信息后,选择其中一个地点再使用详细检索
        @Override
        public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
            if (poiDetailResult.error != SearchResult.ERRORNO.NO_ERROR) {
                Toast.makeText(getApplication(), "抱歉,未找到结果",
                        Toast.LENGTH_SHORT).show();
            } else {// 正常返回结果的时候,此处可以获得很多相关信息
                Toast.makeText(getApplication(), poiDetailResult.getName() + ": "
                                + poiDetailResult.getAddress(),
                        Toast.LENGTH_LONG).show();
            }
        }
        //获得POI室内检索结果
        @Override
        public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
        }
    };

4.设置监听对象

        search.setOnGetPoiSearchResultListener(resultListener);

5.触发搜索

        //城市搜索,需要城市名称和关键字
        String city = et_city.getText().toString();
        String key = et_key.getText().toString();
        //发起检索
        PoiCitySearchOption poiCity = new PoiCitySearchOption();
        poiCity.keyword(key).city(city);//这里还能设置显示的个数,默认显示10个
        search.searchInCity(poiCity);//执行搜索,搜索结束后,在搜索监听对象里面的方法会被回调

这里说一下范围检索和周边检索:
周边检索是指定圆形位置和圆的半径的检索
而范围检索,指定的是一个长方向的范围检索,需要指定左上和右下角的地理位置
//我执行周边检索和范围检索的时候,不知道为什么指定的范围没起到什么作用!搜到的数据好像是会超出范围的!!!

        //POI搜索,范围检索

        //定义Maker坐标点,深圳大学经度和纬度113.943062,22.54069
        double latitude = 22.54069;
        double longitude = 113.943062;
        //获得Key
        String key = et_around.getText().toString();
        //发起周边检索
        PoiBoundSearchOption boundSearchOption = new PoiBoundSearchOption();
        LatLng southwest = new LatLng(latitude - 0.01, longitude - 0.012);// 西南
        LatLng northeast = new LatLng(latitude + 0.01, longitude + 0.012);// 东北
        LatLngBounds bounds = new LatLngBounds.Builder().include(southwest)
                .include(northeast).build();// 得到一个地理范围对象
        boundSearchOption.bound(bounds);// 设置poi检索范围
        boundSearchOption.keyword(key);// 检索关键字
        boundSearchOption.pageNum(1);//搜索一页
        search.searchInBound(boundSearchOption);// 发起poi范围检索请求

  //POI搜索,周边检索,

        //定义Maker坐标点,深圳大学经度和纬度113.943062,22.54069
        //设置的时候经纬度是反的 纬度在前,经度在后
        LatLng point = new LatLng(22.54069, 113.943062);
        //获得Key
        String key = et_point.getText().toString();
        //周边检索
        PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption();
        nearbySearchOption.location(point);
        nearbySearchOption.keyword(key);
        nearbySearchOption.radius(100);// 检索半径,单位是米
        nearbySearchOption.pageNum(1);//搜索一页
        search.searchNearby(nearbySearchOption);// 发起附近检索请求

上面五步就可以就可以完成各种点的PoiSearch搜寻。
如果要要实现路线搜索确实是要麻烦一点的。使用的类不仅要PoiSearch,还有其他的类,比如公交路线搜索使用的是BusLineSearch,而所有的路线搜索的使用步骤也是基本一样的。

8.公交、地铁路线检索

路线搜索的类:
BusLineSearch 公交、地铁路线搜索

    //路线搜索,大致思路:
    //1.先发起一个poi检索,(新建一个Poi检索对象)
    //2.在poi的检索结果中发起公交搜索
    //3.在公交检索搜索结果中获取数据

虽然公交、地铁的路线检索步骤多得很,但是也是要说的:

1.搜索对象的创建,这里要使用的是静态方法,使用的类就是PoiSearch和BusLineSearch

  PoiSearch   busPoiSearch = PoiSearch.newInstance();//Poi检索对象
  BusLineSearch  busLineSearch = BusLineSearch.newInstance();//公交检索对象

2.重写简单搜索的类MyOverLay,可以进行市区搜索和周边搜索,这里路线搜索要还要重写另外的类BusLineOverlay
MyOverLay类重写这里就不重复写了,这里简单说一下重写BusLineOverlay
代码如下:


/**
 * 重写和设置公交路线的覆盖类
 * 用来处理搜索到的对象的信息数据
 * 把数据保存在每一个对应的Mark对象中
 */

public class MyBusOverLay extends BusLineOverlay {
    /**
     * 构造函数
     */
    PoiSearch busPoiSearch;

    public MyBusOverLay(BaiduMap baiduMap, PoiSearch busPoiSearch) {
        super(baiduMap);
        this.busPoiSearch = busPoiSearch;
    }

    @Override
    public boolean onBusStationClick(int index) {
        //获取点击的标记物的数据
        Log.e("TAG", "站点:" + mBusLineResult.getBusLineName());
        Log.e("TAG", "运营时间:" + mBusLineResult.getStartTime() + "---" + mBusLineResult.getEndTime());
        Log.e("TAG", "费用:" + mBusLineResult.getBasePrice() + "---" + mBusLineResult.getMaxPrice());
        //  发起一个详细检索,要使用uid
        busPoiSearch.searchPoiDetail(new PoiDetailSearchOption().poiUid(mBusLineResult.getUid()));
        return true;
    }
}

3.创建搜索的监听对象,要重写三个方法,代码:

     //公交路线的点的POI检索的监听对象,和上面的接口对象其实是一个类的,但是里面的处理是不一样的
    //在里面判断是否是搜索到公交路线的Poi点
    OnGetPoiSearchResultListener busPoiSearchResultListener = new OnGetPoiSearchResultListener() {
        //获得POI的检索结果,一般检索数据都是在这里获取
        @Override
        public void onGetPoiResult(PoiResult poiResult) {
            mBaiduMap.clear();//清除标志
            if (poiResult != null && poiResult.error == PoiResult.ERRORNO.NO_ERROR) {//如果没有错误
                //遍历所有数据
                for (int i = 0; i < poiResult.getAllPoi().size(); i++) {
                    //获取里面的数据对象
                    PoiInfo poiInfo = poiResult.getAllPoi().get(i);
                    //判断检索到的点的类型是不是公交路线或地铁路线
                    //poiInfo类中有个type字段:0:普通点、1:、公交站 2:、 公交路线 3:、地铁站 4:地铁线路
                    if (poiInfo.type == PoiInfo.POITYPE.BUS_LINE || poiInfo.type == PoiInfo.POITYPE.SUBWAY_LINE) {
                        //发起公交检索
                        BusLineSearchOption busLineOptions = new BusLineSearchOption();
                        busLineOptions.city("深圳").uid(poiInfo.uid);//公交检索要指定城市和uid!
                        busLineSearch.searchBusLine(busLineOptions);
                    }
                }

                return;
            } else {
                Toast.makeText(getApplication(), "搜索不到你需要的信息!", Toast.LENGTH_SHORT).show();
            }
        }

        //获得POI的详细检索结果,如果发起的是详细检索,这个方法会得到回调(需要uid)
        @Override
        public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
            if (poiDetailResult.error != SearchResult.ERRORNO.NO_ERROR) {
                Toast.makeText(getApplication(), "抱歉,未找到结果",
                        Toast.LENGTH_SHORT).show();
            } else {// 正常返回结果的时候,此处可以获得很多相关信息
                Toast.makeText(getApplication(), poiDetailResult.getName() + ": "
                                + poiDetailResult.getAddress(),
                        Toast.LENGTH_LONG).show();
            }
        }

        //获得POI室内检索结果
        @Override
        public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

        }
    };

4.设置监听对象,两个!

        //这里是Poi检索的监听   
         busPoiSearch.setOnGetPoiSearchResultListener(busPoiSearchResultListener);

         //设置公交监听对象,公交检索得到结果后,里面的方法得到回调,这里是公交检索的监听
        busLineSearch.setOnGetBusLineSearchResultListener(new OnGetBusLineSearchResultListener() {
            @Override
            public void onGetBusLineResult(BusLineResult busLineResult) {
                MyBusOverLay overlay = new MyBusOverLay(mBaiduMap,busPoiSearch);//这里用到了MyBusOverLay类
                //设置数据,这里只需要一步,
                overlay.setData(busLineResult);
                //添加到地图
                overlay.addToMap();
                //将显示视图拉倒正好可以看到所有POI兴趣点的缩放等级
                overlay.zoomToSpan();//计算工具
                //设置标记物的点击监听事件
                mBaiduMap.setOnMarkerClickListener(overlay);

            }
        });

5.触发搜索

         String key = et_start.getText().toString();
        //城市内的公交、地铁路线检索
        PoiCitySearchOption poiCitySearchOptions = new PoiCitySearchOption();
        poiCitySearchOptions.city("深圳").keyword(key);//城市检索的数据设置
        busPoiSearch.searchInCity(poiCitySearchOptions);//发起城市检索,当然也可以发送范围检索和周边检索
        //之后的思路也简单说一下:这里发送城市检索后,Poi检索的监听对象的方法会接收到数据
        //Poi检索的方法接收到数据后发起公交检索,公交检索的监听对象的方法就会得到回调,就会显示公交路线在地图上面
        //因为在MyBusOverLay中重写了Onclick方法,所以点击是会发起Poi的详细检索,详细检索的监听方法得到回调后会土司(当然也可以实现页面跳转!)
9.自定义路线检索

RoutePlanSearch 驾车/骑车/步行的路线搜索,
路线检索其实并不是很难,这里并没有用到Poi检索,简单的路线检索要指定起点和终点,点的位置可以只用经纬度,也可以使用城市+关键字。
步行路线检索最简单,这里把步骤写下:
1.创建路线规划对象

 RoutePlanSearch routePlanSearch = RoutePlanSearch.newInstance();//路线规划对象

这里没有重写那些工具类,是因为一般不需要点击路线上面的点,如果需要也是可以重写的!
2.给路线规划创建监听,这里要重写很多的方法,如果知道是发起的哪一个路线检索,就在哪一个路线检索的回调方法里面设置显示路线在地图上面。

 //给路线规划添加监听
        routePlanSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {
            //步行路线结果回调
            @Override
            public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {
                mBaiduMap.clear();
                if (walkingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
                    WalkingRouteOverlay walkingOverlay = new WalkingRouteOverlay(mBaiduMap);
                    walkingOverlay.setData(walkingRouteResult.getRouteLines().get(0));// 设置一条路线方案
                    walkingOverlay.addToMap();
                    walkingOverlay.zoomToSpan();
                    mBaiduMap.setOnMarkerClickListener(walkingOverlay);
                    Log.e("TAG", walkingOverlay.getOverlayOptions() + "");

                } else {
                    Toast.makeText(getBaseContext(), "搜不到!", Toast.LENGTH_SHORT).show();
                }
            }

            //换乘线结果回调
            @Override
            public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {

            }

            //跨城公共交通路线结果回调
            @Override
            public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {

            }

            //驾车路线结果回调
            @Override
            public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
                mBaiduMap.clear();//清除图标或路线
                if (drivingRouteResult == null
                        || drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
                    Toast.makeText(getBaseContext(), "抱歉,未找到结果",
                            Toast.LENGTH_SHORT).show();
                }
                if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
                    DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
                            mBaiduMap);
                    drivingRouteOverlay.setData(drivingRouteResult.getRouteLines().get(1));// 设置一条驾车路线方案
                    mBaiduMap.setOnMarkerClickListener(drivingRouteOverlay);
                    drivingRouteOverlay.addToMap();
                    drivingRouteOverlay.zoomToSpan();
                    int totalLine = drivingRouteResult.getRouteLines().size();
                    Toast.makeText(getBaseContext(),
                            "共查询出" + totalLine + "条符合条件的线路", Toast.LENGTH_LONG).show();

                    // 通过getTaxiInfo()可以得到很多关于驾车的信息
                }
            }


            //室内路线规划回调
            @Override
            public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {

            }

            // 骑行路线结果回调
            @Override
            public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {

            }
        });

3.触发搜索,这里要保证上面的回调方法已经设置好!

        //发起步行路线检索,这里发起的是某一个位置到深圳大学的位置的路线

          //定义Maker坐标点,深圳大学经度和纬度113.943062,22.54069
        //设置的时候经纬度是反的 纬度在前,经度在后
        LatLng point = new LatLng(22.54069, 113.943062);
        //获得关键字
        String key = et_start.getText().toString();
        //创建步行路线搜索对象
        WalkingRoutePlanOption walkingSearch = new WalkingRoutePlanOption();
        //设置节点对象,可以通过城市+关键字或者使用经纬度对象来设置
        PlanNode fromeNode = PlanNode.withCityNameAndPlaceName("深圳", key);
        PlanNode toNode = PlanNode.withLocation(point);
        walkingSearch.from(fromeNode).to(toNode);
        routePlanSearch.walkingSearch(walkingSearch);//发起路线检索

驾车路线,比步行路线可以设置的属性相对多一点,比如可以设置经过那个点,选择路线的策略( 躲避拥堵,最短距离,较少费用,时间优先)

    //发起驾车路线检索,这里发起的是某一个位置到深圳大学的位置的路线

    //定义Maker坐标点,深圳大学经度和纬度113.943062,22.54069
        //设置的时候经纬度是反的 纬度在前,经度在后
        LatLng point = new LatLng(22.54069, 113.943062);
        //获得关键字
        String key = et_start.getText().toString();
        //创建驾车路线搜索对象
        DrivingRoutePlanOption drivingOptions = new DrivingRoutePlanOption();
        //设置节点对象,可以通过城市+关键字或者使用经纬度对象来设置
        PlanNode fromeNode = PlanNode.withCityNameAndPlaceName("深圳", key);
        PlanNode toNode = PlanNode.withLocation(point);
        drivingOptions.from(fromeNode).to(toNode);
        //drivingOptions.passBy(list);//设置路线经过的点,要放入一个PlanNode的集合对象
        drivingOptions.policy(DrivingRoutePlanOption.DrivingPolicy.ECAR_AVOID_JAM);//设置驾车策略,避免拥堵
        routePlanSearch.drivingSearch(drivingOptions);//发起驾车检索

其他的路线规划,用法其实差不多,这里就不重复了,应用中也是常用步行路线规划和驾车规划!

下面提供一个程序的源码,效果如下:
POI城市检索效果:
a1

范围检索和周边检索的效果:
a2

公交路线检索的效果:
a3

步行、驾车到深圳大学路线检索的效果:
a4

代码下载网址:
http://download.csdn.net/detail/wenzhi20102321/9738985

  • 16
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值