腾讯地图基本使用(撒点位,点位点击,弹框等...功能) 搭配Vue3

腾讯地图的基础注册账号 展示地图等基础功能在专栏的上一篇内容 大家有兴趣可以去看一看

今天说的是腾讯地图的在稍微一点的基础操作 话不多说 直接上代码

var marker = ref(null)
var map 
var center = ref(null)
// 地图初始化
const initMap = () => {
    //定义地图中心点坐标     
     center.value = new TMap.LatLng(30.589184, 114.29689)
    //定义map变量,调用 TMap.Map() 构造函数创建地图

     map = new TMap.Map(document.getElementById('container'), {
        center: center.value,//设置地图中心点坐标
        zoom: 6,   //设置地图缩放级别
        mapStyleId: 'style1', //设置地图样式
    });


    //创建并初始化MultiMarker
     marker = new TMap.MultiMarker({
        map: map,  //指定地图容器
        //样式定义
        styles: {
            //创建一个styleId为"myStyle"的样式(styles的子属性名即为styleId)
            //将不同的作物指定为不同的样式
            myStyleOne: new TMap.MarkerStyle({
               "width": 25,
                "height": 35,
                 "src": markImgOne,
                "anchor": { x: 16, y: 32 }
            }),
            myStyleTwo: new TMap.MarkerStyle({
                "width": 25,
                "height": 35,
                "src": markImgTwo,
                "anchor": { x: 16, y: 32 }
            }),
            myStyleThere: new TMap.MarkerStyle({
                "width": 25,
                "height": 35,
                "src": markImgThere,
                "anchor": { x: 16, y: 32 }
            }),
        },
        //点标记数据数组
        geometries: convertedPoints.value
     });
    console.log('坐标数据',convertedPoints.value);
    //初始化infoWindow
    var infoWindow = new TMap.InfoWindow({
        map: map,
        position: new TMap.LatLng(39.984104, 116.307503),
        offset: { x: 0, y: -32 } //设置信息窗相对position偏移像素,为了使其显示在Marker的上方
    });
    infoWindow.close();//初始关闭信息窗关闭
    //监听标注点击事件
    marker.on("click", function (evt) {
        if (iconClidk.value == true) {
            // console.log(evt, '点位点击信息');
            projectInfo.value = { id: '3', name: '湖北省公租房管理第三方评价项目 ·' + evt.geometry.properties.title, sonTask: evt.geometry.properties.num, problem: '1', headName: '王五', phone: "18337391968", }
        }
        //设置infoWindow
        // infoWindow.open(); //打开信息窗
        // infoWindow.setPosition(evt.geometry.position);//设置信息窗位置
        // //将信息与标记点关联起来
        // infoWindow.setContent(evt.geometry.properties.title);//设置信息窗内容
        // console.log(evt)
    })
    //移除控件缩放
    map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM);
    // 移除比例尺控件
    map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE);
    // 移除旋转控件
    map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION);

}

这个大家看起来都没有难度)(包含点位点击和弹框)  重要的是撒点位时的数据处理 和 图标类别的区分显示

这是后后端返回的数据 现在处理成想要的格式 

const getLocationAndStatusFn = () => {
     let params = { projectId: projectId.value }
    getLocationAndStatus(params).then(res => {
        console.log(res, '获取各位置及状态');  
        if (res.code == 200 && res.data.length > 0) {
            console.log(res,'点位信息');
            positionArr.value = res.data
//点位数据
            convertedPoints.value =  positionArr.value.map(item => {
                const [longitude, latitude] = item.position[0].split(',');
                // 设置已超时 已完成 进行中图标样式
                if (item.isOvertime == false) {
                    if (item.status == '0' || item.status == '1' || item.status == '2' || item.status == '3') {
                        styleIdValue.value = 'myStyleTwo'; // 根据status值设置样式
                    } else if (item.status == '4' || item.status == '5') {
                        styleIdValue.value = 'myStyleOne'; // 根据status值设置样式
                    }
                } else { 
                    styleIdValue.value = 'myStyleThere';
                }
         
                // if(item.)
                return {
                    id: item.district_id,
                    styleId: styleIdValue.value,  //这个用来区分显示不同的图标
                    position: new TMap.LatLng(parseFloat(latitude), parseFloat(longitude)),
                    properties: {  //附带信息
                        title: item.name,
                        address: item.district,
                        taskId: item.taskId,
                        status: item.status
                    }
                };
            });
        }
    })
}

 最后处理完格式是这样的

