H5实现高德地图的uni.chooseLocation

2023-11-04

在uniapp中获取当前定位和选择当前位置都是做了兼容,在各个平台都可以使用,这篇文章讲解如何定位当前位置,搜索位置,点击进行定位在H5中实现uni.chooseLocation,如下图所示

左侧微信小程序的选择位置,右侧为高德地图在H5中的选择位置

这里讲解一下uni.chooseLocation

可以看到这个api的兼容平台是很完美的,但是在注意事项中表示了

不同端,使用地图选择时基于的底层地图引擎不一样,如 微信小程序 是腾讯地图,H5 是腾讯地图或谷歌地图,App和阿里小程序 是高德地图,百度小程序 是百度地图

因此项目开发中需要使用的是高德地图,但是配置项中却只能配置腾讯或者谷歌的key,只能自己动手封装

该插件已发布插件市场,有问题请评论或私聊哦

H5端使用高德地图实现uni.chooseLocation - DCloud 插件市场

1.引入地图

动态加载script标签引入地图api

mounted() {
			this.showPlace = this.show;
			var script = document.getElementById('mapTest')
			let that = this;
			script ? this.loop() : (function (){
				var script = document.createElement("script");
				script.type = "text/javascript";
				script.setAttribute('id', 'mapTest')
				script.src = `https://webapi.amap.com/maps?v=2.0&key=${that.keyMap}`;
				document.body.appendChild(script);
				that.loop();
			})()
		},

 2.初始化地图,定位当前位置进行查询

methods: {
          loop() {
				try{
					this.initMapWeb();
				}catch(e){
					setTimeout(()=>this.loop(), 200)
				}
			},
initMapWeb() {
				let that = this;
				this.map = new AMap.Map("map", {
					center: [ '106.55', '29.57'],
					zoom: 16
				});
				
				this.map.on('click', (e) => {
					if(this.marker) {
						this.marker.setMap(null);
					}
					that.addMarker(e.lnglat.lng, e.lnglat.lat);
					that.getPlaces('', `${e.lnglat.lng}, ${e.lnglat.lat}`);
					that.getNowPlace(`${e.lnglat.lng}, ${e.lnglat.lat}`);
				})
				
				if(this.initLocation.length > 0) {
					let tempArr = this.initLocation.split(',');
					that.addMarker(tempArr[0], tempArr[1])
					that.getPlaces('', `${tempArr[0]}, ${tempArr[1]}`);
					that.getNowPlace(`${tempArr[0]}, ${tempArr[1]}`);
					return
				}
				
				AMap.plugin('AMap.Geolocation', function() {
				  var geolocation = new AMap.Geolocation({
				    // 是否使用高精度定位,默认:true
				    enableHighAccuracy: true,
				    // 设置定位超时时间,默认:无穷大
				    timeout: 10000,
				    // 定位按钮的停靠位置的偏移量,默认:Pixel(10, 20)
				    buttonOffset: new AMap.Pixel(10, 20),
				    //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
				    zoomToAccuracy: true,     
				    //  定位按钮的排放位置,  RB表示右下
				    buttonPosition: 'RB'
				  })
				  
				  geolocation.getCurrentPosition(function(status,result){
					if(result.info == "SUCCESS" && result.position && result.position){
						that.addMarker(result.position.lng, result.position.lat)
						that.getPlaces('', `${result.position.lng}, ${result.position.lat}`)
						that.getNowPlace(`${result.position.lng}, ${result.position.lat}`);
					}
				  });
				
				})
			},
getNowPlace(location) {
				uni.request({
					url: `https://restapi.amap.com/v3/geocode/regeo?key=${this.AMapKeyWeb}&location=${location}`,
					method: 'GET',
					success: (res) => {
						let result = res.data;
						if(result.status == '1') {
							let tempObj = result.regeocode;
							this.checked = {
								adcode: tempObj.addressComponent.adcode,
								city: tempObj.addressComponent.city,
								district: tempObj.addressComponent.district,
								location,
								addressLocal: tempObj.formatted_address
							}
						}
						
					},
					fail: (err) => {
						uni.showToast({
							title: JSON.stringify(err),
							icon: 'none'
						})
					}
				})
			},
			
			addMarker(lng, lat) {
				var icon = new AMap.Icon({
					// 图标的取图地址
					image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
					// 图标所用图片大小
					imageSize: new AMap.Size(32, 42),
				});
					
				this.marker = new AMap.Marker({
					icon,
				    position: [lng, lat],  
				});
				
				this.marker.setMap(this.map);
				this.map.setCenter([lng, lat])
			},
			
			getPlaces(keywords, location) {
				uni.request({
					url: `https://restapi.amap.com/v3/assistant/inputtips?key=${this.AMapKeyWeb}&keywords=${keywords}&location=${location}`,
					method: 'GET',
					success: (res) => {
						// console.log(res)
						let result = res.data;
						if(result.status === '1')  {
							this.list = result.tips.filter(item => item.location && item.location.length > 0);
							// console.log(this.list, result.tips)
						}
					},
					fail: (err) => {
						uni.showToast({
							title: JSON.stringify(err),
							icon: 'none'
						})
					}
				})
			}


}

