uniapp小程序:使用uni.getLocation通过腾讯地图获取相关地址信息详情(超详细)

先看运行结果:

流程:

1、在edge网页搜索腾讯位置服务

搜索后点击这里

已经有账号的就进行登录,没有账号的进行注册即可

点击控制台:

进去后点击成员管理---->我的应用---->创建应用

输入相应的参数应用名称(随便写)和应用类型更具你的项目类型进行选择我选择了出行

选择好后点击创建:

创建好后点击添加key:

打开微信小程序开发工具:

这样就获取到了key:

2、下载腾讯小程序JavaScriptJDK点击即可跳转

微信小程序JavaScript SDK | 腾讯位置服务 (qq.com)

下载其中一个都可以

解压后放在common目录下皆可,如果没有common路面自己生成即可。

3、安全域名设计

在微信小程序后台小程序 (qq.com)​​​​​​

添加request合法域名,添加apis.map.qq.com

4、配置manifest.json文件

 "permission" : {
            "scope.userLocation" : {
                "desc" : "为了您更好的体验,请确认获取您的位置"
            }
        },
        "requiredPrivateInfos" : [ "getLocation", "chooseLocation", "chooseAddress" ]

5、引用代码演示

我这里吧方法引入到mixins中

//获取用户实时位置
import QQMapWX from "../../common/qqmap-wx-jssdk.js"
//获取用户实时位置
import QQMapWX from "../../common/qqmap-wx-jssdk.js"
export const showMixin ={
	data(){
		return{
			show: true
		}
	},
	methods:{
		showto(){
			this.show=!this.show
			console.log('this.show',this.show)
			uni.navigateBack({
				delta:1
			})
			
		},
		async getLocationInfo() {
			// this.show = !this.show
			return new Promise((resolve) => {
				let location = {
					longitude: 0,
					latitude: 0,
					province: "",
					city: "",
					area: "",
					street: "",
					address: "",
				};
				uni.getLocation({
					type: "gcj02",
					success(res) {
						location.longitude = res.longitude;
						location.latitude = res.latitude;
		
						const qqmapsdk = new QQMapWX({
							key: 'ANDBZ-VEM6T-IPIXG-VEWUH-XJYGS-N2BPT'
						});
						qqmapsdk.reverseGeocoder({
							location,
							success(response) {
								let info = response.result;
								console.log(info);
								location.province = info.address_component.province;
								location.city = info.address_component.city;
								location.area = info.address_component.district;
								location.street = info.address_component.street;
								location.address = info.address;
								resolve(location);
							}
						});
					},
					fail(err) {
						console.log(err)
					}
				})
			})
		}
	}
}

显示:

引入:

生命周期调用:

代码直接使用即可:

<template>
	<view class="site">
		<view class="map">
			<uni-search-bar class="uni-mt-10" radius="100" placeholder="搜索城市/区县/地点" clearButton="none"
				cancelButton="none" @confirm="search" />
		</view>

		<view class="current">
			<view style="display: flex; font-size: 28rpx; line-height: 44rpx;">
				<uni-icons type="location" size="20"></uni-icons>
				<txte v-if="position !== null">当前位置:{{position}}</txte>
			</view>
			<view style="display: flex; color: #4687e1; font-size: 28rpx;" @click="showto">
				<image src="../../../static/images/tabbar/locations.png" mode="aspectFill"
					style="width: 35rpx; height: 35rpx; margin-right: 10rpx;"></image>
				<text>刷新定位</text>
			</view>

		</view>
		<view class="chosen">
			<view v-for="(item,index) in list" :key="index" class="box" @click="selects(index)"
				:class="{'active': activeindex === index}">
				{{item.name}}
				<view class="line" v-if="activeindex === index"></view>
			</view>
		</view>

		<view class="area">
			<view class="area-box" v-for="(item,index) in box" :key="index" @click="city(index)"
				:class="{'active': activeindexs === index}">
				{{item.name}}
			</view>
		</view>

		<view class="ess">
			<view v-if="activeindexs !== -1" class="area-box" v-for="(item,index) in boxs" :key="index"
				@click="citys(index)" :class="{'active': activeindextwo === index}">
				{{item.name}}
			</view>
		</view>

		<uni-popup ref="popup" background-color="#fff">
			<view style="width: 300rpx; height: 300rpx;">
				<uni-loading></uni-loading>
			</view>
			
		</uni-popup>
	</view>
</template>