处理完数据 大家可以看到我在第一张代码里定义了3中样式的图片 当时我刚写的时候 图片死活出不来 只会显示腾讯地图的默认的红色图标 最后找到解决办法

// 地图点位图标
import markImgOne from '@/assets/visualization/icon/01.png';
import markImgTwo from '@/assets/visualization/icon/02.png';
import markImgThere from '@/assets/visualization/icon/03.png';

你的点位图片要先引入才能使用 

最后是设置中心点方法 

//设置中心点城市
function setCenter(lat, lng, xiaoqu) {
    map.setCenter(new TMap.LatLng(lat, lng))
    if (xiaoqu == 1) {
//这个是设置地图的缩放层级
        map.easeTo({ zoom: 12 }, { duration: 2000 })
    } else if (xiaoqu == 0) {
        map.easeTo({ zoom: 7 }, { duration: 2000 })
    } else { 
          map.easeTo({ zoom: 17 }, { duration: 2000 })
    }
}

最后看一下效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/103964.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java中按行读取文件内容

java中按行来读取文件内容,一般对文件也是又要求的,比如文件编码utf-8,内容是按行可读,而不是一堆字节码。这类文件,我们按行读取,主要是方便快速查看内容,并且用这些内容来作别的用途&#xff…

如何解决找不到xinput1_3.dll无法继续执行此代码?5个解决方法分享

由于各种原因,电脑可能会出现一些问题,其中之一就是电脑提示找不到xinput1_3.dll。这个问题可能会导致一些应用程序无法正常运行,给用户带来困扰。那么,当遇到这个问题时,我们应该如何修复呢?小编将详细介绍…

【算法训练-动态规划 五】【二维DP问题】最大正方形

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【动态规划】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

DNS、ICMP和NAT

DNS、ICMP和NAT 文章目录 DNS、ICMP和NATDNS是什么域名系统的名字空间域名空间的层次结构域名的分配和管理顶级类别域名 DNS域名解析过程递归查询迭代查询 高速缓存 ICMPICMP的定位ICMP协议的功能 ICMP的报文格式ping命令traceroute命令 NATNAT技术背景NAT IP转换过程NAPTNAT的…

云原生Docker Cgroups资源控制操作

目录 资源控制 cgroups四大功能 CPU 资源控制 设置CPU使用率上限 进行CPU压力测试 设置50%的比例分配CPU使用时间上限 设置CPU资源占用比(设置多个容器时才有效) 设置容器绑定指定的CPU 对内存使用的限制 限制容器可以使用的最大内存 限制可用的…

“编辑微信小程序与后台数据交互与微信小程序wxs的使用“

引言 在现代移动应用开发中,微信小程序已经成为了一个非常流行和广泛使用的平台。为了使小程序能够展示丰富的内容和实现复杂的功能,与后台数据的交互是至关重要的。同时,微信小程序还提供了一种特殊的脚本语言——wxs,用于增强小…

20231024后端研发面经整理

1.如何在单链表O(1)删除节点? 狸猫换太子 2.redis中的key如何找到对应的内存位置? 哈希碰撞的话用链表存 3.线性探测哈希法的插入,查找和删除 插入:一个个挨着后面找,知道有空位 查找:一个个挨着后面找…

LeetCode 209. 长度最小的子数组

长度最小的子数组 题目链接 209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组&…

【刷题-PTA】堆栈模拟队列(代码+动态图解)

