poi(point of interest),即“兴趣点”。在地理信息系统中,一个poi可以是一栋房子、一个景点、一个邮筒或者一个公交站等。
百度地图sdk提供三种类型的poi检索:城市内检索、周边检索和区域检索(即矩形区域检索)。下面分别对三种poi检索服务的使用方法作说明。
关键字检索适用于在某个城市内搜索某个名称相关的poi,例如:查找“北京市”的“小吃”。
示例如下:
mpoisearch =poisearch.newinstance();
ongetpoisearchresultlistener listener =newongetpoisearchresultlistener(){@overridepublicvoidongetpoiresult(poiresult poiresult){}@overridepublicvoidongetpoidetailresult(poidetailsearchresult poidetailsearchresult){}@overridepublicvoidongetpoiindoorresult(poiindoorresult poiindoorresult){}//废弃@overridepublicvoidongetpoidetailresult(poidetailresult poidetailresult){}};
mpoisearch.setongetpoisearchresultlistener(listener);
/*** poiciysearchoption 设置检索属性* city 检索城市* keyword 检索内容关键字* pagenum 分页页码*/mpoisearch.searchincity(newpoicitysearchoption().city("北京")//必填.keyword("美食")//必填.pagenum(0));
mpoisearch.destroy();
除了示例代码中描述的必填的字段,其他常用字段的介绍如下表所示。
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方法获取。
publiclist<cityinfo>getsuggestcitylist()
cityinfo包含城市名和该城市内检索结果的数量等信息。开发者可以通过该列表进行二次请求。
3. 开发者可以通过设置poicitysearchoption对象citylimit字段为false(默认为true)来扩大检索范围,当city内检索无结果时,会将检索范围扩大至全国。
效果如图:
开发者可以针对poicitysearch检索到的结果进行进一步的检索以获取详细信息。
示例如下:
发起检索:
//poiinfo 检索到的第一条信息poiinfo poi = mpoiresult.getallpoi().get(0);//通过第一条检索信息对应的uid发起详细信息检索mpoisearch.searchpoidetail((newpoidetailsearchoption()).poiuids(poi.uid));// uid的集合,最多可以传入10个uid,多个uid之间用英文逗号分隔。
在ongetpoidetailresult(poidetailsearchresult poidetailsearchresult)回调方法中处理。
ongetpoisearchresultlistener listener =newongetpoisearchresultlistener(){......@overridepublicvoidongetpoidetailresult(poidetailsearchresult poidetailsearchresult){}};
注意:自v5.2.0起,poi详情检索的回调方法ongetpoidetailresult(poidetailresult poidetailresult)方法已废弃,请使用ongetpoidetailresult(poidetailsearchresult poidetailsearchresult)方法代替,在检索时检索参数必须使用poiuids(poi.uid)。
周边检索是在一个圆形范围内的poi检索,适用于以某个位置为中心点,自定义搜索半径,搜索某个位置附近的poi。
设置searchoption,发起周边检索请求示例如下:
/*** 以天安门为中心,搜索半径100米以内的餐厅*/mpoisearch.searchnearby(newpoinearbysearchoption().location(newlatlng(39.915446,116.403869)).radius(100);//支持多个关键字并集检索,不同关键字间以$符号分隔,最多支持10个关键字检索。如:”银行$酒店”.keyword("餐厅").pagenum(0));
效果如图:
poi区域检索,即“在由开发者指定的西南角和东北角组成的矩形区域内的poi检索”。
设置poiboundssearchoptions,发起检索请求示例如下:
/*** 设置矩形检索区域*/latlngbounds searchbounds =newlatlngbounds.builder().include(newlatlng(39.92235,116.380338)).include(newlatlng(39.947246,116.414977)).build();/*** 在searchbounds区域内检索餐厅*/mpoisearch.searchinbound(newpoiboundsearchoption().bound(searchbounds).keyword("餐厅"));
效果如图:
开发者可以使用自v3.6.0起开源的覆盖物源代码来完成poi检索结果的展示。
示例如下:
@overridepublicvoidongetpoiresult(poiresult poiresult){if(poiresult.error==searchresult.errorno.no_error){mbaidumap.clear();//创建poioverlay对象poioverlay poioverlay =newpoioverlay(mbaidumap);//设置poi检索数据poioverlay.setdata(poiresult);//将poioverlay添加至地图并缩放至合适级别poioverlay.addtomap();poioverlay.zoomtospan();}}
效果如图:
注意:android 7.5.2 起新增adcode字段,isextendadcode字段设为true后,可以在返回结果中通过adcode字段查询行政区划编码。
上一篇
下一篇
本篇文章对您是否有帮助?