Android百度地图Poi检索开发总结
Android百度地图Poi检索开发总结
本文对百度地图显示后的各种功能开发做详细总结!
显示百度地图的基本步骤
- 下载SDK
- 加入lib中,依赖jar,并且依赖so文件
- application中添加开发者的key
- 添加权限
- 初始化sdk
- 添加布局,实例化对象,显示视图
之前已经有很详细的介绍了: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城市检索效果:
范围检索和周边检索的效果:
公交路线检索的效果:
步行、驾车到深圳大学路线检索的效果:
代码下载网址:
http://download.csdn.net/detail/wenzhi20102321/9738985
更多相关文章
- Android(安卓)dumpsys工具分析
- Android网络请求框架AsyncHttpClient详解(整理)
- Android(安卓)Hook Java
- Android(安卓)okHttp 实战(三):okHttp网络请求之Json解析
- Android开发指导文档(译)--content provider(一)
- Android(安卓)retrofit2+OkHttp3的初尝试
- Android(安卓)VideoView 循环播放视频
- Android知识体系总结之Android部分之Intent篇
- Android(安卓)用户界面---定制组件(Custom Components)(一)