【高德地图】Android高德地图初始化定位并显示小蓝点

您所在的位置:网站首页 高德地图打开定位服务怎么设置 【高德地图】Android高德地图初始化定位并显示小蓝点

【高德地图】Android高德地图初始化定位并显示小蓝点

2024-07-13 07:27| 来源: 网络整理| 查看: 265

📖第3章 初始化定位并显示小蓝点 ✅第1步:配置AndroidManifest.xml✅第2步:设置定位蓝点✅第3步:初始化定位✅完整代码

image-20231229003619023

✅第1步:配置AndroidManifest.xml 在application标签下声明Service组件 声明权限 设置高德Key,在上一步显示地图时已经完成 //开发者申请的key ✅第2步:设置定位蓝点 //设置了定位的监听 aMap.setLocationSource(this); //初始化定位蓝点样式类 MyLocationStyle myLocationStyle; myLocationStyle = new MyLocationStyle(); myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//设置定位模式 myLocationStyle.interval(2000); //只在连续定位模式下生效 myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点 // 将定位蓝点移动到屏幕中心 myLocationStyle.anchor(0.5f, 0.5f).myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW); aMap.setMyLocationStyle(myLocationStyle); aMap.setMyLocationEnabled(true);// 是否启动显示定位蓝点,默认是false

如果你不想显示蓝点精度圆圈,可以参考下面设置:

myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));//设置定位蓝点精度圆圈的边框颜色:无色 myLocationStyle.radiusFillColor(Color.argb(0, 255, 255, 255)); // 设置精度圆圈背景色:透明无色 ✅第3步:初始化定位 实现LocationSource和AMapLocationListener接口,重写activate、deactivate和onLocationChanged方法。 @Override public void activate(OnLocationChangedListener onLocationChangedListener) { } @Override public void deactivate() { } @Override public void onLocationChanged(AMapLocation aMapLocation) { } 在activate中实现定位激活。 private OnLocationChangedListener mListener;//声明位置监听 private AMapLocationClient mlocationClient;//声明定位客户端 private AMapLocationClientOption mLocationOption;//声明定位参数配置选项 /** * 激活定位 */ @Override public void activate(LocationSource.OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { //初始化定位 try { mLocationOption = new AMapLocationClientOption();//初始化定位参数 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置为高精度定位模式 mlocationClient = new AMapLocationClient(this);//声明定位客户端 mlocationClient.setLocationListener(this);//设置定位回调监听 mlocationClient.setLocationOption(mLocationOption);//设置定位参数 mlocationClient.startLocation();//启动定位 } catch (Exception e) { throw new RuntimeException(e); } } } 在deactivate中实现停止定位。 /** * 停止定位 */ @Override public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } 在onLocationChanged中监听定位回调。 private boolean isFirstLoc = true;//判断是否第一次定位 private LatLng currentLatLng;//当前定位 /** * 监听定位回调 * @param aMapLocation */ @Override public void onLocationChanged(AMapLocation aMapLocation) { if (mListener != null && 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(16));//设置缩放级别 currentLatLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()); //获取当前定位 aMap.moveCamera(CameraUpdateFactory.changeLatLng(currentLatLng));//移动到定位点 //点击定位按钮 能够将地图的中心移动到定位点 mListener.onLocationChanged(aMapLocation); isFirstLoc = false; } } else { //显示错误信息 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } }

**注意:**检查是否开启了应用定位权限和高精度定位

✅完整代码

MainActivity类:

package com.st.demo; import android.os.Bundle; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.MapsInitializer; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.MyLocationStyle; import java.text.SimpleDateFormat; import java.util.Date; public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener { private MapView mMapView;//声明一个地图视图对象 private AMap aMap;//声明一个地图图层 private OnLocationChangedListener mListener;//声明位置监听 private AMapLocationClient mlocationClient;//声明定位客户端 private AMapLocationClientOption mLocationOption;//声明定位参数配置选项 private boolean isFirstLoc = true;//判断是否第一次定位 private LatLng currentLatLng;//当前定位 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化地图定位 initMap(savedInstanceState); } /** * 初始化地图 * @param savedInstanceState */ private void initMap(Bundle savedInstanceState) { //隐私合规接口 MapsInitializer.updatePrivacyShow(this, true, true); MapsInitializer.updatePrivacyAgree(this, true); AMapLocationClient.updatePrivacyAgree(this, true); AMapLocationClient.updatePrivacyShow(this, true, true); //获取地图视图对象 mMapView = findViewById(R.id.map); //创建地图 mMapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mMapView.getMap(); } //设置了定位的监听 aMap.setLocationSource(this); //初始化定位蓝点样式类 MyLocationStyle myLocationStyle; myLocationStyle = new MyLocationStyle(); myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//设置定位模式 myLocationStyle.interval(2000); //只在连续定位模式下生效 myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点 // 将定位蓝点移动到屏幕中心 myLocationStyle.anchor(0.5f, 0.5f).myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW); aMap.setMyLocationStyle(myLocationStyle); aMap.setMyLocationEnabled(true);// 是否启动显示定位蓝点,默认是false。 } /** * 激活定位 */ @Override public void activate(LocationSource.OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { //初始化定位 try { mLocationOption = new AMapLocationClientOption();//初始化定位参数 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置为高精度定位模式 mlocationClient = new AMapLocationClient(this);//声明定位客户端 mlocationClient.setLocationListener(this);//设置定位回调监听 mlocationClient.setLocationOption(mLocationOption);//设置定位参数 mlocationClient.startLocation();//启动定位 } catch (Exception e) { throw new RuntimeException(e); } } } /** * 停止定位 */ @Override public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } /** * 监听定位回调 * @param aMapLocation */ @Override public void onLocationChanged(AMapLocation aMapLocation) { if (mListener != null && 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(16));//设置缩放级别 currentLatLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()); //获取当前定位 aMap.moveCamera(CameraUpdateFactory.changeLatLng(currentLatLng));//移动到定位点 //点击定位按钮 能够将地图的中心移动到定位点 mListener.onLocationChanged(aMapLocation); isFirstLoc = false; } } else { //显示错误信息 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } } /** * 生命周期-onDestroy */ @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); //销毁地图 } /** * 生命周期-onResume */ @Override protected void onResume() { super.onResume(); mMapView.onResume(); //重新绘制加载地图 } /** * 生命周期-onPause */ @Override protected void onPause() { super.onPause(); mMapView.onPause();//暂停地图的绘制 } /** * 生命周期-onSaveInstanceState */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState);//保存地图当前的状态 } }

activity_main.xml布局文件:

AndroidManifest.xml中的权限相关省略,参考上面的。

在这里插入图片描述

✅第1,2章 Android搭建3D高德地图详细教 ✅第 3 章 初始化定位并显示小蓝点 ✅第 4 章Android高德地图绘制标记点Marker ✅第 5 章Android高德地图控件交互详细介绍



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3