百度地图最新版本sdk使用系列(六)-搜索周边美食,加油站等,并使用infoWindow展示
来源:互联网 发布:阿里云邮服务器地址 编辑:程序博客网 时间:2024/04/29 13:22
搜索周边的核心类是PoiSearch,核心回调接口是OnGetPoiSearchResultListener,
在其回调方法onGetPoiDetailResult(PoiDetailResult poiDetailResult)的参数
poiDetailResult中包含百度服务器端返回的搜索结果.
详细代码如下:
public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private MapView mMapView;// 地图视图 private BaiduMap mBaiduMap;// 地图控制器 setMapStatus(mMapStatusUpdate); private MapStatus mMapStatus;// 地图当前状态 private MapStatusUpdate mMapStatusUpdate;// 地图将要变化成的状态 private Button btn_location;// 定位button private Button btn_search;// 搜索button public LocationClient mLocationClient = null;// 定位的核心类:LocationClient public BDLocationListener myLocationListener = new MyLocationListener();// 定位的回调接口 private LatLng mCurrentLatLng;// 当前经纬度坐标 private PoiSearch mPoiSearch;// poi检索核心类 private MySearchResultListener mySearchResultListener;// poi检索核心接口 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 在使用SDK各组件之前初始化context信息,传入ApplicationContext // 该方法要在setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); init(); // 设置是否允许定位图层,只有先允许定位图层后设置定位数据才会生效 mBaiduMap.setMyLocationEnabled(true); btn_search.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { search(); } }); btn_location.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { location(); mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);// 开启卫星图 // 获得地图的当前状态的信息 mMapStatus = new MapStatus.Builder().zoom(15) .target(mCurrentLatLng).build(); // 设置地图将要变成的状态 mMapStatusUpdate = MapStatusUpdateFactory .newMapStatus(mMapStatus); mBaiduMap.setMapStatus(mMapStatusUpdate);// 设置地图的变化 } }); } private void init() { // 获得地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); // 获得地图控制器 mBaiduMap = mMapView.getMap();// MapView与BaiduMap一一对应 // 定位核心类 mLocationClient = new LocationClient(getApplicationContext()); // 定位回调接口 myLocationListener = new MyLocationListener(); // 定位按钮 btn_location = (Button) findViewById(R.id.location); //poi搜索核心类 mPoiSearch = PoiSearch.newInstance(); //poi搜索回调接口 mySearchResultListener = new MySearchResultListener(); // 搜索按钮 btn_search = (Button) findViewById(R.id.search); } /** * 定位 */ private void location() { // 设置mLocationClient数据,如是否打开GPS,使用LocationClientOption类. LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式 option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02 option.setScanSpan(3000);// 设置发起定位请求的间隔时间为5000ms option.setIsNeedAddress(true);// 返回的定位结果包含地址信息 option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向 option.setOpenGps(true);// 打开GPS mLocationClient.setLocOption(option); mLocationClient.registerLocationListener(myLocationListener); } public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // mapView 销毁后不在处理新接收的位置 if (location == null || mMapView == null) return; // 获取服务器回传的当前经纬度 mCurrentLatLng = new LatLng(location.getLatitude(), location.getLongitude()); // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius())// 获取定位精度 .latitude(location.getLatitude())// 获取纬度坐标 .longitude(location.getLongitude())// 获取精度坐标 .build(); mBaiduMap.setMyLocationData(locData);// 设置定位数据 } } /** * poi检索(圆形) */ private void search() { mPoiSearch.setOnGetPoiSearchResultListener(mySearchResultListener); // PoiSearch需要设置相关参数,比如关键字,距离等 PoiNearbySearchOption pnso = new PoiNearbySearchOption(); pnso.keyword("美食"); pnso.location(mCurrentLatLng); pnso.radius(1000); mPoiSearch.searchNearby(pnso); } public class MySearchResultListener implements OnGetPoiSearchResultListener { @Override public void onGetPoiDetailResult(final PoiDetailResult poiDetailResult) { if (poiDetailResult.error != SearchResult.ERRORNO.NO_ERROR) { // 检索失败 } else { // 点击marker showInfoWindow mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() { private BitmapDescriptor descriptor; @Override public boolean onMarkerClick(Marker arg0) { // 设置弹窗 (View arg0, LatLng arg1, int arg2) y 偏移量 , Button btn = new Button(getApplicationContext()); btn.setBackgroundColor(0xAA00FF00); btn.setText(poiDetailResult.getName()); // btn 变成 View 图片 descriptor = BitmapDescriptorFactory.fromView(btn); InfoWindow mInfoWindow = new InfoWindow(descriptor, poiDetailResult.getLocation(), -60, new OnInfoWindowClickListener() { public void onInfoWindowClick() { // 点击infoWindow可以触发二次检索,跳转界面 // 隐藏弹窗! mBaiduMap.hideInfoWindow(); } }); mBaiduMap.showInfoWindow(mInfoWindow); return false; } }); } } @Override public void onGetPoiResult(PoiResult poiResult) { // 首先判断检索结果是否有错,在判断检索结果是否为空 if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) { if (poiResult != null) { mBaiduMap.clear(); // 绑定Overlay MyPoiOverlay poiOverlay = new MyPoiOverlay(mBaiduMap); mBaiduMap.setOnMarkerClickListener(poiOverlay); // 设置数据到overlay poiOverlay.setData(poiResult); poiOverlay.addToMap(); // 缩放地图,使所有Overlay都在合适的视野内 注: 该方法只对Marker类型的overlay有效 poiOverlay.zoomToSpan(); } } else { Toast.makeText(getApplicationContext(), "无结果", Toast.LENGTH_SHORT).show(); } } } // 自定义PoiOverlay class MyPoiOverlay extends PoiOverlay { public MyPoiOverlay(BaiduMap baiduMap) { super(baiduMap); } @Override public boolean onPoiClick(int index) { super.onPoiClick(index); PoiInfo poi = getPoiResult().getAllPoi().get(index); mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()) .poiUid(poi.uid)); return super.onPoiClick(index); } } @Override protected void onStart() { location(); mLocationClient.start();// 开启定位请求 super.onStart(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onPause() { mLocationClient.stop();// 停止定位 mMapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mMapView.onDestroy(); super.onDestroy(); }}
**此demo已上传csdn,下载地址为:
http://download.csdn.net/detail/csdn1027719307/8700107**
0 0
- 百度地图最新版本sdk使用系列(六)-搜索周边美食,加油站等,并使用infoWindow展示
- 百度地图最新版本sdk使用系列(七)-实现定位,poi搜索和导航
- 百度地图最新版本sdk使用系列(四)-开启卫星地图,实时交通图,实现标注覆盖物等功能
- 百度地图最新版本sdk使用系列(八)-获取当前地图中心点的经纬度并计算与当前位置的距离
- 百度地图最新版本sdk使用系列(二)-修改百度地图的默认中心位置
- 百度地图最新版本sdk使用系列(三)-修改百度地图旋转(平视,俯视),缩放
- Android demo-->百度地图sdk,AS版本(三)添加覆盖物,InfoWindow的使用
- 百度地图最新版本sdk使用系列(一)-初识 hello baidumap
- 百度地图最新版本sdk使用系列(五)-定位功能的实现
- AndroidStudio 中使用 百度地图 <五> 百度地图的搜索附近的美食,公交站台等,个人摘要
- Android如何使用最新版本百度地图地图 SDK v4.2.1(一)的API
- 微信小程序---地图使用(定位/展示/周边信息展示/poi搜索)
- 百度地图3.2.0InfoWindow使用总结
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Netcat学习稿
- MongoDB,使用C#实现2d地理位置检索
- nc uap应用外部项目的jar文件报错
- Linux设备模型(4)_sysfs
- 浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
- 百度地图最新版本sdk使用系列(六)-搜索周边美食,加油站等,并使用infoWindow展示
- 【AJAX】XmlHttpRequest对象详解(API)
- OC规范-摘自COcoaChina
- Nslookup学习稿
- 使用symbolicatecrash分析crash文件
- 瀑布流简单例子
- Dynamics CRM 客户端程序开发:常用工具介绍之Dynamics XRM Tools
- 蓝屏错误信息收集
- AD9中如何让KEEPOUT层或者相关的层显示的时候显示在顶层