百度map api for Android~搜索服务

首先看看百度 开发文档 地址 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;
	}

	@Override
	public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
		// TODO Auto-generated method stub
		//驾车路线通知函数
	}

	@Override
	public void onGetPoiResult(MKPoiResult result, int type, int iError) {
		// TODO Auto-generated method stub
		if (result == null) {
			return;
			}
			PoiOverlay poioverlay = new PoiOverlay(activity, mapView);
			poioverlay.setData(result.getAllPoi());
			mapView.getOverlays().add(poioverlay);
	}

	@Override
	public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public 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{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if(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);
			}
		}
    	
    }


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值