百度map api for Android~搜索服务

来源:互联网 发布:淘宝申诉进程在哪看 编辑:程序博客网 时间:2024/04/30 12:42

首先看看百度 开发文档 地址 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.String startCity, MKPlanNode start, java.lang.String endCity, MKPlanNode end)
          驾乘路线搜索.
下面是官方文档的一段解释

public int drivingSearch(java.lang.String startCity,                         MKPlanNode start,                         java.lang.String endCity,                         MKPlanNode end)
驾乘路线搜索.

异步函数,返回结果在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);
驾车线路搜索策略包括以下

static intECAR_DIS_FIRST
          驾乘检索策略常量:最短距离static intECAR_FEE_FIRST
          驾乘检索策略常量:较少费用static intECAR_TIME_FIRST
          驾乘检索策略常量:时间优先


步行线路搜索 walkingSearch(java.lang.String startCity,MKPlanNode start, java.lang.String endCity,MKPlanNode end)

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.String city,MKPlanNode start,MKPlanNode end)

public int transitSearch(java.lang.String city,                         MKPlanNode start,                         MKPlanNode end)
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);}}        }


原创粉丝点击