안드로이드가 고덕지도를 집적한 것에 대해서...지도 보이기

6833 단어 지도.
2016년에 지도에 Marker를 추가하고 점선으로 좌표와 지리 울타리를 기록해야 했던 프로젝트가 있었는데 그때도 처음 만들어서 좀 멍했지만 시간이 지나면서 간단했다.최근 프로젝트에서 지도를 사용했습니다. 이 기회를 빌려 이전의 논리를 재구성했습니다. 그 전에 고덕지도를 사용했는데 개인적인 느낌은 괜찮았습니다. 어느 정도보다 많이 좋아졌습니다. 코딩을 시작하기 전에 공식 데모를 다운로드해서 효과를 보고 문서를 참고하세요.
자, 오늘 우리 함께 고덕 3D 지도 코드의 통합을 완성하고 AppKey를 신청합니다. 고덕지도 오픈 플랫폼의 컨트롤러에 가서 등록하세요.
현재 고덕 지도 통합은 안드로이드 스튜디오 의존을 지원하고 있습니다. 너무 간단하지 마세요. 여기 제가 통합한 것은 3D 맵, 포지셔닝, 검색입니다.
dependencies { 
    implementation 'com.amap.api:3dmap:latest.integration'
    implementation 'com.amap.api:search:latest.integration'
    implementation 'com.amap.api:location:latest.integration'
}

권한 선언













APPKey

 
 

코드를 훑기 시작하고 먼저 인터페이스를 초기화합니다.
@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map_layout);
        mapView = findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        aMap = mapView.getMap();
        aMap.getUiSettings().setScaleControlsEnabled(true);//     
        aMap.getUiSettings().setZoomControlsEnabled(false);//    
        aMap.moveCamera(CameraUpdateFactory.zoomTo(ZOOM_MAP));
        aMap.setMyLocationEnabled(true);//    
        aMap.setLocationSource(this);//        (           )
        initLocationOption();//         
    }

초기화 위치 매개 변수: 위치는 세 가지로 나뉜다: HightAccuracy(고정밀), BatterySaving(저전력), DeviceSensors(디바이스만)
private void initLocationOption() {
        AMapLocationClientOption.AMapLocationMode mode;
        if (Utils.isGpsOpen(this)) {
            mode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy;//     。
            Log.e(TAG, "        --->>>      ");
        } else if (Utils.isGpsNetWorkOpen(this)) {
            mode = AMapLocationClientOption.AMapLocationMode.Battery_Saving;//     。
            Log.e(TAG, "        --->>>      ");
        } else {
            mode = AMapLocationClientOption.AMapLocationMode.Device_Sensors;//      。
            Log.e(TAG, "        --->>>       ");
        }
        if (mLocationOption == null) {
            mLocationOption = new AMapLocationClientOption()
                    .setLocationMode(mode)
                    .setNeedAddress(true)//          (        )
                    .setInterval(2000)//      ,    ,   2000ms,  1000ms。
                    .setHttpTimeOut(8000)//     ,  30000  ,          8000  。
                    .setLocationCacheEnable(true);//        ,            。
        } else {
            mLocationOption.setLocationMode(mode);
        }
        if (mLocationClient == null) {
            mLocationClient = new AMapLocationClient(getApplicationContext());//     
            mLocationClient.setLocationListener(this);//        
            mLocationClient.setLocationOption(mLocationOption);
        } else {
            mLocationClient.setLocationOption(mLocationOption);
        }
        mLocationClient.startLocation();//    
    }

위치 활성화
@Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        initLocationOption();
        mLocationListener = onLocationChangedListener;
    }

위치 추적 및 맵 수명주기 관리
    @Override
    public void deactivate() {
        releaseClient();
    }
    @Override
    protected void onResume() {
        super.onResume();
        if (mapView != null) mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mapView != null) mapView.onPause();
        if (mLocationClient != null) mLocationClient.stopLocation();//     ,                
    }

    private void releaseClient() {
        if (mLocationClient != null) {
            mLocationClient.stopLocation();//     ,            
            mLocationClient.onDestroy();//       ,          。
            mLocationClient = null;
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        if (mapView != null) mapView.onSaveInstanceState(outState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mapView != null) mapView.onDestroy();
        releaseClient();  
    }

현재 위치의 좌표 정보를 onLocationChanged()에서 가져올 수 있는 위치 콜백
     @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        if (aMapLocation != null) {
            LatLng latLng;
            if (aMapLocation.getErrorCode() == 0) {
                this.aMapLocation = aMapLocation;
                if (mLocationClient != null) {
                    mLocationClient.stopLocation();
                }
                mLocationListener.onLocationChanged(aMapLocation);//         
                latLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude());
            } else {
                latLng = centerLatLng;//              
                Toast(aMapLocation.getErrorInfo());
                //     ,   ErrCode(   )          ,errInfo     ,      。
                Log.e("AmapError", "location Error, ErrCode:"
                        + aMapLocation.getErrorCode() + ", errInfo:"
                        + aMapLocation.getErrorInfo());
            }
            aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng));//     ,         
        }
    }

마지막으로 미리 보기 사진 보내드릴게요.

좋은 웹페이지 즐겨찾기