百度map api for Android~搜索服务
16lz
2021-01-26
首先看看百度 开发文档 地址 http://dev.baidu.com/wiki/imap/index.php?title=Android%E5%B9%B3%E5%8F%B0/%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97#POI.E6.90.9C.E7.B4.A2.E5.8F.8APoiOverlay
为什么实现MKSearchListener 方法?因为实现位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索的这些函数,
都是异步函数,返回结果会在MKSearchListener里的方法通知。
下面是我自定义MySearchListener实现MKSearchListener接口
package rw.baidu.map2;import android.app.Activity;import com.baidu.mapapi.MKAddrInfo;import com.baidu.mapapi.MKDrivingRouteResult;import com.baidu.mapapi.MKPoiResult;import com.baidu.mapapi.MKSearch;import com.baidu.mapapi.MKSearchListener;import com.baidu.mapapi.MKTransitRouteResult;import com.baidu.mapapi.MKWalkingRouteResult;import com.baidu.mapapi.MapView;import com.baidu.mapapi.PoiOverlay;public class MySearchListener implements MKSearchListener { private MapView mapView;private Activity activity;public MySearchListener(MapView mapView, Activity activity) {super();this.mapView = mapView;this.activity = activity;}@Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub//驾车路线通知函数}@Overridepublic void onGetPoiResult(MKPoiResult result, int type, int iError) {// TODO Auto-generated method stubif (result == null) {return;}PoiOverlay poioverlay = new PoiOverlay(activity, mapView);poioverlay.setData(result.getAllPoi());mapView.getOverlays().add(poioverlay);}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {// TODO Auto-generated method stub//步行路线通知函数}}首先实例化MKSearch类的一个对象
public boolean init(BMapManager bmapMan, MKSearchListener listener) 初使化 参数: bmapMan - 实例化的BMapManger 返回: 成功返回true,否则返回false
| drivingSearch(java.lang.StringstartCity, MKPlanNodestart, java.lang.StringendCity, MKPlanNodeend) 驾乘路线搜索. |
下面是官方文档的一段解释
public int drivingSearch(java.lang.StringstartCity, MKPlanNodestart, java.lang.StringendCity, MKPlanNodeend)
- 驾乘路线搜索.
异步函数,返回结果在MKSearchResultNotifier里的onGetDrivingRouteResult方法通知
-
- 参数:
-
startCity
- 起点所在城市,起点为坐标或uid时可不填 -
start
- 搜索的起点,可以为坐标,名称,uid任一种 -
endCity
- 终点所在城市,终点为坐标或uid时可不填 -
end
- 搜索的终点,可以为坐标,名称,uid任一种 - 返回:
- 成功返回0,否则返回-1
-
- 下面的start 是坐标,end 也是坐标
检索从天安门到百度大厦的驾车路线: MKPlanNode start = new MKPlanNode(); start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); MKPlanNode end = new MKPlanNode(); end.pt = new GeoPoint(40057031, 116307852); // 设置驾车路线搜索策略,时间优先、费用最少或距离最短 mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST); mMKSearch.drivingSearch(null, start, null, end);驾车线路搜索策略包括以下
staticint | ECAR_DIS_FIRST 驾乘检索策略常量:最短距离 |
staticint | ECAR_FEE_FIRST 驾乘检索策略常量:较少费用 |
staticint | ECAR_TIME_FIRST 驾乘检索策略常量:时间优先 |
步行线路搜索 walkingSearch(java.lang.StringstartCity,MKPlanNodestart, java.lang.StringendCity, MKPlanNodeend)
public int walkingSearch(java.lang.String startCity, MKPlanNode start, java.lang.String endCity, MKPlanNode end) 步行路线搜索. 异步函数,返回结果在MKSearchResultNotifier里的onGetWalkingRouteResult方法通知 参数: startCity - 起点所在城市,起点为坐标或uid时可不填 start - 搜索的起点,可以为坐标,名称,uid任一种 endCity - 终点所在城市,终点为坐标或uid时可不填 end - 搜索的终点,可以为坐标,名称,uid任一种 返回: 成功返回0,否则返回-1
检索从天安门到百度大厦的步行路线: MKPlanNode start = new MKPlanNode(); start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); MKPlanNode end = new MKPlanNode(); end.pt = new GeoPoint(40057031, 116307852); mMKSearch.walkingSearch(null, start, null, end);
公交路线搜索.transitSearch(java.lang.Stringcity,MKPlanNodestart, MKPlanNodeend)
public int transitSearch(java.lang.Stringcity, MKPlanNodestart, MKPlanNodeend)
public int transitSearch(java.lang.String city, MKPlanNode start, MKPlanNode end) 公交路线搜索. 异步函数,返回结果在MKSearchResultNotifier里的onGetTransitRouteResult方法通知 参数: city - 城市名,用于在哪个城市内进行检索 start - 检索的起点,可通过关键字,坐标,poi uid三种方式指定 end - 检索的终点,可通过关键字,坐标,poi uid三种方式指定 返回: 成功返回0,否则返回-1
检索从天安门到百度大厦的公交路线: MKPlanNode start = new MKPlanNode(); start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); MKPlanNode end = new MKPlanNode(); end.pt = new GeoPoint(40057031, 116307852); mkSearch.transitSearch("北京", start, end);
POI搜索及PoiOverlay
中国POI(Point of Interest)数据库, POI是“Point of Interest”的缩写,每个POI包含四方面信息,名称、类别、经度、纬度。 这个计划的远景目标是建立全国的POI数据库,并且全部开放。 目前POI数据库计划已经发布有北京市区POI数据16000条,全国村镇POI数据8万余条。全国其它地区的POI数据正在搜集整理中,同时还有一个全国公路收费站POI数据的计划也在进行。
下面是三种POI搜索方式,根据范围和检索词发起范围检索poiSearchInbounds,城市poi检索poiSearchInCity,周边检索poiSearchNearBy。
下面是代码实现
class MyButton implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(b1.isChecked()){ mkSearch=new MKSearch(); mkSearch.init(mBMapMan, new MySearchListener(mMapView, Baidumap2Activity.this)); //根据范围和检索词发起范围检索. /* * 根据一个检索词,范围5000米 */ mkSearch.poiSearchInbounds("北京天安门", new GeoPoint((int) (37.915 * 1E6), (int) (114.404 * 1E6)),new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6))); /* * 根据多个检索词。范围5000米 */ mkSearch.poiMultiSearchInbounds(new String[]{"北京天安门","王府井大饭店"}, new GeoPoint((int) (37.915 * 1E6), (int) (114.404 * 1E6)),new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6))); }if(b2.isChecked()){ mkSearch=new MKSearch(); mkSearch.init(mBMapMan, new MySearchListener(mMapView, Baidumap2Activity.this)); mkSearch.poiSearchInCity("北京", "天安门");}if(b3.isChecked()){ mkSearch=new MKSearch(); mkSearch.init(mBMapMan, new MySearchListener(mMapView, Baidumap2Activity.this)); /* * 根据一个检索词,范围5000米 */ mkSearch.poiSearchNearBy(editText.getText().toString(),new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)), 5000); /* * 根据多个检索词,范围5000米 */ mkSearch.poiMultiSearchNearBy(new String[]{"北京天安门","王府井大饭店"},new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)), 5000);}} }
更多相关文章
- [置顶] ANDROID 返回,菜单和HOME键的监听
- Android在线更新版本(服务端+客户端Code)
- Android(安卓)判断触摸点是否在某个view的区域,解决子view与paren
- ReactNative 中 android按两次返回键退出当前应用程序
- Android如何获取SDCard 内存
- android 网络编程 HttpGet类和HttpPost类使用详解
- android打开相册选取图片或打开相机拍照并进行裁剪
- Android黑群出品:SQLite数据库的使用和升级
- Android控制软键盘的现实与隐藏