高德地图(二)之显示定位,比例尺和添加Marker

版权声明:欢迎大家关注我的博客,更多文章请移步新的地址:http://student9128.top https://blog.csdn.net/student9128/article/details/78758574

上一篇记录了高德地图的简单集成。只是初始化了地图,没有实现任何功能。这篇文章记录下定位功能和添加marker标记。

声明:本篇文章所以代码皆来自官方文档,我只是拼接了下。

效果图

效果图是这样的

定位

下面直接记录定位实现过程

在onCreate里添加下面代码,这里需要实现一个接口。

 //初始化地图控制器对象
        AMap aMap = mMapView.getMap();
// 设置定位监听
        aMap.setLocationSource(this);
// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
        aMap.setMyLocationEnabled(true);

实现的方法:

    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        mListener = onLocationChangedListener;
        if (mlocationClient == null) {
            //初始化定位
            mlocationClient = new AMapLocationClient(this);
            //初始化定位参数
            mLocationOption = new AMapLocationClientOption();
            //设置定位回调监听
            mlocationClient.setLocationListener(this);
            //设置为高精度定位模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置定位参数
            mlocationClient.setLocationOption(mLocationOption);
            // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
            // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
            // 在定位结束后,在合适的生命周期调用onDestroy()方法
            // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
            mlocationClient.startLocation();//启动定位
        }
    }

    @Override
    public void deactivate() {
        mListener = null;
        if (mlocationClient != null) {
            mlocationClient.stopLocation();
            mlocationClient.onDestroy();
        }
        mlocationClient = null;
    }
 @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        if (mListener != null&&aMapLocation != null) {
            if (aMapLocation != null
                    &&aMapLocation.getErrorCode() == 0) {
                mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点
            } else {
                String errText = "定位失败," + aMapLocation.getErrorCode()+ ": " + aMapLocation.getErrorInfo();
                Log.e("AmapErr",errText);
            }
        }
    }

重写声明周期

   @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
        if(null != mlocationClient){
            mlocationClient.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);
    }

至此,定位功能已经实现。但是并没有显示定位蓝点,也就是我们常见的那个定位标记。

显示定位蓝点

    aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false

对定位蓝点进行自定义

你会发现效果图中的精度圈跟默认的不同,就是在这里自定义的。

 MyLocationStyle myLocationStyle;
 myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类     
// myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。     //myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_map_location));//定位自定义图标
myLocationStyle.strokeColor(Color.CYAN);   //精度圈自定义    myLocationStyle.radiusFillColor(Color.argb(50,38,165,153)) ;//精度圈自定义     myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//只定位一次。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style

添加Marker

地图上往往有一些标记成为marker.
现在很多app地图里都有好多marker,最具代表性的就是共享单车app

示例代码如下:
你可以根据自己的需求进行自行添加,拿到经纬度即可。

      aMap.addMarker(new MarkerOptions().position(new LatLng(31.238075,121.662691)).title("上海"));
        aMap.addMarker(new MarkerOptions().position(new LatLng(31.238403,121.661902)).title("上海"));

设置缩放级别

 aMap.moveCamera(CameraUpdateFactory.zoomTo(15));

设置比例尺和定位按钮

   uiSettings = aMap.getUiSettings();
   uiSettings.setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
   uiSettings.setScaleControlsEnabled(true);//控制比例尺控件是否显示

个人集成的时候和大家一样,也是一点点扒官网代码来的。这里把这些给贴出来。有需求的可以复制。

比较推荐通过官方文档进行学习,可能有些不清楚的地方需要网上搜索。毕竟有时候真的在官方文档找不到。

这里我偷懒了,都是粘贴一堆代码,还望见谅。重在实现功能吧。^_^

Demo下载

github暂时未传,回头完善了再传

猜你喜欢

转载自blog.csdn.net/student9128/article/details/78758574
今日推荐