ONE Goal ,ONE Passion !
上面几篇写了如何集成以及使用百度地图和覆盖物.现在就说说百度地图的检索功能;
目前百度地图SDK所集成的检索服务包括:POI检索、公交信息查询、线路规划、地理编码、在线建议查询、短串分享。
PIO检索:
POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
下面将以 周边检索 为例,向大家介绍如何使用检索服务。
// 第一步:创建POI检索实例
poiSearch = PoiSearch.newInstance();
//第二步:创建检索选项---即检索的一些条件
PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption();
// 设置检索中心点
nearbySearchOption.location(new LatLng(34.7568711, 113.663221));
//设置检索的关键字---如超市,酒店,药店等
nearbySearchOption.keyword("超市");
// 检索半径,单位是米
nearbySearchOption.radius(1000);
//检索页数
nearbySearchOption.pageNum(10);
//第三步: 发起附近检索请求
poiSearch.searchNearby(nearbySearchOption);
//第四步: 设置POI检索监听者;
poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
/** * 得到检索结果 * @param poiResult---检索结果 */
@Override
public void onGetPoiResult(PoiResult poiResult) {
final List<PoiInfo> allPoi = poiResult.getAllPoi();
System.out.println("检索地址" + allPoi);
for (int i = 0; i < allPoi.size(); i++) {
System.out.println("检索地址" + allPoi.get(i).address);
}
}
/** * 详细信息检索的回调方法 * @param poiDetailResult ---检索结果 * 当检索的是 POI详情信息 时才会回调这个方法 * 如---- * 发起下面检索: // uid是POI检索中获取的POI ID信息 poiSearch .searchPoiDetail((new PoiDetailSearchOption()).poiUid(uid)); 此时结果会出现在poiDetailResult中 */
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
final LatLng location = poiDetailResult.getLocation();
System.out.println("location----" + location);
}
});
}
});
公交信息检索:
利用BusLineSearch方法,开发者可查询公交线路的详情信息,实现方式如下:
第一步,发起POI检索,获取相应线路的UID;
//以城市内检索为例,详细方法请参考POI检索部分的相关介绍
poiSearch.searchInCity((new PoiCitySearchOption())
.city("北京")
.keyword("717"));
第二步,在POI检索结果中判断该POI类型是否为公交信息;
// 此方法同上是poiSearch设置监听后回调的方法.
/** * 得到检索结果 * @param poiResult---检索结果 */
@Override
public void onGetPoiResult(PoiResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
return;
}
//遍历所有POI,找到类型为公交线路的POI
for (PoiInfo poi : result.getAllPoi()) {
if (poi.type == PoiInfo.POITYPE.BUS_LINE ||poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
//说明该条POI为公交信息,获取该条POI的UID
busLineId = poi.uid;
break;
}
}
}
第三步,定义并设置公交信息结果监听者(与POI类似),并发起公交详情检索;
//如下代码为发起检索代码,定义监听者和设置监听器的方法与POI中的类似
mBusLineSearch.searchBusLine((new BusLineSearchOption()
.city("北京”")
.uid(busLineId)));
线路规划:
下面的用法基本和上面是一样的,就不在一步一步的解释了,直接使用百度官方解释了.
公交线路规划:
实现公交线路规划的方式如下:
第一步,创建公交线路规划检索实例;
mSearch = RoutePlanSearch.newInstance();
第二步,创建公交线路规划检索监听者;
OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() {
public void onGetWalkingRouteResult(WalkingRouteResult result) {
//
}
public void onGetTransitRouteResult(TransitRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(RoutePlanDemo.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起终点或途经点地址有岐义,通过以下接口获取建议查询信息
//result.getSuggestAddrInfo()
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
//创建路线覆盖物来 显示路线
TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaidumap);
mBaidumap.setOnMarkerClickListener(overlay);
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
public void onGetDrivingRouteResult(DrivingRouteResult result) {
//
}
};
第三步,设置公交线路规划检索监听者;
mSearch.setOnGetRoutePlanResultListener(listener);
第四步,准备检索起、终点信息;
//创建节点
PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", "龙泽");
PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", "西单");
第五步,发起公交线路规划检索;
mSearch.transitSearch((new TransitRoutePlanOption())
.from(stNode)
.city("北京")
.to(enNode));
第六步,释放检索实例;
mSearch.destory();
公交线路规划结果的JSON结构图如下:
TransitRouteResult { //换乘路线结果
TaxiInfo: { //打车信息
int totalPrice ; //总价格
String desc; //打车描述信息
int distance; //距离
int duration; //时间
int perKMPrice; //单价
int startPrice; //起步价
}
List<TransitRouteLine> : [ //换乘方案
{
TaxiInfo taxitInfo, //打车信息
VehicleInfo vehicleInfo, //交通工具信息
RouteNode entrance, //路段入口
RouteNode exit, //路段出口
TransitRouteStepType, //路段类型
String instructions, //路段说明
int distance, //距离
int duration //时间
},
……
]
SuggestAddrInfo: { //建议起终点信息
List<PoiInfo> suggestStartNode; //建议起点
List<PoiInfo> suggestEndNode; //建议终点
List<List<PoiInfo>> suggestWpNode; //建议途经点
List<CityInfo> suggestStartCity; //建议起点城市
List<CityInfo> suggestEndCity; //建议终点城市
List<List<CityInfo>> suggestWpCity; //建议途经点城市
}
}
驾车线路规划:
第一步,创建驾车线路规划检索实例;
mSearch = RoutePlanSearch.newInstance();
第二步,创建驾车线路规划检索监听者;
OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() {
public void onGetWalkingRouteResult(WalkingRouteResult result) {
//获取步行线路规划结果
}
public void onGetTransitRouteResult(TransitRouteResult result) {
//获取公交换乘路径规划结果
}
public void onGetDrivingRouteResult(DrivingRouteResult result) {
//获取驾车线路规划结果
}
};
第三步,设置驾车线路规划检索监听者;
mSearch.setOnGetRoutePlanResultListener(listener);
第四步,准备检索起、终点信息;
PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", "龙泽");
PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", "西单");
第五步,发起驾车线路规划检索;
mSearch.drivingSearch((new DrivingRoutePlanOption())
.from(stNode)
.to(enNode));
第六步,释放检索实例;
mSearch.destory();
步行线路规划:
步行线路规划的方式与驾车线路规划方式类似,在此不再赘述。