uniapp移动端地图,点击气泡弹窗并实现精准定位

记录移动端地图map组件的使用

需求记录:

移动端地图部分需要展示两个定位点,上报点及人员定位点。通过右上角的两个按钮实现地图定位。点击对应定位气泡,弹出定位点的信息。

效果图如下:

map在nvue中的使用。直接用nvue可以直接调整层级,可以覆盖住map组件。在map组件上添加按钮控制,实现交互。map组件内添加按钮使用cover-image如下:

javascript 复制代码
<view>
    <map id="map" class="map" :scale="15" ref="map" style="width:320px;height:500px;margin-left: 30px;"
			:latitude="latitude" :longitude="longitude" :markers="cover">
	    <view class="btnStyle">
		    <cover-image src="../../static/images/people.png" 
			class="removeToReal" @tap="removeToReal"></cover-image>
		    <cover-image src="../../static/images/gaodeMap.png" style="margin-top: 18px;" class="removeToMap" @tap="removeToMap"></cover-image>
	    </view>
	</map>
</view>

js部分:

javascript 复制代码
<script>
    export default {
        data() {
            return {
                // 地图
                mapContext: null,
				latitude: null,
				longitude: null,
                latitudeReal: null,
				longitudeReal: null,
                cover: [],
            }
        },
        methods: {
            //  移动到对应点坐标
            removeToReal() {
				this.mapContext.moveToLocation({
					latitude: this.latitudeReal,
					longitude: this.longitudeReal
				});
			},
            //  移动到对应点坐标
			removeToMap() {
				this.mapContext.moveToLocation({
					latitude: this.latitude,
					longitude: this.longitude
				});
			},
            // 关键代码:
            // 加载坐标点及气泡。(data参数中包含了所需的所有数据,以下仅为气泡弹窗的代码示例参考)
			async setMarkers(data) {
				let latlng = JSON.parse(data.inspectorLocation)
				let reallatlngTurn = this.wgs84_gcj02(latlng[0],latlng[1])
				let realatlng = JSON.parse(data.inspectorRealsite)
				let realTurn = this.wgs84_gcj02(realatlng[0],realatlng[1])
				this.longitude = reallatlngTurn[0]
				this.latitude = reallatlngTurn[1]
				this.longitudeReal = realTurn[0]
				this.latitudeReal = realTurn[1]
				let markers = []
				let markerInspector = {
					id: 'id_' + 'inspectorLocation',
					latitude: reallatlngTurn[1],
					longitude: reallatlngTurn[0],
					width: 30,
					height: 35,
					iconPath: '../../static/images/position2.png',
					callout:{//自定义标记点上方的气泡窗口 点击有效  
					    content: `                     上报点
			任务单号:${data.taskSn}
			任务类型:外部任务
			派发时间:${data.dispatchTime.slice(0,10)}
			上报人:    ${data.inspectorName}
			经度:       ${latlng[0].toFixed(6)}
			纬度:       ${latlng[1].toFixed(6)}`,//文本
					    color: '#ffffff',//文字颜色
					    fontSize: 14,//文本大小
					    borderRadius: 15,//边框圆角
					    borderWidth: '10',
						padding: '10',
						textAlign: 'left',
					    bgColor: '#e51860',//背景颜色
					    display: 'BYCLICK',//常显
					}
				}
				markers.push(markerInspector)
				
				let markerReal = {
					id: 'id_' + 'realLocation',
					latitude: realTurn[1],
					longitude: realTurn[0],
					callout:{//自定义标记点上方的气泡窗口 点击有效
					    content: `                     定位点
			任务单号:${data.taskSn}
			任务类型:外部任务
			上报人:    ${data.inspectorName}
			角色:       ${people}
			派发时间:${data.dispatchTime.slice(0,10)}
			经度:       ${realatlng[0]}
			纬度:       ${realatlng[1]}`,//文本
					    color: '#ffffff',//文字颜色
					    fontSize: 14,//文本大小
					    borderRadius: 15,//边框圆角
					    borderWidth: '10',
						padding: '10',
						textAlign: 'left',
					    bgColor: '#e51860',//背景颜色
					    display: 'BYCLICK',//常显
					}
                }
				markers.push(markerReal)
				this.cover=markers

        },
        onLoad(options) {
			this.mapContext = uni.createMapContext("map", this);
        }
</scritpt>
相关推荐
未来之窗软件服务1 小时前
一体化系统(九)智慧社区综合报表——东方仙盟练气期
大数据·前端·仙盟创梦ide·东方仙盟·东方仙盟一体化
陈天伟教授4 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
信看5 小时前
NMEA-GNSS-RTK 定位html小工具
前端·javascript·html
Tony Bai5 小时前
【API 设计之道】04 字段掩码模式:让前端决定后端返回什么
前端
苏打水com5 小时前
第十四篇:Day40-42 前端架构设计入门——从“功能实现”到“架构思维”(对标职场“大型项目架构”需求)
前端·架构
king王一帅5 小时前
流式渲染 Incremark、ant-design-x markdown、streammarkdown-vue 全流程方案对比
前端·javascript·人工智能
苏打水com5 小时前
第十八篇:Day52-54 前端跨端开发进阶——从“多端适配”到“跨端统一”(对标职场“全栈化”需求)
前端
Bigger6 小时前
后端拒写接口?前端硬核自救:纯前端实现静态资源下载全链路解析
前端·浏览器·vite
BD_Marathon6 小时前
【JavaWeb】路径问题_前端绝对路径问题
前端