百度地圖 實現檢索時不清除定位標註

導入SDK網上有很多此處不加贅述

注:最新版SDK沒有PoiOverlay類 
資源下載  http://download.csdn.net/detail/m18860232520/9692479

1.實現檢索 

  百度開發文檔 URL= http://lbsyun.baidu.com/index.php?title=androidsdk/guide/retrieval

部分如下:


    在POI檢索監聽方法中調用   onPoiResult()方法 即可添加檢索結果的標註

/**
 * 添加檢索 標註
 * @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. 百度定位 

(1).按照百度文檔進行配置權限
<!-- 這個權限用於進行網絡定位-->
<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>


(2).初始化LocationClient類
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();

public void onCreate() {
    mLocationClient = new LocationClient(getApplicationContext());
    mLocationClient.registerLocationListener( myListener );    //註冊監聽函數
}

(2).配置SDK定位參數
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);
}

(4).實現BDLocationListener接口
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);
}

如有不足請大家不要手下留情! 多多交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章