uniapp 安装使用高德地图api 获取当前定位

本文介绍了如何通过npmi安装AMap-jsapi-loader,然后在项目中引入并创建地图容器。接着,详细讲解了如何初始化地图,加载插件,以及如何获取和处理用户当前的地理位置信息。同时,强调了在初始化地图和发送请求时需要使用不同的开发者Key。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装 

npm i @amap/amap-jsapi-loader --save

2.引入

import AMapLoader from '@amap/amap-jsapi-loader';

3.创建容器

<view id="container"></view>
<style>
	#container {
		padding: 0px;
		margin: 10px;
		width: 100%;
		height: 280px;
	}
</style>

4.初始化地图

initMap() {
				AMapLoader.load({
					key: "申请好的Web端开发者Key", // 申请好的Web端开发者Key,首次调用 load 时必填
					version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
					plugins: ['AMap.Geocoder', 'AMap.Geolocation'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
				}).then((AMap) => {
					var map = new AMap.Map('container', {
						zoom: 15,
						resizeEnable: true
					});
					map.plugin('AMap.Geolocation', () => {
						var geolocation = new AMap.Geolocation({
							enableHighAccuracy: true, //是否使用高精度定位,默认:true
							timeout: 100, //超过10秒后停止定位,默认:无穷大
							maximumAge: 0, //定位结果缓存0毫秒,默认:0
							convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
							showButton: true, //显示定位按钮,默认:true
							buttonPosition: 'RB', //定位按钮停靠位置,默认:'LB',左下角
							buttonOffset: new AMap.Pixel(10, 20),
							showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
							showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
							panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
							zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
						});
						map.addControl(geolocation);
						//获取定位信息
						geolocation.getCurrentPosition((status, result) => {
							if (status == 'complete') {
							//成功执行的回调函数
								this.onComplete(result)
							} else {
							//失败执行的回调函数
								this.onError(result)
							}
						});

					});
				}).catch(e => {
					console.log(e);
				})
			},

5.获取当前定位

onComplete(data) {
				console.log('定位成功')
				        //发送请求
				uni.request({
					url: 'https://restapi.amap.com/v3/geocode/regeo', //逆地理编码接口地址。
					data: {
						key: '申请好的Web服务开发者Key',
						//location:经纬度  lng :经度  lat:纬度  
						location: data.position.lng + ',' + data.position.lat,
						radius: 1000,
						extensions: 'all',
						batch: false,
						roadlevel: 0
					},
					header: {
						//自定义请求头信息
					},
					success: (res) => {
					//详细地址信息
						console.log(res.data.regeocode.formatted_address);
					}
				});
			},
			//解析定位错误信息
			onError(data) {
				console.log('定位失败')
				console.log('失败原因排查信息:' + data.message)
				console.log('浏览器返回信息:' + data.originMessage)
			}

注意!!!
初始化地图使用的是 web端开发者key
发送请求使用的是Web服务开发者key

 

### UniApp 中集成百度地图实现当前定位的方法 在 UniApp 中集成百度地图以实现获取当前位置的功能,可以通过 `uni.chooseLocation` 和调用百度地图 API 的方式完成。以下是具体说明: #### 1. 配置权限 为了使应用能够正常访问用户的地理位置,在项目的 `manifest.json` 文件中需正确配置微信小程序的相关权限设置[^2]。 ```json { "mp-weixin": { "permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序位置接口的获取" } }, "requiredPrivateInfos": [ "getLocation", "onLocationChange", "startLocationUpdateBackground", "chooseAddress", "chooseLocation", "choosePoi" ] } } ``` 上述配置允许应用请求用户的位置授权并支持后台持续更新位置数据。 --- #### 2. 使用 `uni.getLocation` 获取经纬度 通过 `uni.getLocation` 方法可以快速获得设备的 GPS 坐标(WGS84 标准)。此方法适用于大多数场景下的初始定位需求。 ```javascript uni.getLocation({ type: 'wgs84', // 返回 gps 经纬度坐标 success(res) { const latitude = res.latitude; // 纬度 const longitude = res.longitude; // 经度 console.log('当前位置:', latitude, longitude); }, fail(err) { console.error('获取位置失败:', err); } }); ``` 注意:如果目标平台为 Android 或 iOS,则需要额外申请系统的地理信息服务权限;而微信小程序则依赖于上一步中的 `manifest.json` 权限声明。 --- #### 3. 调用百度地图逆地理编码服务 由于部分业务可能需要更详细的地址描述而非单纯的经纬度值,因此可借助百度地图开放平台提供的 **逆地理编码** 接口来解析具体的地点名称。 首先前往 [百度地图开放平台](https://lbsyun.baidu.com/) 注册账号并创建应用以获取专属 AK (Access Key),随后按照官方文档发起 HTTP 请求即可转换坐标至实际地址字符串形式。 示例代码如下所示: ```javascript function getBaiduAddress(latlng) { const ak = 'your_baidu_map_ak'; // 替换为你自己的AK uni.request({ url: `http://api.map.baidu.com/reverse_geocoding/v3/?ak=${ak}&output=json&coordtype=wgs84ll&location=${latlng}`, method: 'GET', success(res) { if (res.statusCode === 200 && res.data.status === 0) { const addressComponent = res.data.result.addressComponent; console.log(`所在城市:${addressComponent.city},详细地址:${res.data.result.formatted_address}`); } else { console.warn('无法解析该位置'); } }, fail() { console.error('网络异常或API调用失败'); } }); } // 示例调用 getBaiduAddress(`${latitude},${longitude}`); // 将前面得到的经纬度传入函数处理 ``` 以上逻辑实现了从原始 GPS 数据到人类易读文字表达之间的映射关系构建过程。 --- #### 关键差异分析 相比高德地图而言,尽管两者均能提供较为精确的空间参照系解决方案,但在稳定性方面存在一定区别——即当频繁触发多轮次查询操作时,前者可能会因密钥验证机制不完善而导致错误提示现象发生(如KEY ERROR 7)[^1]; 反观后者表现更加稳健可靠一些. 综上所述,推荐优先选用百度地图作为默认的地图服务商之一来进行日常开发实践当中涉及到此类功能模块的设计与实施工作流程之中去考量采纳使用情况如何更为合适些呢? --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值