導入SDK網上有很多此處不加贅述
1.實現檢索
/**
* 添加檢索 標註
* @param result
*/
public void onPoiResult(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;
}
}
2. 百度定位
<!-- 這個權限用於進行網絡定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 這個權限用於訪問GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 獲取運營商信息,用於支持提供運營商信息相關的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用於讀取手機當前的狀態-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 寫入擴展存儲,向擴展卡寫入數據,用於寫入離線定位數據-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 訪問網絡,網絡定位需要上網-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡讀取權限,用戶寫入離線定位數據-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
public void onCreate() {
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener( myListener ); //註冊監聽函數
}
private void initLocation() { LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy );//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備 option.setCoorType("bd09ll");//可選,默認gcj02,設置返回的定位結果座標系 int span = 2000; option.setScanSpan(span);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大於等於1000ms纔是有效的 option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要 option.setOpenGps(true);//可選,默認false,設置是否使用gps option.setLocationNotify(true);//可選,默認false,設置是否當GPS有效時按照1S/1次頻率輸出GPS結果 option.setIsNeedLocationDescribe(true);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe裏得到,結果類似於“在北京天安門附近” option.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList裏得到 option.setIgnoreKillProcess(false);//可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死 option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集 option.setEnableSimulateGps(false);//可選,默認false,設置是否需要過濾GPS仿真結果,默認需要 mLocationClient.setLocOption(option); }
public class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation bdLocation) {
setLocation(location);
}}
(5).接口中調用方法/**
* 設置定位信息 定位圖層 定位數據 檢索時定位覆蓋物不會消失
* @param location
*/
private void setLocation(BDLocation location) {
mBaiduMap = mMapView.getMap();
// 開啓定位圖層
mBaiduMap.setMyLocationEnabled(true);
// 構造定位數據
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此處設置開發者獲取到的方向信息,順時針0-360
.direction(0).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
// 設置定位數據
mBaiduMap.setMyLocationData(locData);
// 設置定位圖層的配置(定位模式,是否允許方向信息,用戶自定義定位圖標)
BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
.fromResource(R.mipmap.icon_mark);
setDingWei(location);
MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true, mCurrentMarker);
mBaiduMap.setMyLocationConfigeration(config);
// 當不需要定位圖層時關閉定位圖層
// mBaiduMap.setMyLocationEnabled(false);
//關閉定位監聽
mLocationClient.stop();
}
/**
* 設置定位顯示在當前位置以及放大級別(3—18)
*
* @param location
*/
private void setDingWei(BDLocation location) {
LatLng point = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate mapStatus = MapStatusUpdateFactory.newLatLngZoom(point, 14);
mBaiduMap.setMapStatus(mapStatus);
}
如有不足請大家不要手下留情! 多多交流