浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

Android 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

POI检索简介

POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。

百度地图SDK提供三种类型的POI检索:城市内检索、周边检索和区域检索(即矩形范围检索)。下面将以POI城市内检索、周边检索 和 区域检索为例,向大家介绍如何使用检索服务。

POI城市内检索

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

下面将以 城市内检索 为例,向大家介绍如何使用检索服务。

1创建POI检索实例
mPoiSearch = PoiSearch.newInstance();
2创建POI检索监听者;
OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener(){  

    public void onGetPoiResult(PoiResult result){  
    //获取POI检索结果  
    }  

    public void onGetPoiDetailResult(PoiDetailResult result){  
    //获取Place详情页检索结果  
    }  
};

3设置POI检索监听者;
mPoiSearch.setOnGetPoiSearchResultListener(poiListener);
4发起检索请求;
mPoiSearch.searchInCity((new PoiCitySearchOption())  
    .city(“北京”)  
    .keyword(“美食”)  
    .pageNum(10));

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

周边搜索是一个圆形范围,适用于以某个位置为中心点,自定义检索半径值,搜索某个位置附近的POI。

搜索方式如下:

    mPoiSearch.searchNearby(new PoiNearbySearchOption()
	    .keyword("餐厅")
		.sortType(PoiSortType.distance_from_near_to_far)
		.location(center)
		.radius(radius)
		.pageNum(10));

POI区域检索(即矩形范围检索)

POI区域检索以“用户指定的左下角和右上角坐标的长方形区域”为检索范围的poi检索。

LatLng southwest = new LatLng( 39.92235, 116.380338 );

LatLng northeast = new LatLng( 39.947246, 116.414977);

LatLngBounds searchbound = new LatLngBounds.Builder()

.include(southwest).include(northeast)

.build();

mPoiSearch.searchInBound(new PoiBoundSearchOption().bound(searchbound)
       .keyword("餐厅"));

POI检索注意事项

1. POI检索时,city城市是必选项 。

2. 在传入city检索无结果时,会扩大检索范围,在全国进行检索。如有检索结果,不会直接返回,但会提示哪些城市有结果。 如下图,举例检索一个特殊的POI“东莞长安万科广场”,此poi不在“北京”城市内。返回“在东莞市找到结果“。

retrieveMatters02.png

3. 在传入city检索时,返回的结果太多,涉及多个城市,可以将扩大检索的城市list罗列,让用户点击选择,再针对选定城市进行二次检索(如果只有一个城市,后端直接进行二次检索)。

可以调用的接口在PoiResult类中:

        public List<CityInfo> getSuggestCityList() //返回城市列表页的结果数

其中CityInfo中包含城市名(city)和结果数(num)两个属性。

具体效果如百度地图

CityInfomap1.jpg

4. 自v3.6.1起, POI城市检索返回结果,新增门址类列表数据。

PoiSearch类的searchInCity(PoiCitySearchOption) 发起检索时返回的结果,增加门址类数据,PoiResult中新增getAllAddr()获取门址类列表,当isHasAddrInfo() 返回true时,除了原poi列表外,还包含门址结果。

同时,自v4.2.0起,searchInCity(PoiCitySearchOption) 新增接口isReturnAddr,用于设置是否返回门址类信息。

例如:在“北京”搜索“上地十街1号”,除返回包含“上地十街1号”的POI列表以外,还包括地址为“上地十街1号”的明确门址。使用接口isReturnAddr选择:1)poi列表 2)门址结果 (默认返回门址)

POI详情

百度地图SDK 还向广大开发者开放了 POI详情信息的检索 ,为开发者提供更多的LBS数据支持。POI详情服务提供查询单个POI的详情信息,比如好评、门店营业时间等。
POI详情检索的实现方式如下:

1发起检索
//uid是POI检索中获取的POI ID信息

mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(uid));

2设置结果监听
public void onGetPoiDetailResult(PoiDetailResult result) {

    if (result.error != SearchResult.ERRORNO.NO_ERROR) {

        //详情检索失败
        // result.error请参考SearchResult.ERRORNO 
    } else {

        //检索成功
    }
}

检索结果覆盖物

针对检索功能模块(POI检索、线路规划等),地图SDK还对外提供相应的覆盖物来快速展示结果信息。这些方法都是开源的,开发者可根据自己的实际去求来做个性化的定制。

利用检索结果覆盖物展示POI搜索结果的方式如下:

1构造自定义 PoiOverlay 类;
private class MyPoiOverlay extends PoiOverlay { 
 
    public MyPoiOverlay(BaiduMap baiduMap) {  
        super(baiduMap);  
    }  

    @Override  

    public boolean onPoiClick(int index) {  
        super.onPoiClick(index);  
        return true;  
    }  
}

2在POI检索回调接口中添加自定义的PoiOverlay;
public void onGetPoiResult(PoiResult result) {  

    if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {  
        return;  
    }  

    if (result.error == SearchResult.ERRORNO.NO_ERROR) {  

        mBaiduMap.clear();  

        //创建PoiOverlay  

        PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);  

        //设置overlay可以处理标注点击事件  

        mBaiduMap.setOnMarkerClickListener(overlay);  

        //设置PoiOverlay数据  

        overlay.setData(result);  

        //添加PoiOverlay到地图中  

        overlay.addToMap();  
        overlay.zoomToSpan();  
        return;  
    }  
}

运行结果如下:

basicmap6.png
自V3.6.0起,原内置覆盖物相关类的代码开源

覆盖物开源代码中提供了一些基于基础覆盖而组合而成的高级覆盖物,包括用于显示poi数据,规划路线,公交详情路线的覆盖物。

OverlayManager/ PoiOverlay/ IndoorPoiOverlay/ IndoorRouteOverlay/ TransitRouteOverlay/ WalkingRouteOverlay/ BikingRouteOverlay/ DrivingRouteOverlay/ BusLineOverlay/ MassTransitRouteOverlay/ 以上源码可在BaiduMapsApiDemo工程中找到。