百度地图SDK提供三种类型的POI检索:城市内检索、周边检索和区域检索(即矩形区域检索)
跟搜索有关的类
PoiSearch 它内部有几个方法
searchInCity(PoiCitySearchOptionoption)
城市内检索 V4.3.2版本后(包含V4.3.2版本),该方法要在Listener设置方法 setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener) 之后执行,否则会在某些场景出现拿不到回调结果的情况
searchInBound(PoiBoundSearchOptionoption)
范围内检索 V4.3.2版本后(包含V4.3.2版本),该方法要在Listener设置方法 setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener) 之后执行,否则会在某些场景出现拿不到回调结果的情况
searchNearby(PoiNearbySearchOptionoption)
周边检索 V4.3.2版本后(包含V4.3.2版本),该方法要在Listener设置方法setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener)之后执行,否则会在某些场景出现拿不到回调结果的情况
booleansearchPoiIndoor(PoiIndoorOptionoption)
POI 室内检索 V4.3.2版本后(包含V4.3.2版本),该方法要在Listener设置方法 setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener) 之后执行,否则会在某些场景出现拿不到回调结果的情况
经过上面四种检索之后
searchPoiDetail(PoiDetailSearchOptionoption)
POI 详情检索 V4.3.2版本后(包含V4.3.2版本),该方法要在Listener设置方法 setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener) 之后执行,否则会在某些场景出现拿不到回调结果的情况
设置检索监听
@Override // 查询结果回调
public void onGetPoiResult(PoiResult poiResult) {
Log.e(TAG,"onGetPoiResult");
}
@Override //被onGetPoiDetailResult替代
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
Log.e(TAG,"onGetPoiDetailResult");
}
@Override //用于返回详细检索结果
public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {
Log.e(TAG,"onGetPoiDetailResult");
}
@Override //室内检索结果回调
public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
Log.e(TAG,"onGetPoiIndoorResult");
}
mPoiSearch.searchInCity(new PoiCitySearchOption()
.city("杭州")//必填
.keyword("工商银行")//必填
.pageNum(10));
城市检索
我们进行城市检索,会回调到onGetPoiResult()里面
@Override // 查询结果回调
public void onGetPoiResult(PoiResult poiResult) {
List poiInfos=poiResult.getAllPoi();
PoiInfo poi = poiResult.getAllPoi().get(0);
//通过第一条检索信息对应的uid发起详细信息检索
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(poi.uid));
Log.e(TAG,"onGetPoiResult");
}
然后我们可以在里面对查询的到某一条信息进行详情信息检索,这次查到的信息会回调到
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
Log.e(TAG,"onGetPoiDetailResult");
}
比如我这里查询到的第一条数据是
然后详细信息
POI周边检索
周边检索是在一个圆形范围内的POI检索,适用于以某个位置为中心点,自定义搜索半径,搜索某个位置附近的POI。
设置SearchOption,发起周边检索请求示例如下:
mPoiSearch.searchNearby(new PoiNearbySearchOption() .location(new LatLng(39.915446, 116.403869)) .radius(100) .keyword("餐厅") );
这里的radius就是设置以搜索点位圆心,的半径长度,这里半径长度是100米
我们一般是已自己所在位置为圆心,搜索附近5公里以内的商家
POI区域检索(矩形区域检索)
POI区域检索,即“在由开发者指定的西南角和东北角组成的矩形区域内的POI检索”。
设置好西南角和东北角的坐标,形成一个矩形,查询矩形内符合条件的商家
设置PoiBoundsSearchOptions,发起检索请求示例如下:
/**
* 设置矩形检索区域
*/LatLngBounds searchBounds = new LatLngBounds.Builder()
.include(new LatLng( 39.92235, 116.380338 ))
.include(new LatLng( 39.947246, 116.414977))
.build();/**
* 在searchBounds区域内检索餐厅
*/mPoiSearch.searchInBound(new PoiBoundSearchOption() .bound(searchBounds) .keyword("餐厅"));