uni-app H5 定位获取经纬度

前提要求:

1.准备高德地图平台的账号,申请key

(1)key类型:微信小程序

(2)key类型:web服务

2.引入amap-wx.js文件,通过下方链接下载,解压获得js文件

相关下载-微信小程序插件 | 高德地图API

import amap from '@/common/amap-wx.130.js'; 

3.判断浏览器

uni.showLoading({
  	title: '请稍后...'
});
let en = window.navigator.userAgent.toLowerCase();
// 匹配en中是否含有MicroMessenger字符串
if(en.match(/HUAWEI/i) == 'huawei' || en.match(/HONOR/i) == 'honor') {
	this.getSuc(); // 华为手机比较特殊,在获取地方上,所以特殊处理,给直通
} else if (en.match(/MicroMessenger/i) == 'micromessenger') {
	this.getWXLocation() //微信内置浏览器
} else {
	this.getAreas() //其他浏览器
}

一、微信浏览器

// 微信内置浏览器
async getAmapL() {
	const amapPlugin = new amap.AMapWX({
		key: 'cb208c51c75f062c327dfc98a62f3726'//高德API key类型:微信小程序
	})
	return new Promise(async (resolve,reject) => {
		await amapPlugin.getRegeo({
			success: (data) => {
				resolve({longitude: data[0].longitude, latitude: data[0].latitude})
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
},
async getWXLocation() {
	let res = this.getAmapL();
	setTimeout(()=> {
		this.promiseState(res).then(state =>{
			if(state == 'pending') {
				this.status = 3 // 判断当前状态 华为手机
				uni.hideLoading();
    		} else {
        		res.then(res => {
    				if(res) {
                        // 拿到经纬度
    					this.getSignin(res.longitude, res.latitude)
    				} else {
    					this.status = 3
    				}
        		})
    		}
    	}); 
	},4500)
},
获取promiseState,根据结果定时判断
promiseState(promise) {
	const target = {}
	return Promise.race([promise, target]).then(
		value => (value === target) ? 'pending' : 'fulfilled',
		() => 'rejected',
	)
},

二、其他浏览器

// 获取经纬度
async getL() {
	return new Promise((resolve,reject) => {
		uni.getLocation({
			type:'wgs84', // 'gcj02','wgs84'
			success: (res) => {
				resolve({longitude: res.longitude, latitude: res.latitude})
			},
			fail: (e) => {
				reject(e)
			}
		})
	})
},
async getAreas() {
	let res = this.getL();
	setTimeout(()=> {
		this.promiseState(res).then(state =>{
			if(state == 'pending') {
				this.status = 3
				uni.hideLoading();
			} else {
				res.then(res => {
					if(res) {
						this.getSignin(res.longitude, res.latitude)
					} else {
						this.status = 3
					}
    			})
    		}
    	}); 
	},4500)
},

三、逆编码-经纬度转地址

// 逆编码
		turnAdrr(longs, lat) {
				// 高德逆地理变码 https://lbs.amap.com/api/webservice/guide/api/georegeo/
				let _key = 'a862c1e523fd7d228285fd52bfcf21f9'; //高德API key类型:web服务
				uni.request({
					method: 'GET',
					url: 'https://restapi.amap.com/v3/geocode/regeo?parameters',
					data: {
						key: _key,
						location: `${longs},${lat}`,
						output: 'JSON'
					},
					success: (res) => {
						uni.showModal({
							title: '提示-地址',
							content: JSON.stringify(res),
							success: function() {}
						});
					},
					fail: r => {
						console.log(r);
					}
				});
			},

uni-appH5项目中,可以使用高德地图API来获取当前定位。下面是一种实现方式: 1. 首先,在uni-app项目中安装高德地图插件。可以通过以下命令进行安装: ``` npm install @types/amap-js-api --save ``` 2. 在需要获取定位的页面中,引入高德地图的JS API。可以在`index.html`文件中添加以下代码: ```html <script src="https://webapi.amap.com/maps?v=1.4.15&key=your_amap_key"></script> ``` 其中,`your_amap_key`需要替换为你自己的高德地图开发者密钥。 3. 在页面的`methods`中,编写获取定位的方法。可以使用高德地图提供的`AMap.Geolocation`类来实现。以下是一个示例代码: ```javascript methods: { getLocation() { AMap.plugin('AMap.Geolocation', () => { const geolocation = new AMap.Geolocation({ enableHighAccuracy: true, // 是否使用高精度定位,默认为true timeout: 10000, // 超过10秒后停止定位,默认:无穷大 }); geolocation.getCurrentPosition((status, result) => { if (status === 'complete') { // 定位成功,result中包含经纬度等信息 const { lng, lat } = result.position; console.log('当前位置经纬度:', lng, lat); } else { // 定位失败 console.log('定位失败'); } }); }); } } ``` 4. 在页面中调用`getLocation`方法即可获取当前定位信息。可以在按钮的点击事件中调用该方法: ```html <button @click="getLocation">获取当前定位</button> ``` 这样,当用户点击按钮时,就会触发获取当前定位的操作,并将结果输出到控制台中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值