高德地圖 定位等


1、定位功能:

    <com.amap.api.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

  

    AMap aMap;
    private Marker locationMarker;
    //聲明AMapLocationClient類對象
    public AMapLocationClient mLocationClient = null;
    //聲明定位回調監聽器
    public AMapLocationListener mLocationListener = new AMapLocationListener() {
        @RequiresApi(api = Build.VERSION_CODES.N)
        @Override
        public void onLocationChanged(AMapLocation aMapLocation) {
            if (aMapLocation != null) {
                if (aMapLocation.getErrorCode() == 0) {

                    //取出經緯度
                    LatLng latLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude());

                    //添加Marker顯示定位位置
                    if (locationMarker == null) {
                        //如果是空的添加一個新的,icon方法就是設置定位圖標,可以自定義
                        locationMarker = aMap.addMarker(new MarkerOptions()
                                .position(latLng)
                                .icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_adress)));
                    } else {
                        //已經添加過了,修改位置即可
                        locationMarker.setPosition(latLng);
                    }

                    //然后可以移動到定位點,使用animateCamera就有動畫效果
                    aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
                    aMapLocation.getProvince();//省信息
                    locateCity = aMapLocation.getCity();//城市信息

                    mLocationClient.stopLocation();//停止定位后,本地定位服務並不會被銷毀
                } else {
                    //定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因,errInfo是錯誤信息,詳見錯誤碼表。
                    Log.e("AmapError", "location Error, ErrCode:"
                            + aMapLocation.getErrorCode() + ", errInfo:"
                            + aMapLocation.getErrorInfo());
                }
            }
        }
    };
    //初始化定位
    //聲明AMapLocationClientOption對象
    public AMapLocationClientOption mLocationOption = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //獲取權限
        if (Build.VERSION.SDK_INT >= 23
                && getApplicationInfo().targetSdkVersion >= 23) {
            if (isNeedCheck) {
                checkPermissions(PERMISSIONS_STORAGE);
            }
        }
        mMapView.onCreate(savedInstanceState);
        initMap();
    }

    private void initMap() {

        if (aMap == null) {
            aMap = mMapView.getMap();
        }

        mLocationClient = new AMapLocationClient(getApplicationContext());
        //設置定位回調監聽
        mLocationClient.setLocationListener(mLocationListener);

        //初始化AMapLocationClientOption對象
        mLocationOption = new AMapLocationClientOption();

        //設置定位模式為AMapLocationMode.Hight_Accuracy,高精度模式。
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

        //設置定位間隔,單位毫秒,默認為2000ms,最低1000ms。
        mLocationOption.setInterval(1000);

        //設置是否返回地址信息(默認返回地址信息)
        mLocationOption.setNeedAddress(true);

        //設置是否強制刷新WIFI,默認為true,強制刷新。
        mLocationOption.setWifiActiveScan(false);

        //設置是否允許模擬位置,默認為true,允許模擬位置
        mLocationOption.setMockEnable(false);

        //單位是毫秒,默認30000毫秒,建議超時時間不要低於8000毫秒。
        mLocationOption.setHttpTimeOut(20000);

        //關閉緩存機制
        mLocationOption.setLocationCacheEnable(false);

        //給定位客戶端對象設置定位參數
        mLocationClient.setLocationOption(mLocationOption);
        //啟動定位
        mLocationClient.startLocation();
    }

  

 2、高德地圖知識點:

CameraUpdateFactory  //創建CameraUpdate對象,用來改變地圖形態

調用AMap.animateCamera(CameraUpdate) 或AMap.moveCamera(CameraUpdate)

static CameraUpdate newLatLng(LatLng latLng)
設置地圖的中心點。

CameraUpdateFactory.newLatLng(new LatLng(36.060553, 120.38329)

static CameraUpdate zoomTo(float zoom)
設置地圖縮放級別。

moveCamera(CameraUpdate update)按照傳入的CameraUpdate參數改變地圖狀態。(直接改變狀態,沒有動畫效果)

參數:
update - 地圖狀態將要發生的變化

類 LatLng:存儲經緯度坐標值的類,單位角度。

LatLng(double latitude, double longitude)   //latitude緯度 (垂直方向),longitude經度 (水平方向)
使用傳入的經緯度構造LatLng 對象,一對經緯度值代表地球上一個地點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM