美文网首页
高德地图集成攻略

高德地图集成攻略

作者: 玖玖君 | 来源:发表于2019-10-22 18:23 被阅读0次

    TIP:百度地图已经有了,那么高德还会远吗?

    现在我们就来集成一下高德地图的使用吧

    1、进入高德开发者平台

    https://lbs.amap.com/

    2:进行key值得获取

    集成

    集成主要修改两个文件:
    1:AndroidManifest.xml
    2:build.gradle
    往AndroidManifest.xml中添加权限以及apikey,apikey必须与平台的key一致:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.hdc.test">
    
        <!--地图包、搜索包需要的基础权限 -->
    
        <!--允许程序打开网络套接字-->
        <uses-permission android:name="android.permission.INTERNET" />
        <!--允许程序设置内置sd卡的写权限-->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <!--允许程序获取网络状态-->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!--允许程序访问WiFi网络信息-->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!--允许程序读写手机状态和身份-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <meta-data
                android:name="com.amap.api.v2.apikey"
                android:value="624fbeb44e525a70bcaa3756b9a18ae8"/>
        </application>
    
    </manifest>
    

    build.gradle中设置SO库架构以及高德地图的jar包:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "com.hdc.test"
            minSdkVersion 23
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
            //高德地图配置开始
            ndk {
                //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
                abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64"
            }
            //高德地图配置结束
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:26.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    
        //高德地图配置开始
    
        //3D地图so及jar
        implementation 'com.amap.api:3dmap:latest.integration'
        //定位功能
        implementation 'com.amap.api:location:latest.integration'
        //搜索功能
        implementation 'com.amap.api:search:latest.integration'
    
        //高德地图配置结束
    }
    

    也可通过拷贝添加SDK、Jar包方式方式进行配置。
    调用:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <com.amap.api.maps.MapView
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </com.amap.api.maps.MapView>
    
    </RelativeLayout>
    
    package com.hdc.test;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    
    import com.amap.api.maps.AMap;
    import com.amap.api.maps.MapView;
    
    /**
     * 这是调用者
     */
    
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            MapView mapView = (MapView) findViewById(R.id.map);
            mapView.onCreate(savedInstanceState);// 此方法必须重写
            AMap aMap = mapView.getMap();
        }
    }
    

    这时候地图已经显示出来了,先别急着实现,如果你想要定位的话,可以继续往下看,首先,我们可以先获取字体的定位,也就是不显示在地图上的定位,获取文字位置

    我写了个专门定位的类,然后使用方法就是在需要定位的Acitivity或者Fragment implement LocationCallBack 即可
    public class MapLocationHelper implements AMapLocationListener {
    
        /**
         * 声明mlocationClient对象
         */
        private AMapLocationClient mLocationClient;
        /**
         * 声明mLocationOption对象
         */
        public AMapLocationClientOption mLocationOption = null;
        private LocationCallBack mLocationCallBack;
        private Context mContext;
    
        public MapLocationHelper(Context context) {
            mContext = context;
            initLocation();
        }
    
        public MapLocationHelper(Context context, LocationCallBack locationCallback) {
            mContext = context;
            mLocationCallBack = locationCallback;
            initLocation();
        }
    
        /**
         * 初始化定位参数
         */
        private void initLocation() {
            mLocationClient = new AMapLocationClient(mContext);
            mLocationOption = new AMapLocationClientOption();
            // 设置定位监听
            mLocationClient.setLocationListener(this);
            // 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            // 设置定位间隔,单位毫秒,默认为2000ms
            mLocationOption.setInterval(2000);
            // 设置定位参数
            mLocationClient.setLocationOption(mLocationOption);
        }
    
        /**
         * 设置回调
         * @param locationCallBack
         */
        public void setLocationCallBack(LocationCallBack locationCallBack){
            mLocationCallBack = locationCallBack;
        }
    
        /**
         * 开启定位
         */
        public void startMapLocation() {
            if (!mLocationClient.isStarted()) {
                mLocationClient.startLocation();
            }
        }
    
        /**
         * 停止定位服务
         */
        public void stopMapLocation() {
            if (mLocationClient.isStarted()) {
                mLocationClient.stopLocation();
            }
        }
    
        @Override
        public void onLocationChanged(AMapLocation aMapLocation) {
            if (aMapLocation != null) {
                if (aMapLocation.getErrorCode() == 0) {
                    // 可在其中解析amapLocation获取相应内容。
                    mLocationCallBack.onCallLocationSuc(aMapLocation);
                    stopMapLocation();
                } else {
                    //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                    Log.e("AmapError", "location Error, ErrCode:"
                            + aMapLocation.getErrorCode() + ", errInfo:"
                            + aMapLocation.getErrorInfo());
                    stopMapLocation();
                }
            } else {
                stopMapLocation();
            }
        }
    }
    
    (2)创建LocationCallBack接口
    public interface LocationCallBack {
    
        void onCallLocationSuc(AMapLocation location);
    }
    
    (3)使用定位:
    (4)初始化:
    (4)拿到定位数据:
    (5)打印结果:

    这是第一种

    第二种是显示在地图上的集成方法

      public class MapsActivity extends AppCompatActivity {
        private MapView mMapView;
        private AMap aMap;
        private Button mBtn;
    
        /**
         * 这是调用者
         */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
            mMapView = (MapView) findViewById(R.id.mapp);
            mMapView.onCreate(savedInstanceState);// 此方法必须重写
            if (aMap == null) {
                //地图管理类
                aMap = mMapView.getMap();
            }
            //实现定位
            initLocation();
        }
    
        private void initLocation() {
            MyLocationStyle myLocationStyle;
            myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
            myLocationStyle.interval(10000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
            aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
            aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
            aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
            aMap.moveCamera(CameraUpdateFactory.zoomTo(18));
            UiSettings uiSettings = aMap.getUiSettings();
             /**
             * 设置地图是否可以手势滑动
             */
            mUiSettings.setScrollGesturesEnabled(true);
    
            /**
             * 设置地图是否可以手势缩放大小
             */
            mUiSettings.setZoomGesturesEnabled(true);
            /**
             * 设置地图是否可以倾斜
             */
            mUiSettings.setTiltGesturesEnabled(true);
            /**
             * 设置地图是否可以旋转
             */
            mUiSettings.setRotateGesturesEnabled(true);
     
            uiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);//设置放缩图标在右下
    
            uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);//设置logo的位置 在左下角
    
            aMap.moveCamera(CameraUpdateFactory.zoomTo(10));//设置地图的放缩
        }
    
    
    
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
            mMapView.onDestroy();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
            mMapView.onResume();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
            mMapView.onPause();
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
            mMapView.onSaveInstanceState(outState);
        }
    }
    

    好了,至此,地图的普通集成已经实现完成。

    文章很短,路还漫长,大家好,我是玖玖君,一个帅气与才华并存的男人,我们下期再见

    相关文章

      网友评论

          本文标题:高德地图集成攻略

          本文链接:https://www.haomeiwen.com/subject/cefcvctx.html