百度地图最新版本sdk使用系列(六)-搜索周边美食,加油站等,并使用infoWindow展示
2015-05-12 15:04
501 查看
搜索周边的核心类是PoiSearch,核心回调接口是OnGetPoiSearchResultListener,
在其回调方法onGetPoiDetailResult(PoiDetailResult poiDetailResult)的参数
poiDetailResult中包含百度服务器端返回的搜索结果.
详细代码如下:
**此demo已上传csdn,下载地址为:
http://download.csdn.net/detail/csdn1027719307/8700107**
在其回调方法onGetPoiDetailResult(PoiDetailResult poiDetailResult)的参数
poiDetailResult中包含百度服务器端返回的搜索结果.
详细代码如下:
[code]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**
相关文章推荐
- 百度地图最新版本sdk使用系列(七)-实现定位,poi搜索和导航
- 百度地图最新版本sdk使用系列(一)-初识 hello baidumap
- 百度地图最新版本sdk使用系列(二)-修改百度地图的默认中心位置
- 百度地图最新版本sdk使用系列(三)-修改百度地图旋转(平视,俯视),缩放
- 百度地图最新版本sdk使用系列(四)-开启卫星地图,实时交通图,实现标注覆盖物等功能
- 百度地图最新版本sdk使用系列(五)-定位功能的实现
- 百度地图最新版本sdk使用系列(八)-获取当前地图中心点的经纬度并计算与当前位置的距离
- android使用最新版百度地图实现城市切换和城市poi搜索
- 百度地图植入android应用系列教程三实现百度地图上的覆盖物Marker与InfoWindow的使用
- Android如何使用最新版本百度地图地图 SDK v4.2.1(一)的API
- AndroidStudio 中使用 百度地图 <五> 百度地图的搜索附近的美食,公交站台等,个人摘要
- 微信小程序---地图使用(定位/展示/周边信息展示/poi搜索)
- JFreeChart最新版本1.0.8a的研究系列——JFreeChart的使用
- 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d-2.0-x-2.0.2使用资源加载策略 推荐
- 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d­2.0­x­2.0.2使用新资源加载策略!不再沿用-hd、-ipad、-ipadhd添加后缀方式
- 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d-2.0-x-2.0.2使用资源加载策略
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- SVN使用:用TortoiseSVN查看Log 无法显示最新的版本和Log信息问题