浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
POI检索
下载开发文档
POI检索简介

POI(Point of Interest),即“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个景点、一个邮筒或者一个公交站等。
百度地图SDK提供三种类型的POI检索:城市内检索、周边检索和区域检索(即矩形区域检索)。下面分别对三种POI检索服务的使用方法作说明。

POI城市内检索(关键字检索)

关键字检索适用于在某个城市内搜索某个名称相关的POI,例如:查找“北京市”的“小吃”。
示例如下:

1. 创建POI检索实例
mPoiSearch = PoiSearch.newInstance();
2. 创建POI检索监听器
OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult poiResult) {
}
@Override
public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {
}
@Override
public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
}
//废弃
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
}
};
3. 设置检索监听器
mPoiSearch.setOnGetPoiSearchResultListener(listener);
4. 设置PoiCitySearchOption,发起检索请求
/**
* PoiCiySearchOption 设置检索属性
* city 检索城市
* keyword 检索内容关键字
* pageNum 分页页码
*/
mPoiSearch.searchInCity(new PoiCitySearchOption()
.city("北京") //必填
.keyword("美食") //必填
.pageNum(0));
5. 释放检索实例
mPoiSearch.destroy();
PoiCitySearchOption属性详解

除了示例代码中描述的必填的字段,其他常用字段的介绍如下表所示。

pageNum分页编号,默认返回第0页结果
pageCapacity设置每页容量,默认为10条结果
tag设置检索分类,如“美食”
scope值为1 或 空,返回基本信息
值为2,返回POI详细信息
cityLimit是否限制检索区域为城市内
poiFilter设置检索过滤条件,scope为2时有效
isExtendAdcode是否召回行政区划编码,默认为true

注:您可以在Web服务API页面查看PoiSearch请求参数和返回参数的详细内容。

注意事项:

1. POI检索时,city是必填项。
2. 当输入的关键字在该city检索无结果,而在其他城市检索到时,SDK会返回一个CityInfo对象列表,该列表可以通过PoiResult类getSuggestCityList方法获取。

public List<CityInfo> getSuggestCityList()

CityInfo包含城市名和该城市内检索结果的数量等信息。开发者可以通过该列表进行二次请求。
3. 开发者可以通过设置PoiCitySearchOption对象cityLimit字段为false(默认为true)来扩大检索范围,当city内检索无结果时,会将检索范围扩大至全国。
效果如图:

示例
POI详情

开发者可以针对PoiCitySearch检索到的结果进行进一步的检索以获取详细信息。
示例如下:
发起检索:

//PoiInfo 检索到的第一条信息
PoiInfo poi = mPoiResult.getAllPoi().get(0);
//通过第一条检索信息对应的uid发起详细信息检索
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())
.poiUids(poi.uid)); // uid的集合,最多可以传入10个uid,多个uid之间用英文逗号分隔。

在onGetPoiDetailResult(PoiDetailSearchResult PoiDetailSearchResult)回调方法中处理。

OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
......
@Override
public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {
}
};

注意:自V5.2.0起,Poi详情检索的回调方法onGetPoiDetailResult(PoiDetailResult poiDetailResult)方法已废弃,请使用onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult)方法代替,在检索时检索参数必须使用poiUids(poi.uid)。

POI周边检索

周边检索是在一个圆形范围内的POI检索,适用于以某个位置为中心点,自定义搜索半径,搜索某个位置附近的POI。
设置SearchOption,发起周边检索请求示例如下:

/**
* 以天安门为中心,搜索半径100米以内的餐厅
*/
mPoiSearch.searchNearby(new PoiNearbySearchOption()
.location(new LatLng(39.915446, 116.403869))
.radius(100);
//支持多个关键字并集检索,不同关键字间以$符号分隔,最多支持10个关键字检索。如:”银行$酒店”
.keyword("餐厅")
.pageNum(0));

效果如图:

POI周边检索
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("餐厅"));

效果如图:

POI区域检索
检索结果覆盖物

开发者可以使用自V3.6.0起开源的覆盖物源代码来完成Poi检索结果的展示。
示例如下:

@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {
mBaiduMap.clear();
//创建PoiOverlay对象
PoiOverlay poiOverlay = new PoiOverlay(mBaiduMap);
//设置Poi检索数据
poiOverlay.setData(poiResult);
//将poiOverlay添加至地图并缩放至合适级别
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
}
}

效果如图:

检索结果覆盖物

注意:Android 7.5.2 起新增adCode字段,IsExtendAdcode字段设为true后,可以在返回结果中通过adCode字段查询行政区划编码。

上一篇

周边运力

下一篇

AOI检索

本篇文章对您是否有帮助?