为什么实现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 int | ECAR_DIS_FIRST 驾乘检索策略常量:最短距离 |
static int | ECAR_FEE_FIRST 驾乘检索策略常量:较少费用 |
static int | ECAR_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);
}
}
}