【刷题-PTA】堆栈模拟队列(代码动态图解) 文章目录 【刷题-PTA】堆栈模拟队列(代码动态图解)题目输入格式:输出格式:输入样例:输出样例: 分析题目区分两栈解题思路伪代码动图演示代码测试 题目 题目描述 : 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。 …

【数据结构】线性表(十)队列:循环队列及其基本操作(初始化、判空、判满、入队、出队、存取队首元素)

文章目录 队列1. 定义2. 基本操作 顺序队列循环队列1. 头文件和常量2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 判断队列是否已满6. 入队7. 出队8. 存取队首元素9. 获取队列中元素个数10. 打印队列中的元素9. 主函数10. 代码整合 堆栈Stack 和 队列Queue是两种非常重要…

虚拟机VMware Workstation Pro安装配置使用服务器系统ubuntu-22.04.3-live-server-amd64.iso

虚拟机里安装ubuntu-23.04-beta-desktop-amd64开启SSH(换源和备份)配置中文以及中文输入法等 ​一、获取Ubuntu服务器版 获取Ubuntu服务器版 二、配置虚拟机 选择Custom(advanced): 选择Workstation 17.x: 选择“I will install the operating system later.”…

I/O设备的概念和分类,I/O控制器

文章目录 1.什么是I/O设备2.按使用特性分类1.人机交互类外部设备2.存储设备3.网络通信设备 3.按传输速率分类1.低速设备:2.中速设备:3.高速设备: 4.按信息交换的单位分类1.块设备:2.字符设备: 5.I/O设备的机械部件6.I/O设备的电子部件(I/O控制器)1.接收和…

Vue中的加密方式(js-base64、crypto-js、jsencrypt、bcryptjs)

目录 1.安装js-base64库 2. 在Vue组件中引入js-base64库 3.使用js-base64库进行加密 4.Vue中其他加密方式 1.crypto-js 2.jsencrypt 3.bcryptjs 1.安装js-base64库 npm install js-base64 --save-dev 2. 在Vue组件中引入js-base64库 import { Base64 } from js-ba…

快速排序(c语言代码实现)

交换排序:快速排序(不稳定的排序) 快速排序(Quick Sort)是一种常见的排序算法,它采用分治法的思想,对待排序序列进行划分,使得划分出的子序列可以分别进行排序,最终使整…

2、Linux权限理解

个人主页:Lei宝啊 愿所有美好如期而遇 目录 前言 Linux权限的概念 1.文件访问者的分(人) 2.文件类型和访问权限(事物属性) 3.文件权限值的表示方法 4.文件访问权限的相关设置方法 file指令 目录的权限 粘滞位 关于权限的总结 前言 在开始Linux权限理…

python二次开发Solidworks:读取样条曲线数据

目录 1、草图段对象 2、VBA代码分析 3、python代码实现 样条曲线(spline curve)是数学术语,是一种特殊的参数曲线,由一组控制点通过曲线拟合的方式生成。样条一词源于船舶建造中的一种临时性辅助支架,后来被引入计算…

Kettle循环结果集中的数据并传入SQL组件【或转换】里面

简介:在尝试使用了结果集的Demo循环后,进入到生产还是有一点问题的,以下是各个组件的分解解释、遇到的问题,以及解决问题的思路,最后文章的最后会把完整的Ktr文件放出来。记得收藏点赞喔! 先来看张图~来自…

MOTHERNEST双十一我们的目标是:不愁货——有!不愁钱——折!

喜迎双十一,MOTHERNEST进入开抢模式,水飞蓟护肝片,牛初乳粉,液体钙维生素D3胶囊将进行抢购模式,每人限购4件。 开抢时间: 2023.10.31 20:00-2023.10.31 23:59 2023.11.03 20:00-2023.11.03 23:59 限量每…

目标检测的方法

目标检测大致分为两个方向:基于传统的目标检测算法和基于深度学习的目标检测算法。 1.基于传统的目标检测算法 在利用深度学习做物体检测之前,传统算法对于目标检测通常分为3个阶段:区域选取、特征提取和体征分类。 2.基于深度学习的目标检测…