高德地图定位

article/2025/11/5 21:10:28

高德地图的使用(二)定位

定位

显示地图过后,就是进行定位,这里我将介绍如何实现定位功能,以及如何改变定位的小图标

实现定位功能

定位功能基本有两种展现形式,一种是在地图上展示定位图标,另一种是自动定位并显示地点名称

参考文档

在地图上展示定位图标

 private MyLocationStyle myLocationStyle = new MyLocationStyle();    //初始化定位蓝点样式类//声明AMapLocationClient类对象public AMapLocationClient mLocationClient = null;//声明AMapLocationClientOption对象public AMapLocationClientOption mLocationOption = null;//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//定位一次,且将视角移动到地图中心点。//        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的StyleaMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。//获取一次定位结果:该方法默认为false。mLocationOption.setOnceLocation(true);//获取最近3s内精度最高的一次定位结果://设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。mLocationOption.setOnceLocationLatest(true);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();

实现接口AMapLocationListener,设置定位回调监听

 mLocationClient.setLocationListener(this);

高德定位回调

    @Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {Double latitude = aMapLocation.getLatitude();Double longitude = aMapLocation.getLongitude();Log.d("888", "纬度=" + latitude + "精度=" + longitude);LatLng location = new LatLng(latitude, longitude);aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 18));} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}}}

到这里在地图上就会出现一个有着默认图标的定位点

需要注意的是:

Battery_Saving
低功耗模式,将只使用高德网络定位

Device_Sensors
仅设备(Gps)模式,不支持室内环境的定位

Hight_Accuracy
高精度模式,将同时使用高德网络定位和GPS定位,优先返回精度高的定位

一般使用的都是高精度模式,还是看个人需求吧。

另一个需要注意的就是

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);

这个是连续定位,不好的地方就是如果你在地图上想滑到定位之外的地方,位置会立刻回到定位的地方。

屏幕缩放比

LatLng location = new LatLng(latitude, longitude);
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 18));

最后一点要注意的是:

//获取一次定位结果:该方法默认为false。

mLocationOption.setOnceLocation(true);

如果想多次定位,要将这个设为false

更改默认图标

设置圆圈的颜色

 private static final int STROKE_COLOR = Color.argb(180, 3, 145, 255);private static final int FILL_COLOR = Color.argb(10, 0, 0, 180);

更改图标

myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(this.getResources(),R.mipmap.navi_map_gps_locked)));//可以根据自己的需要更改图标图片myLocationStyle.anchor(0.5f, 0.5f);//精度圈颜色自定义myLocationStyle.strokeColor(STROKE_COLOR);//设置定位蓝点精度圆圈的边框颜色的方法。myLocationStyle.radiusFillColor(FILL_COLOR); //设置定位蓝点精度圆圈的填充颜色的方法。

最后在onDestroy中设置

if (null != mLocationClient) {mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务。
}

navi_map_gps_locked样子

navi_map_gps_locked

总体代码:

