uniapp中用高德地图实现点击时标点功能

本文讲述了如何在uniapp应用中使用高德地图API解决点击地图建筑物标识时的标点问题,提供了详细的Vue组件代码和事件处理逻辑,展示了如何实现在用户点击时获取并传递地理位置信息。

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

uniapp中用高德地图实现点击时标点功能

用uniapp中的map标签做标点功能的问题

在uniapp应用中使用 map 标签做一个用户点击标点,遇到了跟下图一样的问题,截图来自unioapp的dcloud社区,就是用户点击地图上的建筑物标识时,无法进行标点,点击事件无法触发

在这里插入图片描述

换为高德地图进行标点

直接上代码吧

<template>
	<view style="width: 100%;height:100%;">
		<view id="amap" class="amap" style="width: 100%;height:100%;position: absolute;left: 0;tab-size: 0;"
			:pointList="pointList" :change:pointList="ModuleMap.setParkList">
		</view>
		<u-button type="primary" @click="surePoint">确认选点</u-button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				markers: [],
				longitude: '',
				latitude: '',
				pointList: null,
			};
		},
		methods: {
			surePoint() {
				// 点击按钮,将用户点击的位置信息传出去(this.markers)
			},
			//标记点触发方法
			markerClick(e) {
				this.longitude = e.split(':')[0]
				this.latitude = e.split(':')[1]
				this.markers = [{
					latitude: this.latitude,
					longitude: this.longitude
				}]
			},
		},
		onLoad(e) {
			let point = JSON.parse(e.position)
			point.iconPath = '/static/img/map.png';
			this.markers = [point]
			// 传入的标点(反显用)
			this.longitude = point.longitude
			this.latitude = point.latitude
		},
		mounted() {
			// 将传入的标点传入下面的 ModuleMap 中
			this.pointList = [this.longitude, this.latitude];
		},
	}
</script>
<script module="ModuleMap" lang="renderjs">
	export default {
		data() {
			return {
				map: null,
				layer: null,
				markers: '',
				isExistImplement: false,
				markerId: '',
				parkList: [],
			}
		},
		watch: {
			//监听位置数据的变化,并初始化地图(有位置数据则默认给个标点)
			parkList(v) {
				setTimeout(() => {
					if (window.AMap) {
						this.initAmap(v);
					} else {
						const script = document.createElement('script');
						script.src = 'https://webapi.amap.com/maps?v=1.4.15&key=';  //这里是自己申请的高德的key
						script.onload = () => {
							this.initAmap(v);
						}
						document.head.appendChild(script);
					}
				});
			}
		},
		mounted() {

		},
		methods: {
			initAmap(marker) {
				this.map = new AMap.Map('amap', {
					resizeEnable: true,
					center: [109.189605, 27.731587], //中心点坐标
					zoom: 17, //显示的缩放级别
					zooms: [6, 30], //地图显示的缩放级别范围
				})
				//地图创建完成 标注点
				this.map.on("complete", () => {
					if (marker && marker.length) {
						this.markers = new AMap.Marker({
							icon: new AMap.Icon({
								image: 'static/img/map.png',
								size: new AMap.Size(30, 34), //图标所处区域大小
								imageSize: new AMap.Size(30, 34) //图标大小
							}),
							position: [marker[0], marker[1]],
							offset: new AMap.Pixel(-15, -30)
						});
						this.markers.setMap(this.map);
						this.map.setCenter(marker)
					}
				})
				//点击事件
				this.map.on("click", (e) => {
					if (this.markers) {
						this.markers.setMap(null);
						this.markers = null;
					}
					if (!this.markers) {
						this.markers = new AMap.Marker({
							icon: new AMap.Icon({
								image: 'static/img/map.png',
								size: new AMap.Size(30, 34), //图标所处区域大小
								imageSize: new AMap.Size(30, 34) //图标大小
							}),
							position: [e.lnglat.lng, e.lnglat.lat],
							offset: new AMap.Pixel(-15, -30)
						});
						this.markers.setMap(this.map);
						let str = e.lnglat.lng + ':' + e.lnglat.lat
						//地图点击事件 将位置信息传到上面的markerClick函数中
						this.$ownerInstance.callMethod('markerClick', str)
					}
					// this.createLabelsLayer();
				})
			},
			//接收传入的位置数据
			setParkList(newValue, oldValue, ownerInstance, instance) {
				this.parkList = newValue;
			},
		}
	}
</script>

利用renderjs将高德地图在uniapp中灵活使用,并实现了点击标点的功能,由此还可扩展多种地图功能。
最后,该方法只适用于h5和app,不适用与各种小程序
在这里插入图片描述

非教程,仅作记录。

### 集成高德地图API至UniAppUniApp 中集成高德地图 API 可以通过调用其 JavaScript SDK 或者 Web Service 接口来完成。对于实现周边查询以及基于经纬度的导航功能,主要依赖于 `uni.getLocation` 和 `uni.openLocation` 这两个方法[^1]。 #### 获取当前位置并打开指定地点 为了获取用户的地理位置信息,并能够依据这些数据开启导航服务,下面是一段示范代码: ```javascript // 调用此函数可获得用户所在位置的信息 uni.getLocation({ type: 'gcj02', // 使用国测局坐标系 success(res) { let latitude = res.latitude; let longitude = res.longitude; // 打开目标位置的地图应用进行导航 uni.openLocation({ latitude, longitude, name: "目的地名称", // 设置你想显示的目的地名字 address: "具体地址描述", scale: 18, // 地图缩放级别,默认为最大 success() { console.log('成功启动导航'); } }); }, fail(err){ console.error("定位失败:", err); } }); ``` 这段脚本首先请求设备提供地理坐标(经度和纬度),之后利用所得的数据作为参数去调用 `openLocation()` 函数,在支持的应用程序中展示该位置并在可能的情况下发起路线规划。 然而需要注意的是,当尝试直接使用高德地图插件可能会遇到一些问题,比如由于 @regionchange 事件频繁触发而导致的位置偏移现象[^2]。这通常是因为默认情况下每次视窗变化都会重新计算中心点造成的偏差所致。解决办法之一是在初始化地图组件的候调整配置选项,确保只在必要候更新位置信息;另外也可以考虑自定义逻辑处理此类回调,防止不必要的刷新操作影响用户体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值