Android百度地图POI检索

本文介绍了如何在Android应用中使用百度地图SDK进行POI(兴趣点)检索,包括城市内检索、周边检索和矩形区域检索。通过设置不同检索选项,可以获取特定类型、数量和详细程度的POI信息。此外,还提供了处理检索结果和展示覆盖物的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度地图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(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包含城市名和该城市内检索结果的数量等信息。开发者可以通过该列表进行二次请求。
5. 开发者可以通过设置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();
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值