public class ShowMapActivity extends Activity implements AMapLocationListener {private static final int STROKE_COLOR = Color.argb(180, 3, 145, 255);private static final int FILL_COLOR = Color.argb(10, 0, 0, 180);private AMap aMap;  //初始化地图控制器对象private MapView mMapView;private MyLocationStyle myLocationStyle = new MyLocationStyle();    //初始化定位蓝点样式类//声明AMapLocationClient类对象public AMapLocationClient mLocationClient = null;//声明AMapLocationClientOption对象public AMapLocationClientOption mLocationOption = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_showmap);initView();mMapView.onCreate(savedInstanceState);initMap();setListener();}private void initView() {mMapView = (MapView) findViewById(R.id.map);}private void initMap() {if (aMap == null) {aMap = mMapView.getMap();}//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//定位一次,且将视角移动到地图中心点。
//        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。showIcon();aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//        aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。//获取一次定位结果:该方法默认为false。mLocationOption.setOnceLocation(true);//获取最近3s内精度最高的一次定位结果://设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。mLocationOption.setOnceLocationLatest(true);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();}private void setListener() {mLocationClient.setLocationListener(this);}/*** 绘制小蓝点图标*/private void showIcon() {myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(this.getResources(),R.mipmap.navi_map_gps_locked)));myLocationStyle.anchor(0.5f, 0.5f);myLocationStyle.strokeColor(STROKE_COLOR);//设置定位蓝点精度圆圈的边框颜色的方法。myLocationStyle.radiusFillColor(FILL_COLOR); //设置定位蓝点精度圆圈的填充颜色的方法。}/*** 高德定位回调*/@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {Double latitude = aMapLocation.getLatitude();Double longitude = aMapLocation.getLongitude();Log.d("888", "纬度=" + latitude + "精度=" + longitude);LatLng location = new LatLng(latitude, longitude);aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 18));} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}}}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图mMapView.onDestroy();if (null != mLocationClient) {mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务。}}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制mMapView.onPause();mLocationClient.stopLocation();//停止定位后,本地定位服务并不会被销毁}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态mMapView.onSaveInstanceState(outState);}}

自动定位并显示地点名称

需要设置的跟上面差不多

总体代码

public class ShowLocationActivity extends Activity implements AMapLocationListener{//声明AMapLocationClient类对象public AMapLocationClient mLocationClient = null;//声明AMapLocationClientOption对象public AMapLocationClientOption mLocationOption = null;private TextView mTvLocation;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_location);initView();initLocation();}private void initLocation() {//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位监听mLocationClient.setLocationListener(this);//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//获取一次定位结果:该方法默认为false。mLocationOption.setOnceLocation(true);//获取最近3s内精度最高的一次定位结果://设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。mLocationOption.setOnceLocationLatest(true);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();}private void initView() {mTvLocation = (TextView) findViewById(R.id.tv_showLocation);}@Overrideprotected void onDestroy() {super.onDestroy();if (null != mLocationClient) {mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务。}}@Overrideprotected void onPause() {super.onPause();mLocationClient.stopLocation();//停止定位后,本地定位服务并不会被销毁}@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {//显示你想显示的mTvLocation.setText(aMapLocation.getAddress());} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}}}
}

可以获得的内容

//定位成功回调信息,设置相关消息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();//地区编码amapLocation.getAOIName();//获取当前定位点的AOI信息

到此定位功能就完成了


http://chatgpt.dhexx.cn/article/GlpHqqMP.shtml

相关文章

vue简单使用高德地图定位

1、获取key 我们需要到高德开放平台生成key 我这里选的是web端,提交后会生成一个key值 2、安装vue-amap npm install vue-amap --save 3、在项目main.js引入vue-amap 1 import AMap from vue-amap; 2 Vue.use(AMap); 3 4 // 初始化vue-amap 5 AMap.i…

uniapp使用高德地图定位

公司用的是百度地图,过听同事说,市场上用高德地图的比较多,于是又按捺不住自己那 好奇万物的心,专门出研究了一下高德地图,发现内容基本一直,不过就是在方法的名字变了而已,废话不多说我们开始研…

高德地图初步使用-定位

iOS系统不允许使用第三方定位,定位功能是对iOS系统定位的二次封装。通过封装,可将原始的定位点无偏差的显示在高德地图上。 注意: 1)2.3.0(含)之前版本的SDK,在iOS8中无法定位,请参考:iOS8无法定位的解决方…

高德地图使用——定位功能

在上一次中我们说到了如何申请key值,和在Application中如何配置,以及将地图显示出来。如果没看过的朋友们可以看一下笔者上一篇文章:最新高德地图使用(SDK6.3.0版本)——申请key、显示地图。在这一篇中,我们…

高德地图之定位篇-----定位、预测天气、围栏、搜索周边、行踪轨迹

跟集成百度地图一样,首先获取KEY,获取方式(官方的截图) 这篇主要是讲解高德地图定位篇,高德地图定位篇跟高德地图篇是不同的sdk,分离开了。。。 来看下配置流程吧,配置是第一位的 1.从网站下载并解压得到定…

解决电脑自动修复蓝屏问题(你的电脑未正确启动)

一.问题描述 电脑长时间未开机,开机蓝屏,显示自动修复,你的电脑未正确启动,如下图所示: 二。解决问题 1.点击高级选项-》疑难解答-》命令提示符: 2.在命令行中输入cd c:\windows\system32\drivers 3.再输…

如何完美解决解决win10系统--无法自动修复此计算机问题

前言 今天遇到一个糟心的问题就是开机时电脑无法正常开启,如图片所示。然后网上搜集了各种解决的办法都不管用,特别是百度给出的方法,根本就是坑人。如果你不想重装系统,而且想保留本电脑已有的程序和文件,可以参考本…

