其他分享
首页 > 其他分享> > AS导入地图记录

AS导入地图记录

作者:互联网

1.申请接入流程
(参考https://blog.csdn.net/lc_miao/article/details/79710446?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control)

问题一:
在这里插入图片描述
开发未发布时会存在无debug.keystore问题
解决:https://blog.csdn.net/qq_33721320/article/details/88976863
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.在gradle里面添加依赖包和so库平台
有两种实现方法,一种是下载官方sdk手动添加,参考示例如下:
https://www.jianshu.com/p/f59231d5775f
一种是在gradle中通过代码实现,试了几次总是报错。

3.代码
MainActivity.java(最后获取定位信息的代码有误,还没有修正好,给注释掉了;现在不能准确定位,下一步继续修改,如果不行就先去掉定位功能加入搜索功能快速找到地块区域)aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 设置卫星地图模式 //默认为2d地图,写入此行代码显示卫星地图,后续可以添加按钮来实现地图切换功能。

public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener{

    private MapView mMapView = null;
    private AMap aMap;     //AMap类是地图的控制器类,用来操作地图
    private MyLocationStyle myLocationStyle;      //地图定位样式
    private AMapLocationClient mLocationClient;
    private AMapLocationClientOption mLocationClientOption;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//设置对应的XML布局文件
        mMapView = findViewById(R.id.map);//获取地图控件引用
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mMapView.onCreate(savedInstanceState);//此方法必须重写
        if (aMap == null){
            aMap = mMapView.getMap();      //AMap aMap = mMapView.getMap();
            aMap.setLocationSource((LocationSource) this);//设置定位监听,这里要实现LocationSource接口
        }
        aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 设置卫星地图模式,aMap是地图控制器对象。PS:后续可以在界面添加按钮来修改地图模式
      
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类
        //myLocationStyle.interval(2000);//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。PS:和上面的按钮显示与否同功能
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE) ;//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
        /*定位蓝点提供8种定位模式
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
            以下三种模式从5.1.0版本开始提供
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。
         */
        myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
        //myLocationStyle.myLocationIcon(BitmapDescriptor myLocationIcon);//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数。示例所用代码(BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked))
        //myLocationStyle.strokeColor(int color);//设置定位蓝点精度圆圈的边框颜色的方法。
        //myLocationStyle.radiusFillColor(int color);//设置定位蓝点精度圆圈的填充颜色的方法。
        //myLocationStyle.anchor(float u, float v);//设置定位蓝点图标的锚点方法。
        //MyLocationStyle strokeWidth(float width);//设置定位蓝点精度圈的边框宽度的方法。
        aMap.setMyLocationEnabled(true);//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。

        //配置定位参数,启动定位
        mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听,这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。
        mLocationClient.setLocationListener((AMapLocationListener) this);
        mLocationClientOption = new AMapLocationClientOption();//初始化定位参数
        mLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
        mLocationClientOption.setNeedAddress(true);//设置是否返回地址信息(默认返回地址信息)
        mLocationClientOption.setOnceLocation(false);//设置是否只定位一次,默认为false
        //mLocationClientOption.setWifiActiveScan(true);//设置是否强制刷新WIFI,默认为强制刷新
        mLocationClientOption.setMockEnable(false);//设置是否允许模拟位置,默认为false,不允许模拟位置
        //mLocationClientOption.setInterval(2000);//设置定位间隔,单位毫秒,默认为2000ms
        mLocationClient.setLocationOption(mLocationClientOption);//给定位客户端对象设置定位参数
        mLocationClient.startLocation();//启动定位
    }

    @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);
    }

    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        //mListener = onLocationChangedListener;

    }

    @Override
    public void deactivate() {
        //mListener = null;
    }

    @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        if (aMapLocation != null) {
            if (aMapLocation.getErrorCode() == 0) {
                //定位成功回调信息,设置相关消息
                aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表
                aMapLocation.getLatitude();//获取纬度
                aMapLocation.getLongitude();//获取经度
                aMapLocation.getAccuracy();//获取精度信息
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = new Date(aMapLocation.getTime());
                df.format(date);//定位时间
                aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                aMapLocation.getCountry();//国家信息
                aMapLocation.getProvince();//省信息
                aMapLocation.getCity();//城市信息
                aMapLocation.getDistrict();//城区信息
                aMapLocation.getStreet();//街道信息
                aMapLocation.getStreetNum();//街道门牌号信息
                aMapLocation.getCityCode();//城市编码
                aMapLocation.getAdCode();//地区编码

                /*/ 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
                if (isFirstLoc) {
                    //设置缩放级别
                    aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
                    //将地图移动到定位点
                    aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));
                    //点击定位按钮 能够将地图的中心移动到定位点
                    mListener.onLocationChanged(aMapLocation);
                    //获取定位信息
                    StringBuffer buffer = new StringBuffer();
                    buffer.append(aMapLocation.getCountry() + ""
                            + aMapLocation.getProvince() + ""
                            + aMapLocation.getCity() + ""
                            + aMapLocation.getProvince() + ""
                            + aMapLocation.getDistrict() + ""
                            + aMapLocation.getStreet() + ""
                            + aMapLocation.getStreetNum());
                    Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
                    isFirstLoc = false;*/
            } else {
                //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                Log.e("AmapError", "location Error, ErrCode:"
                        + aMapLocation.getErrorCode() + ", errInfo:"
                        + aMapLocation.getErrorInfo());
                //Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();
            }
        }
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.skypan.mapapplication">

    <!--用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!--用于访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <!--用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!--用于写入缓存数据到扩展存储卡-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>

    <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/Theme.MapApplication">

        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="c39e810d933ed1117b8ffcddd1d02751"/>

        <!--定位-->
        <service android:name="com.amap.api.location.APSService"></service>

        <activity android:name=".MainActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

参考博客
1.https://blog.csdn.net/weixin_38596553/article/details/101451232
2.https://blog.csdn.net/lc_miao/article/details/79710446
3.https://blog.csdn.net/m0_38020167/article/details/99672359
4.官方教程:https://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation

4.线,面绘制
官方示例教程:https://lbs.amap.com/api/android-sdk/guide/draw-on-map/draw-polyline

标签:定位,记录,蓝点,地图,aMapLocation,导入,myLocationStyle,设置
来源: https://blog.csdn.net/qq_48832406/article/details/111466954