腾讯地图撒点并默认显示点位信息

news2024/10/5 17:27:15

在这里插入图片描述

实现步骤如下:

1、注册腾讯位置服务账号并获取 Key

2、需要创建一个地图容器,并使用腾讯地图的 API 初始化地图。通常涉及到设置地图的中心点、缩放级别和地图样式。

map = new TMap.Map(document.getElementById(‘container’), {
center: center,
zoom: 15,
});

3、 创建标注点图层信息,地图对象,样式,点位数组等

var marker = new TMap.MultiMarker({
map: map,
//styles可定义多个样式,根据点位显示不同样式
styles: {},
geometries: []

4、事件监听根据需要添加对应的事件监听

marker.on(“mouseover”, function (evt) { }

点击事件(click):当用户点击标注点时触发。
鼠标悬停事件(mouseover):当鼠标悬停在标注点上时触发。
鼠标移出事件(mouseout):当鼠标从标注点上移出时触发。
拖动开始事件(dragstart):当开始拖动标注点时触发。
拖动进行事件(dragging):当拖动标注点时持续触发。
拖动结束事件(dragend):当拖动标注点结束时触发。
右键点击事件(rightclick):当用户在标注点上右键点击时触发

5、封装标注点的数据数组,首先了解geometries的数组中的对象属性都有哪些?

   id:点图形数据的标志信息,不可重复。如果id重复,后面的id会被重新分配一个新id,如果没有id会随机生成一个。
styleId:对应于 MultiMarkerStyleHash 中的样式id。
position:标注点的位置,类型为 LatLng。如:new TMap.LatLng(parseFloat(position.lat), parseFloat(position.lng))
rank:标注点的图层内绘制顺序。
properties:标注点的属性数据,类型为 Object,可根据自己需求定义属性

6、撒点

代码如下

 <div id="container"  style="width: 100%;height: 600px;"></div>
<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key=XXXXXXXXX"></script>

  //初始化地图组件
    var map, infoWindow,markers = [];
    // 设定中心点坐标
    var center = new TMap.LatLng(parseFloat([[${center.lat}]]), parseFloat([[${center.lng}]]));
    map = new TMap.Map(document.getElementById('container'), {
        center: center,
        zoom: 15,
    });
    // 地图全局事件
    //     map.on("click", function(evt) {
    //         // 这里是通过获取地图点击的位置,将该位置移动至中心点
    //         map.setCenter(new TMap.LatLng(evt.latLng.getLat().toFixed(6), evt.latLng.getLng().toFixed(6)))
    //     })
    // //移除控件缩放
    // map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM);
    // // 移除比例尺控件
    // map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE);
    // // 移除旋转控件
    // map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION);

    //撒点函数
    function dropMarker(position) {
        console.log(position)
        var marker = new TMap.MultiMarker({
            map: map,
            //样式定义
            styles: {
                //创建一个styleId为"myStyle1"的样式
                myStyle1: new TMap.MarkerStyle({
                    "width": 50,
                    "height": 50,
                    "src": '/screen/images/aa-icon.png',
                    "anchor": { x: 25, y: 25 }
                }),
                myStyle2: new TMap.MarkerStyle({
                    "width": 50,
                    "height": 50,
                    "src": '/screen/images/dd-icon.png',
                    "anchor": { x: 25, y: 25 }
                })
            },
            //多个标注点的数据数组
            geometries: position
        });
        //给每个点位创建信息框并默认打开
        var infoWindows = [];
        for (var i = 0; i < marker.getGeometries().length; i++) {
            var infoWindow1 = new TMap.InfoWindow({
                map: map,
                position: marker.getGeometries()[i].position,
                content: '<p style="font-weight: bold;font-size: 13px;color: #000; white-space: nowrap;">'+marker.getGeometries()[i].properties.title+' ****:'+marker.getGeometries()[i].properties.num+'</p>', // 设置信息窗口内容
                autoClose: true
            });
            infoWindows.push(infoWindow1);
            infoWindow1.open(); // 打开信息窗口
        }
        markers.push(marker);
        //事件监听
          // marker.on("mouseover", function (evt) {
        //     console.log(evt.latLng)
        // });
    }
    //撒点参数封装
    function addMarkers(positions) {
        var arrPOstions=[];
        var i=0;
        positions.forEach(function(position) {
            i++;
            arrPOstions.push(
                {
                    id: position.dbId,
                    styleId: 'myStyle1',  //这个用来区分显示不同的图标
                    position: new TMap.LatLng(parseFloat(position.lat), parseFloat(position.lng)),
                    properties: {  //附带信息
                        title: position.title,
                        address: position.address,
                        num:position.num
                    }
                }
            )
        });
        dropMarker(arrPOstions);
    }
addMarkers(['自己的点位集合']);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字符串匹配 --- BF算法 KMP算法

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇博客我们将介绍关于字符串匹配的BF算法以及KMP算法&#xff0c;请放心食用~ &#x1f3e0; 字符串匹配 假设有一个字符串为主串str&#x…

【大模型】大模型微调方法总结(三)

1. Prefix-tuning 1.背景 2021年论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出了 Prefix Tuning 方法。与Full-finetuning 更新所有参数的方式不同&#xff0c;该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix&#x…

【数据结构】带头双向循环链表的实现及链表顺序表的区别

目录 一、带头双向循环链表接口实现 连接关系&#xff1a; 创建哨兵位&#xff08;表头&#xff09;&#xff1a; 头插——头删&#xff1a; 尾插——尾删&#xff1a; 查找——打印&#xff1a; 指定位置pos前插入&#xff0c;删除pos位置&#xff1a; 链表销毁&#x…

springboot解析自定义yml文件

背景 公司产品微服务架构下有十几个模块&#xff0c;几乎大部分模块都要连接redis。每次在客户那里部署应用&#xff0c;都要改十几遍配置&#xff0c;太痛苦了。当然可以用nacos配置中心的功能&#xff0c;配置公共参数。不过我是喜欢在应用级别上解决问题&#xff0c;因为并不…

“管式加热炉简单控制系统和串级控制系统设计与Matlab仿真”,高分资源,匠心制作,下载可用。强烈推荐!!!

“管式加热炉简单控制系统和串级控制系统设计与Matlab仿真”毕业设计&#xff0c;高分资源&#xff0c;匠心制作&#xff0c;下载可用。强烈推荐&#xff01;&#xff01;&#xff01; 1.控制目标 加热炉的任务是把原油加热到一定温度&#xff0c;以保证下道工艺的顺利进行。…

【C语言】解决C语言报错:Double Free

文章目录 简介什么是Double FreeDouble Free的常见原因如何检测和调试Double Free解决Double Free的最佳实践详细实例解析示例1&#xff1a;重复调用free函数示例2&#xff1a;多次释放全局变量指针示例3&#xff1a;函数间传递和释放指针 进一步阅读和参考资料总结 简介 Doub…

基于redisson实现tomcat集群session共享

目录 1、环境 2、修改server.xml 3、修改context.xml 4、新增redisson配置文件 5、下载并复制2个Jar包到Tomcat Lib目录中 6、 安装redis 7、配置nginx负载均衡 8、配置测试页面 9、session共享测试验证 前言&#xff1a; 上篇中&#xff0c;Tomcat session复制及ses…

关于等保测评你了解多少?

在当今数字化时代&#xff0c;网络安全问题愈发凸显其重要性。作为保障信息系统安全的关键环节&#xff0c;等保测评&#xff08;网络安全等级保护测评&#xff09;成为了企业和组织不可或缺的一部分。那么&#xff0c;关于等保测评&#xff0c;我们究竟了解多少呢&#xff1f;…

基于STM32的智能家庭安防系统

目录 引言环境准备智能家庭安防系统基础代码实现&#xff1a;实现智能家庭安防系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;家庭安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家庭安防系统通过使用ST…

鸿蒙系统最简单安装谷歌服务及软件的方法

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 近日&#xff0c;华为开发者大会在东莞松山湖召开&#xff0c;发布了盘古大模型5.0和纯血版的鸿蒙 HarmonyOS NEXT 全场景智能操作系统&#xff0c;而根据研究机构 Counterpoint Resea…

MySQL进阶_3.MySQL日志

文章目录 第一节、MySQL事务日志1.1、redo日志1.1.1、为什么需要REDO日志1.1.2、REDO日志的好处、特点1.1.3、redo的组成1.1.4、redo的整体流程 1.2、Undo日志1.2.1、如何理解Undo日志1.2.2、Undo日志的作用1.2.3、undo log的生命周期 第一节、MySQL事务日志 事务有4种特性&am…

按位与、或、异或操作符

目录 & --- 按位与操作符 按位与操作符运用规则 按位与操作符相关代码 按位与操作符相关代码验证 | --- 按位或操作符 按位或操作符运用规则 按位或操作符相关代码 按位或操作符相关代码验证 ^ --- 按位异或操作符 按位异或操作符运用规则 按位异或操作符相关代…

24/06/26(1.1129)动态内存

strtok 字符串分割函数 #include<stdio.h> int main(){ char str[] "this,a sample string."; char* sep ","; char* pch strtok(str, sep); printf("%s\n", pch); while (pch ! NULL){ printf("%s\…

LabVIEW中卡尔曼滤波的作用与意义

卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种在控制系统和信号处理领域广泛应用的递推滤波算法&#xff0c;能够在噪声环境下对动态系统的状态进行最优估计。其广泛应用于导航、目标跟踪、图像处理、经济预测等多个领域。本文将详细介绍卡尔曼滤波在LabVIEW中的作用…

[JS]对象

介绍 对象是一种无序的数据集合, 可以详细的描述某个事物 事物的特征在对象中用属性来表示, 事物的行为在对象中用方法来表示 使用 创建对象 let 对象名 {属性名&#xff1a;值&#xff0c;方法名&#xff1a;函数&#xff0c; } let 对象名 new Object(); 对象名.属性…

深入了解 msvcr120.dll问题解决指南,msvcr120.dll在电脑中的重要性

在Windows操作系统中&#xff0c;.dll 文件扮演了非常重要的角色&#xff0c;它们包含许多程序运行所需的代码和数据。其中 msvcr120.dll 是一个常见的动态链接库文件&#xff0c;是 Microsoft Visual C Redistributable Packages 的一部分。这篇文章将探讨 msvcr120.dll 的功能…

Profibus DP主站转Modbus模块连接马达保护器案例

一、概述 在工业自动化控制系统中&#xff0c;Profibus DP和Modbus是常见的通信协议&#xff0c;在同一现场还有可能遇到Modbus协议&#xff0c;ModbusTCP协议&#xff0c;Profinet协议&#xff0c;Profibus协议&#xff0c;Profibus DP协议&#xff0c;EtherCAT协议&#xff…

appinventor2中求某个值在列表中的索引用什么方法?

使用“求对象在列表中的位置”方法就可以了&#xff1a; 返回指定对象在列表中的位置&#xff0c;从 1 开始&#xff0c;如果不在列表中&#xff0c;则返回 0。 相应地&#xff0c;知道了索引&#xff0c;从列表中取值得方法是&#xff1a;选择列表中索引值对应的列表项 返回…

条码二维码读取设备在医疗设备自助服务的重要性

医疗数字信息化建设的深入推进&#xff0c;医疗设备自助服务系统已成为医疗服务领域的一大趋势&#xff0c;条码二维码读取设备作为自助设备的重要组成部分&#xff0c;通过快速、准确地读取条形码二维码信息&#xff0c;不公提升了医疗服务效率&#xff0c;还为患者提供了更加…

教你如何一键高效下载视频号直播视频

在当今视频号直播盛行的时代&#xff0c;错过精彩直播内容再也不是遗憾&#xff01;地瓜网络技术倾情推出“视频号直播视频下载器”&#xff0c;为您捕捉每一个直播瞬间。本文将简明扼要地指导您如何利用这款神器下载视频号直播与回放视频&#xff0c;让超清MP4视频轻松入库&am…