台式电脑怎么进入修复计算机,电脑为什么提示自动修复?电脑开机提示自动修复的解决办法...

小编朋友的电脑总是会出现一些奇奇怪怪的问题,这不电脑开机后就莫名其妙的提示需要启动修复,电脑无法正常启动导致无法使用,这问题该如何解决呢?可以参考小编下面的教程,看看对你有没有帮助。 电脑开机提示自动修复 ●…

当电脑开不了机出现自动修复时

当电脑开不了机出现自动修复时 电脑突然间开不了机,一直出现自动修复,然后修复失败。如下图 让人头疼,找了一下,有点担心时硬盘坏了,点了高级选项,选择疑难解答,再点高级选项,里面…

服务器开机提示修复,电脑开机提示自动修复怎么办?win10电脑开机提示自动修复教程...

我们在使用电脑的时候,开机后一般都会进入桌面。但有时候打开电脑后提示自动修复,显示电脑未能正确启动。电脑开机提示自动修复怎么办?下面就让小编为大家带来win10电脑开机提示自动修复教程。 首先大家一定会和我一样想这个问题,…

电脑开机显示自动修复失败无法进入系统的解决方法

案例场景 前几天由于电脑突然蓝屏,重启后,结果开机进不了系统,蓝屏显示自动修复失败,立马选了启动修复,但可想而知不起作用,如此重复多次后还是于事无补。经过两个小时的折腾,终于成功进入系统。…

电脑自动修复重启无法进入系统问题解决方案

电脑管家提示电脑需要修复漏洞,在修复之后使电脑睡眠了,可能定时重启的原因,导致了电脑不正常关机,打开电脑后就出现了蓝屏的情况,反复重启都无法进入系统,电脑里很多重要的东西,又不想重装系统…

windows10自动修复无法开机

Windows10操作系统于2015年7月29日正式发布,此后,win10也就成了新上市的笔记本电脑或者台式机电脑的预装操作系统!win10系统给我们带了全新的体验,当然也带来了一定的烦恼!就拿win10自动修复这个功能来说,玩…

电脑自动修复失败无限重启解决办法win10

1.写在前面的话 1.首先希望大家都有一个备份的意识,当电脑第一次出现问题时,你查了各种方法费尽九牛二虎之力修好,一定要设置一个系统还原点,这样以后电脑坏掉还有的救。 2.非必要情况,不要强制关机。 3.不要自己拆…

win10系统开机自动修复失败的解决方法

事情是这样的,在某一天的傍晚帮对象装了一个arcgis软件,学学科地理的同学应该都要用的,当然作为一个没有正版资源的人,首选了荡来的安装包,并试图安装,经过一顿操作,确认各项功能都可以正常使用…

win10自动修复电脑无法正常启动

问题描述: 昨天遇到的这个问题,起因是电脑卡,反复重启后还是觉得卡,于是强制关机,结果出现蓝屏,自动修复,电脑无法正常启动。参考了网上的相关解决方法,尝试在高级选项里面选择“禁用…

台式电脑怎么进入修复计算机,电脑开机提示自动修复怎么办?电脑开机自动修复处理方法...

对于很多电脑用户来说,偶尔会遇到电脑开机提示自动修复的情况,由于电脑无法正常开机,导致无法使用,问题显得就比较棘手了。首先大家一定会和小编一样想这个问题为什么我的电脑会出现这个提示? 电脑开机提示自动修复 ●…

计算机自动进入自动修复界面,电脑提示自动修复?戳这里几招解决,方法简单实用!...

原标题:电脑提示自动修复?戳这里几招解决,方法简单实用! 很多用户遇到一个这样的问题,也不知道是什么原因,电脑有时候一开机就出现“启动修复”的界面。是不是没有正常将系统关闭呢?好像之前删过…

Win10自动修复无法开机【完美解决】

Windows10操作系统于2015年7月29日正式发布,此后,win10也就成了新上市的笔记本电脑或者台式机电脑的预装操作系统!win10系统给我们带了全新的体验,当然也带来了一定的烦恼!就拿win10自动修复这个功能来说,玩…

Win10无法开机提示自动修复无法修复你的电脑的有效解决方法

最近Win10系统出现了无法开机并无法自动修复系统的问题,然后提示了“自动修复,无法修复你的电脑”,在高级选项中尝试安全模式也无法进入。那么遇到这个问题,在不重装系统的情况下,我们要如何解决呢?下面装机…