浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
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(10));



5释放检索实例
mPoiSearch.destroy();

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

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

注:您可以在 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)
        .keyword("餐厅")
        .pageNum(10));

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("餐厅"));


检索结果覆盖物

开发者可以使用自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();
    }  
}

效果如图:
Screenshot_1543388500_1.png

  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消