百度地图加强_搜索_PoiSearchInbounds(矩形区域内检索信息)
搜索步骤: 1、MKSearch对象创建,并调用init进行初始化,设置好监听MKSearchListener 2、调用MKSearch对应的搜索方法,然后在MKSearchListener中相应的方法中,实现逻辑 |
搜索的两个核心类
1、MKSearch 搜索服务. 用于位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索 ①public boolean init(BMapManager bmapMan, MKSearchListener listener) 初使化 ②搜索: public int poiSearchInbounds(java.lang.String key, GeoPoint ptLB, GeoPoint ptRT) 根据范围和检索词发起范围检索.(矩形区域搜索)
public int poiSearchNearBy(java.lang.String key, GeoPoint pt, int radius) 根据中心点、半径与检索词发起周边检索. 自1.1版本之后支持 (圆形搜索,以一个中心点)
public int poiSearchInCity(java.lang.String city, java.lang.String key) 城市poi检索.
2、MKSearchListener 搜索结果通知接口。 该接口返回poi搜索,公交搜索,驾乘路线,步行路线结果 |
一、PoiSearchInbounds() 1、public class MKSearch ① 矩形区域类搜索:public int poiSearchInbounds(java.lang.String key , GeoPoint ptLB, GeoPoint ptRT) 根据范围和检索词发起范围检索. 异步函数,返回结果在MKSearchListener里的onGetPoiResult方法通知 key - 关键词 ptLB - 地理坐标,范围的左下角ptRT - 地理坐标,范围的右上角2、public interface MKSearchListener result - 搜索结果type - 返回结果类型: 当预设城市有搜索结果时,type为 MKSearch.TYPE_POI_LIST,在预设城市没有搜索结果,但在其他城市找到时返回其他城市列表, type为 MKSearch.TYPE_CITY_LISTiError - 错误号,0表示正确返回3、public class MKPoiResult poi搜索结果类。 由MKSearchResultNotifier的onGetPoiResult方法获得 public java.util.ArrayList<MKPoiInfo> getAllPoi() 4、public class PoiOverlay poi内置overlay . public void setData(java.util.ArrayList<MKPoiInfo> data) 设置poi 数据 data - : poi 信息集合 |
核心代码: ①PoiSearchInboundsDemo.java package cn.zengfansheng.mybaidumap.search;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.widget.Toast;
import cn.zengfansheng.mybaidumap.BaseActivity;
import cn.zengfansheng.mybaidumap.BaseMKMapViewListener;
import cn.zengfansheng.mybaidumap.BaseMkSearchListener;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.PoiOverlay;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.platform.comapi.basestruct.GeoPoint;
/**
* 在矩形区域内检索信息
*/
public class PoiSearchInboundsDemo extends BaseActivity { private MKSearch mkSearch;// 搜索服务类
private MKSearchListener mkSearchListener;// 搜索结果通知类 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
searchInBounds();
}
// NOTES===========================1、步骤===========================
// 1、利用MKSearch类搜索,MKSearchListener接口返回搜索的结果
// 2、然后用一个Overlay子类来展示 // NOTES===========================2、 在矩形区域内检索信息======================
/**
* 在矩形区域内检索信息
*/
private void searchInBounds() {
mkSearch = new MKSearch();
// 1、初始化
mkSearchListener = new MyMkSearchListener();
mkSearch.init(mBMapMan, mkSearchListener); // 2、矩形区域内按照key搜索兴趣点
GeoPoint ptLB = new GeoPoint((int) (40.035 * 1E6), (int) (116.296 * 1E6));
GeoPoint ptRT = new GeoPoint((int) (40.051 * 1E6), (int) (116.303 * 1E6));
mkSearch.poiSearchInbounds("加油站", ptLB, ptRT);
}
// NOTES===========================3、搜索服务类===========================
/**
* 搜索服务类,保存搜索结果的类(不实现接口,利用适配器模式,提供默认实现)
*/
private class MyMkSearchListener extends BaseMkSearchListener {
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
if (iError == 0 && result != null) {// 错误号,0表示正确返回 //搜索结果由PoiOverlay来展示
// 1、获取MapView的Overlay集合
List<Overlay> overlays = mMapView.getOverlays(); // 2、添加到集合中
PoiOverlay poiOverlay = new PoiOverlay(
PoiSearchInboundsDemo.this, mMapView);
overlays.add(poiOverlay); // 2-1、设置数据,result中封装的数据设置给Overlay的子类
ArrayList<MKPoiInfo> data = result.getAllPoi();
poiOverlay.setData(data);
mapController.enableClick(true);
MyMKMapViewListener myMKMapViewListener = new MyMKMapViewListener();
mMapView.regMapViewListener(mBMapMan, myMKMapViewListener);
// 3、刷新界面
mMapView.refresh();
} else {
Toast.makeText(getApplicationContext(), "无结果", 0).show();
}
}
}
// NOTES===========================4、MapView监听类===========================
/**
* MapView监听类,监听兴趣点被点击事件
*/
private class MyMKMapViewListener extends BaseMKMapViewListener {
@Override
public void onClickMapPoi(MapPoi mapPoiInfo) {
super.onClickMapPoi(mapPoiInfo);
Toast.makeText(getApplicationContext(), mapPoiInfo.strText, 0)
.show();
}
}
} |
② 适配器模式:搜索完毕后,调用的接口
MkSearchListener
BaseMkSearchListener.java
|
③ MapView的接口
MKMapViewListener
BaseMKMapViewListener.java
|
结果: |