<script>
	// import QQMapWX from "../../../common/qqmap-wx-jssdk.js"
	import {
		showMixin
	} from '../../../shopro/mixins/site.js'
	export default {
		mixins: [showMixin],
		data() {
			return {
				position: null,
				activeindex: 0,
				activeindexs: -1,
				activeindextwo: -1,
				list: [{
					name: '贵州省'
				}],
				box: [{
						name: '贵阳市'
					},
					{
						name: '安顺市'
					},
					{
						name: '遵义市'
					},
					{
						name: '毕节市'
					},
					{
						name: '黔东南'
					},
					{
						name: '黔东南'
					},
					{
						name: '黔东南'
					},
					{
						name: '黔东南'
					}
				],
				boxs: [{
						name: '花溪区'
					},
					{
						name: '观山湖区'
					},
					{
						name: '南明区'
					},
					{
						name: '云岩区'
					},
					{
						name: '白云区'
					},
					{
						name: '清镇'
					}
				],

			}
		},
		async mounted() {
			const location = await this.getLocationInfo();
			console.log('location', location)
			// that.position = location.province + location.city
			let position = location.province + location.city + location.area
			console.log('position', position)
			this.position = position

		},
		methods: {
			citys(index) {
				this.activeindextwo = index
			},
			city(index) {
				this.activeindexs = index
			},
			selects(index) {
				this.activeindex = index
				uni.showLoading({
					title:'加载中',
					mask: true
				})
				// this.$refs.popup.open('center')
			}
		},
		// change(e){
		// 	console.log('当前模式:' + e.type + ',状态:' + e.show);
		// }
	}
</script>

<style scoped>
	.area-box {
		width: 130rpx;
		height: 80rpx;
		background-color: #fff;
		text-align: center;
		line-height: 80rpx;
		margin-top: 20rpx;
		margin-right: 10rpx;
		margin-left: 10rpx;
		border-radius: 20rpx;
	}

	.ess {
		width: 100vw;
		height: 300rpx;
		/* 	background-color: #c9c9c9; */
		display: flex;
		justify-content: flex-start;
		align-items: flex-start;
		flex-flow: row wrap;
		align-content: flex-start;
		overflow-y: scroll;
	}

	.area {
		width: 100vw;
		height: 300rpx;
		/* background-color: aqua; */
		display: flex;
		justify-content: flex-start;
		align-items: flex-start;
		flex-flow: row wrap;
		align-content: flex-start;
		overflow-y: scroll;
	}

	.line {
		position: absolute;
		bottom: 10rpx;
		width: 70%;
		height: 5rpx;
		background-color: brown;
		border-radius: 50rpx;
		left: 0;
		right: 0;
		margin: auto;
	}

	.box {
		width: 130rpx;
		height: 100%;
		/* background-color: antiquewhite; */
		text-align: center;
		line-height: 80rpx;
	}

	.active {
		font-weight: bold;
		position: relative;
	}

	.chosen {
		width: 100vw;
		height: 80rpx;
		padding: 0 20rpx;
		background: #f8f8f8;
	}

	.current {
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100vw;
		height: 100rpx;
		padding: 0 30rpx;
	}

	.map {
		width: 100vw;
		height: 100rpx;
	}

	.site {
		width: 100vw;
		height: 100vh;
		background-color: #fff;
	}
</style>

运行结果:

相关推荐
李宥小哥7 分钟前
微信小程序04-常用API上
微信小程序·小程序·notepad++
程序员阿龙16 分钟前
计算机毕业设计之:教学平台微信小程序(
微信小程序·小程序·课程设计·在线教育·教育管理系统·个性化教学·学习进度跟踪
Jiaberrr43 分钟前
教你如何在微信小程序中轻松实现人脸识别功能
javascript·微信小程序·小程序·人脸识别·百度ai
说私域1 小时前
开源 AI 智能名片 S2B2C 商城小程序与正能量融入对社群归属感的影响
人工智能·小程序
一只欢喜2 小时前
uniapp使用uview2上传图片功能
前端·uni-app
ggome2 小时前
Uniapp低版本的安卓不能用解决办法
前端·javascript·uni-app
贰叁!10 小时前
uniapp输入车牌号组件
uni-app
I592O92978310 小时前
CRM客户关系管理系统开发源码小程序
小程序
她似晚风般温柔78912 小时前
Uniapp + Vue3 + Vite +Uview + Pinia 分商家实现购物车功能(最新附源码保姆级)
开发语言·javascript·uni-app
Jiaberrr13 小时前
前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)
前端·javascript·vue.js·微信小程序·uni-app