具体内容如下效果图:
1、布局文件,就是一个MapView和ListView,布局文件就是上面是一个百度地图的mapview,下面是一个显示周边位置的ListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <RelativeLayout android:id="@+id/plugin_camera_image_folder_headview" android:layout_width="fill_parent" android:layout_height="45dp" android:layout_marginBottom="3dp" android:background="#2B4058" android:gravity="center_vertical" > <TextView android:id="@+id/chat_publish_complete_cancle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:text="取消" android:textColor="#ffffff" android:textSize="16sp" /> <TextView android:id="@+id/chat_publish_complete_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="选择当前位置" android:textColor="#ffffff" android:textSize="20sp" /> <Button android:id="@+id/chat_publish_complete_publish" android:layout_width="55dp" android:layout_height="27dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:background="@drawable/chat_publish_bg" android:text="完成" android:textColor="#fff" android:textSize="16sp" /> </RelativeLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2" > <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> <Button android:id="@+id/request" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="40dp" android:layout_marginLeft="10dp" android:background="@drawable/custom_loc" /> </RelativeLayout> <ListView android:id="@+id/lv_location_nearby" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="3" /> </LinearLayout>2、初始化控件
<span style="white-space:pre"> </span>dataList = new ArrayList<PoiInfo>(); mMapView = (MapView) findViewById(R.id.bmapView); mCompleteButton = (Button) findViewById(R.id.chat_publish_complete_publish); mRequestLocation = (Button) findViewById(R.id.request); mListView = (ListView) findViewById(R.id.lv_location_nearby); checkPosition=0; adapter = new ListAdapter(0); mListView.setAdapter(adapter);
<span style="white-space:pre"> </span>//重新设置 checkPosition = 0; adapter.setCheckposition(0); mBaiduMap = mMapView.getMap(); mBaiduMap.clear(); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(17).build())); // 设置级别 // 定位初始化 mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类 mLocationClient.registerLocationListener(myListener);// 注册定位监听接口 /** * 设置定位参数 */ LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式 // option.setScanSpan(5000);// 设置发起定位请求的间隔时间,ms option.setNeedDeviceDirect(true);// 设置返回结果包含手机的方向 option.setOpenGps(true); option.setAddrType("all");// 返回的定位结果包含地址信息 option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02 option.setIsNeedAddress(true);// 返回的定位结果包含地址信息 mLocationClient.setLocOption(option); mLocationClient.start(); // 调用此方法开始定位4、定位SDK监听函数
public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null || mMapView == null) { return; } locType = location.getLocType(); Log.i("mybaidumap", "当前定位的返回值是:"+locType); longitude = location.getLongitude(); latitude = location.getLatitude(); if (location.hasRadius()) {// 判断是否有定位精度半径 radius = location.getRadius(); } if (locType == BDLocation.TypeNetWorkLocation) { addrStr = location.getAddrStr();// 获取反地理编码(文字描述的地址) Log.i("mybaidumap", "当前定位的地址是:"+addrStr); } direction = location.getDirection();// 获取手机方向,【0~360°】,手机上面正面朝北为0° province = location.getProvince();// 省份 city = location.getCity();// 城市 district = location.getDistrict();// 区县 LatLng ll = new LatLng(location.getLatitude(),location.getLongitude()); //将当前位置加入List里面 PoiInfo info = new PoiInfo(); info.address = location.getAddrStr(); info.city = location.getCity(); info.location = ll; info.name = location.getAddrStr(); dataList.add(info); adapter.notifyDataSetChanged(); Log.i("mybaidumap", "province是:"+province +" city是"+city +" 区县是: "+district); // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); //画标志 CoordinateConverter converter = new CoordinateConverter(); converter.coord(ll); converter.from(CoordinateConverter.CoordType.COMMON); LatLng convertLatLng = converter.convert(); OverlayOptions ooA = new MarkerOptions().position(ll).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_marka)); mCurrentMarker = (Marker) mBaiduMap.addOverlay(ooA); MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(convertLatLng, 17.0f); mBaiduMap.animateMapStatus(u); //画当前定位标志 MapStatusUpdate uc = MapStatusUpdateFactory.newLatLng(ll); mBaiduMap.animateMapStatus(uc); mMapView.showZoomControls(false); //poi 搜索周边 new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Looper.prepare(); searchNeayBy(); Looper.loop(); } }).start(); }
private void searchNeayBy(){ // POI初始化搜索模块,注册搜索事件监听 mPoiSearch = PoiSearch.newInstance(); mPoiSearch.setOnGetPoiSearchResultListener(this); PoiNearbySearchOption poiNearbySearchOption = new PoiNearbySearchOption(); poiNearbySearchOption.keyword("公司"); poiNearbySearchOption.location(new LatLng(latitude, longitude)); poiNearbySearchOption.radius(100); // 检索半径,单位是米 poiNearbySearchOption.pageCapacity(20); // 默认每页10条 mPoiSearch.searchNearby(poiNearbySearchOption); // 发起附近检索请求 }7、周边地理位置结果返回
@Override public void onGetPoiResult(PoiResult result) { // 获取POI检索结果 if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果 Toast.makeText(MainActivity.this, "未找到结果",Toast.LENGTH_LONG).show(); return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) {// 检索结果正常返回 // mBaiduMap.clear(); if(result != null){ if(result.getAllPoi()!= null && result.getAllPoi().size()>0){ dataList.addAll(result.getAllPoi()); // adapter.notifyDataSetChanged(); Message msg = new Message(); msg.what = 0; handler.sendMessage(msg); } } } }