uniapp的更多功能请移步 - uniapp实现常用功能_哆来A梦没有口袋的博客-CSDN博客_uniapp功能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H5实现高德地图的uni.chooseLocation 的相关文章

  • kali中binwalk/foremost/zip2john工具的配合使用

    kali中binwalk foremost zip2john工具的配合使用 背景 通过binwalk工具观察该文件是否包含其他文件 通过foremost工具将隐藏文件提取出来 通过zip2john工具破解压缩包的密码 心得体会 背景 最近参
  • 魏副业而战:开学季,闲鱼卖什么好?

    我是魏哥 与其躺平 不如魏副业而战 现在八月底了 意味着暑假结束 新的学期将要开始 作为闲鱼卖家 可顺势布局一下 那卖什么好呢 开学季嘛 卖学习相关的 例如 文具 书包 练习本 教辅书籍等等 只要和学生相关的都可以的 另外 有些大学生可能会
  • oracle 连接串解释

    工作中 oracle环境 常常通过连接串描述 scott 123456 DESCRIPTION ADDRESS PROTOCOL TCP HOST 192 168 206 100 PORT 1521 CONNECT DATA SERVER
  • 小孩学机器人编程怎么样

    小孩学机器人编程怎么样 孩子的学习从古至今都是家长们十分关心和重视的一件事情 很多的家长在培养孩子的学习方面也是相当耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 他们对于小孩学机器人编程怎么样并不是很清楚 今天我们就一起来了

