1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高德地图的基础使用(二)定位蓝点

高德地图的基础使用(二)定位蓝点

时间:2021-03-22 10:57:41

相关推荐

高德地图的基础使用(二)定位蓝点

前期预备:运行权限(Android 6.0+)

/** 地图所需权限 :* roup:android.permission-group.LOCATION(定位)* android.permission.ACCESS_FINE_LOCATION(通过gps获取定位权限)* android.permission.ACCESS_COARSE_LOCATION(通过wifi和移动基站获取定位权限)**/if (ContextCompat.checkSelfPermission(this,//未开启定位权限Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},LOCATION_REQUEST_CODE);}else {startLocation();Toast.makeText(this, "已开启定位权限", Toast.LENGTH_SHORT).show();}

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {//刚才的识别码case LOCATION_REQUEST_CODE://用户同意权限,执行我们的操作if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//开始定位startLocation();} else {//用户拒绝之后,当然我们也可以弹出一个窗口,直接跳转到系统设置页面Toast.makeText(this, "未开启定位权限,请手动到设置去开启权限", Toast.LENGTH_LONG).show();}break;default:break;}}

定位蓝点:

1.显示地图

@Overridepublic void initView() {// 保存地图绘制的当前状态mapDemoMapView.onCreate(new Bundle());// 初始化地图控制器对象if (aMap == null){aMap = mapDemoMapView.getMap();}

}

@Overrideprotected void onDestroy() {super.onDestroy();if (mapDemoMapView != null){mapDemoMapView.onDestroy();}}

2. 定位

/**声明定位回调监听器 */public AMapLocationListener mLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation !=null ) {if (amapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息//获取纬度double latitude = amapLocation.getLatitude();//获取经度double longitude = amapLocation.getLongitude();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。LogUtil.i(TAG,"地址-----------------"+amapLocation.getAddress());// 设置蓝点setBlueDot(latitude,longitude);} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。LogUtil.e("AmapError", "location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:"+ amapLocation.getErrorInfo());}}}};public void startLocation(){mLocationClient = new AMapLocationClient(getApplicationContext());mLocationOption = new AMapLocationClientOption();//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//获取一次定位结果://该方法默认为false。mLocationOption.setOnceLocation(true);//设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);// 添加监听器mLocationClient.setLocationListener(locationListener);//启动定位mLocationClient.startLocation();}

3. 蓝点

private void setBlueDot(double latitude, double longitude) {//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。myLocationStyle = new MyLocationStyle();//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。myLocationStyle.interval(2000);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。myLocationStyle.showMyLocation(true);//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数。myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_map_dot_blue));//设置定位蓝点的StyleaMap.setMyLocationStyle(myLocationStyle);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。aMap.setMyLocationEnabled(true);// 地图中心移动到当前位置aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(latitude, longitude)));}

显示结果:

参考文档:/api/android-sdk/guide/create-map/mylocation

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。