高德局部刷新标记点,bug解决

简介: 将接口返回的经纬集合点在高德地图上标记展示, 如果实时刷新地图标记点,不加优化,则会造成过多的带宽消耗 所以,地图只需加载一次,局部更新标记点就好了。

将接口返回的经纬集合点在高德地图上标记展示, 如果实时刷新地图标记点,不加优化,则会造成过多的带宽消耗 所以,地图只需加载一次,局部更新标记点就好了。

<template>
  <section class="map_warpper">
     <div id="container" class="map"></div>
  </section>
</template>

<script>
import redMarker from '@/assets/img/marker-red.png'
import locationMarker from '@/assets/img/marker-location.png'

export default {
  name: 'mapContainer',
  data () {
    return {
    // 动态的经纬度点集合
      locationArray: [],
      markers: [],
      cluster: [],
      map: null,
      // 地图中心点
      regionLocation: [],
      zoom: 0
    }
  },
  mounted () {
    this.initMap()
  },
  methods: {// 实例化地图
    initMap () {
      this.regionLocation = util.cookies.get('regionLocation').split(',')
      const AMap = window.AMap
      this.map = new AMap.Map('container', {
        resizeEnable: true,
        center: this.regionLocation,
        zoom: 12
      })
     this.setMarker()
    },
    // 设置点标记
    setMarker () {
      this.markers = []
      const AMap = window.AMap
      // 标记样式
      for (const i in this.locationArray) {
        const position = this.locationArray[i].split(',')
        this.markers.push(new AMap.Marker({
          position: position,
          content: '<img src=' + locationMarker + '>',
          offset: new AMap.Pixel(-15, -15)
        }))
      }
      // 聚合点样式
      let sts = [{
        url: redMarker,
        size: new AMap.Size(64, 64),
        offset: new AMap.Pixel(-32, -32)
      }]
      // 点聚合
      this.cluster = new AMap.MarkerClusterer(this.map, this.markers, { styles: sts, gridSize: 80 })
      // 自适应展示所有标记点
      this.map.setFitView(this.markers)
      this.zoom = this.map.getZoom()
    }
  }
}
</script>

<style>
.map {
  width: 100%;
  height: 100%;
}
.map_warpper {
  width: 100%;
  height: 800px;
}
</style>

上面代码解决了两个bug:

1.每次执行setMarker()时,都会this.markers = [], 这一步清除标记点,驱动地图标记刷新,然而并未刷新,新旧点并存,随着叠加,点会越来越多, 这时记得queryLocation()调用前强行删除点 this.cluster.Ra = []

2.然而集合点更新了,但视图依旧未触发更新,这时就需要缩放地图来触发更新, this.map.getZoom()获取当前缩放级别,然后通过 this.map.setZoom()设置缩放,视图达到刷新,问题解决。

相关文章
|
7月前
|
JSON 前端开发 API
StockTV API 对接全攻略(股票、期货、IPO)
本文介绍如何通过StockTV API快速接入全球股票及期货实时数据,支持多国市场切换(如美、印、日、墨)与IPO追踪功能。基于统一接口与`countryId`参数,实现一套代码覆盖多国行情,集成K线、贵金属、WebSocket推送等能力,助力全球化金融应用开发。(238字)
|
监控 Docker 容器
Docker 启动命令里 --cgroupns host 是什么作用?
【8月更文挑战第19天】Docker 启动命令里 --cgroupns host 是什么作用?
963 1
|
存储 JavaScript
uniapp (vue3)生成二维码
uniapp (vue3)生成二维码
1756 0
|
机器学习/深度学习 存储 测试技术
YOLOv11改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
YOLOv11改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
708 13
YOLOv11改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
|
8月前
|
Kubernetes 安全 Cloud Native
Docker还值得投入吗?容器市场的爆发与Docker的进化:2025年技术深度报告
Docker仍是云原生核心,2025年容器市场持续增长,技术生态成熟。掌握Docker与Kubernetes等技能,可显著提升职业竞争力,建议系统学习并实践,把握数字化转型机遇。
1127 0
|
存储 JSON 小程序
【小程序云开发】不用后端也能构建完整的微信小程序
本文介绍了如何从零开始学习和掌握微信小程序云开发,包括云函数、云数据库和HTTP触发等重要概念。通过详细的步骤和示例,读者将学会如何创建和部署云函数,以及如何使用云数据库来存储和管理小程序的数据。同时,本文还介绍了如何通过HTTP触发器实现小程序与外部API的数据交互,从而为小程序开发提供更灵活、高效的后端解决方案。无论您是初学者还是有一定经验的开发者,本文都将帮助您轻松掌握微信小程序云开发,并为您的小程序开发项目提供更多可能性。
3296 0
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
|
Go 索引
Golang深入浅出之-切片(Slices)入门:创建、操作与扩容机制
【4月更文挑战第20天】Go语言中的切片是动态数组,提供灵活的操作和自动扩容。本文介绍了切片的创建(通过`make()`、数组创建和切片字面量)、基本操作(索引访问、切片、赋值追加和遍历)以及扩容机制(首次和后续扩容策略)。此外,还强调了切片与底层数组的关系、切片越界问题、`append()`的使用以及理解切片的关键点,帮助提升Go编程效率和代码质量。
607 0
|
分布式计算 数据可视化 大数据
阿里云大数据ACA及ACP复习题(71~80)
本人备考阿里云大数据考试时自行收集准备的题库,纯手工整理的,能够覆盖到今年7月份,应该是目前最新的,发成文章希望大家能一起学习,不要花冤枉钱去买题库背了,也希望大家能够顺利通关ACA和ACP考试。
|
移动开发 缓存 JavaScript