随机推荐

  • sqli-labs靶场Less-3

    1 访问首页 index php id 1 这里的传参点是id 2 判断注入点是数字还是字符 如果是字符就需要闭合 and 1 1 qwe and 1 2 qwe 分析 通过以上探测发现并不起效果 考虑是不是和第一关一样需要单引号闭合 再次
  • 如何用一根网线实现在两台电脑之间传输数据

    下面我来说一说怎样用一根网线连接两台电脑 从而实现数据的传输 首先 我们要在两台电脑上分别设置其IPv4的配置 第一台电脑的设置步骤如下 打开网络和共享中心 点击更改设配器设置 在以太网那里右键属性 双击Internet 协议版本4 TCP
  • logstash多任务多管道pipeline配置启动,方案分析

    文章目录 6 0以下方案 6 0以下方案分析 启动方式 6 0以上方案 启动方式 6 0以下方案 logstash处理多个输入输出源方案 没有使用多管道 两个任务 jdbc demo 手写自定义mysql conf input stdin
  • keil调试GD32E23系列芯片找不到 j-link问题解决

    背景 今年因为疫情 下半年芯片疯涨 公司各个产品的芯片都比较紧缺 原来使用的芯片都为st和华大公司的芯片 价格还好 都不超过五块 现在拿货 st芯片价格已经涨了30块左右 吃不消 遂开始加紧开发国内的芯片 目录 一 问题 二 问题可能的根源
  • redis教程

    Redis和tp使用 类型 支持多种数据结构类型 包括string 字符串 hash 哈希 list 链表 set 无序集合 Zset 有序集合 Redis能读的速度是110000次 s 写的速度是81000次 s Redis所有单个命令的
  • AIX字体丢失——解决方案

    问题 图标中文显示为方框 报表工具FineReport 解决办法 拷贝中文字体到操作系统 1 将 WINDOWS Fonts 目录下SIMSUN TTC 宋体 拷贝到 AIX JDK安装目录 jre lib fonts 目录下 2 如果是j
  • Pixel手机电信4G破解(含解锁BL和root)

    Pixel电信4G破解 由于谷歌没有支持电信 因此若想使用电信的网络就需要破解 仅支持欧洲版 其它版的可以试试 本文分为两种电信破解方式 第二种不需要格式化 要想破解电信 必须root 首先需要下载电脑的驱动 下载完成后还需要安装 方法 安
  • 学习笔记借助ChatGPT自动制作PPT

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 两步实现自动制作PPT 二 步骤 1 通过ChatGPT生成文本文档 2 借助MINDSHOW生成PPT 总结 一 两步实现自动制作PPT 文本内容生成 cha
  • Git基础操作:合并某个分支的一个commit到另一个分支

    有的时候不小心在错误的分支A上开发了一点代码 也已经提交了 这个时候如果想把这部分代码移到正确的分支B上可以如下操作 使用git log命令找到错误提交的那次commitid git log commit 8b19200eed045d5be
  • QT布局

    布局管理 以下是Qt手册中的 布局管理 的译文 在一个Widget中 Qt布局管理系统提供了一个简单而有效的方式来自动组织子widget 以保证他们能够很好地利用可用空间 介绍 Qt包含一个布局管理类的集合 它们被用来描述widgets如何
  • JSON的编写规则

    JSON的规则很简单 对象是一个无序的 名称 值 对 集合 一个对象以 左括号 开始 右括号 结束 每个 名称 后跟一个 冒号 名称 值 对 之间使用 逗号 分隔 规则如下 1 映射用冒号 表示 名称 值 2 并列的数据之间用逗号 分隔 名
  • 敏感性、特异度、α、β、阳性预测值(PPV)、阴性预测值(NPV)等指标及置信区间计算(附R语言代码)

    这个虽然简单但老是被绕进去 所以整理一下方便查阅 首先画一个2 2的混淆矩阵confusion matrix TP True positive 真阳性 FP False positive 假阳性 FN False negative 假阴性
  • 微信小程序存在的风险_浅谈微信小程序会中病毒事件

    小程序其实是云端数据 不在软件里 所以小程序没有进入的端口 所以华为的管家也检测不出来 但是你按照腾讯的方法收索的话 就等于默认开通小程序 把你的数据放到云端 同时你拥有的账号就绑定了一大堆应用程序 这些程序你永远也别想删除掉 除非不用那个
  • C语言学习(四)——字符串处理函数

    字符串处理函数 17个 1 gets include
  • Jmeter(十五) - 从入门到精通 - JMeter导入自定义的Jar包(详解教程)

    1 简介 原计划这一篇是介绍前置处理器的基础知识的 结果由于许多小伙伴或者童鞋们在微信和博客园的短消息中留言问如何引入自己定义的Jar包呢 我一一回复告诉他们和引入插件的Jar包一样的道理 一通百通 但是感觉他们还是很迷糊很迷惘 因此在这里
  • powerdesigner 创建物理结构视图

    PowerDesigner系列产品提供了一个完整的建模解决方案 业务或系统分析人员 设计人员 数据库管理员DBA和开发人员可以对其裁剪以满足他们的特定的需要 本系列将简单介绍PowerDesigner入门使用操作 若有不足或需要补充之处 欢
  • 深度学习环境配置9——Ubuntu下的tensorflow-gpu==2.4.0环境配置

    深度学习环境配置9 Ubuntu下的tensorflow gpu 2 4 0环境配置 注意事项 一 2022 09 04更新 学习前言 各个版本tensorflow2的配置教程 环境内容 环境配置 一 Anaconda安装 1 Anacon
  • 股票获取最大利润

    1 题目背景 给定一个数组 prices 它的第i个元素prices i 表示一支给定股票第i天的价格 你只能选择某一天买入这只股票 并选择在未来的某一个不同的日子卖出该股票 设计一个算法来计算你所能获取的最大利润 返回你可以从这笔交易中获
  • 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突 的解决办法

    最主要就一句话 在条件中不同排序规则的列后面加上 collate Chinese PRC CI AS 即可解决 有个需求 要求数据库系统自动同步两个不同数据库中的人员信息 首先想到写一个存储过程然后由系统任务来自动处理 尝试性的写了下面的查
  • H5实现高德地图的uni.chooseLocation

    在uniapp中获取当前定位和选择当前位置都是做了兼容 在各个平台都可以使用 这篇文章讲解如何定位当前位置 搜索位置 点击进行定位在H5中实现uni chooseLocation 如下图所示 左侧微信小程序的选择位置 右侧为高德地图在H5中