高德局部刷新标记点,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()设置缩放,视图达到刷新,问题解决。

相关文章
|
5月前
|
移动开发 前端开发 JavaScript
惊爆!一键解锁HTML父页面神秘技能,子页面Dialog华丽登场,让你的网页交互瞬间高大上,用户体验飙升!
【8月更文挑战第4天】在Web开发中,常需从父页面弹出子页面或对话框(Dialog)进行互动。HTML5虽引入了&lt;dialog&gt;元素,但许多开发者偏好使用自定义方案以获得更好的兼容性和样式控制。本示例利用HTML、CSS及JavaScript创建一个可弹出子页面的模态框:首先,在父页面中定义一个按钮触发弹出效果;接着,设置隐藏的模态框容器,内含一个iframe用于加载子页面;然后,通过CSS设定模态框样式;最后,借助JavaScript控制模态框的显示与隐藏。此方案灵活且易于定制,适用于多种应用场景。
129 12
|
5月前
|
JSON JavaScript 前端开发
震惊!JS如何悄无声息追踪你的每一步?揭秘页面访问与关闭的超级上报大法,让数据说话,优化体验不再难!
【8月更文挑战第4天】在Web开发中,跟踪用户行为对提升体验与留存至关重要。本文以在线学习平台为例,介绍如何用JavaScript监听页面访问及关闭,并上报数据。通过`window.onload`监测页面加载,记录用户访问;利用`navigator.sendBeacon`在用户离开时发送少量数据至服务器,无需担心请求失败。需注意隐私合规、性能影响及浏览器兼容性。此技术有助于深入理解用户行为,为产品迭代提供依据。
222 8
|
6月前
动态颤抖的眼睛效果404页面源码
动态颤抖的眼睛效果404页面源码, 源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
37 1
|
8月前
|
SQL 前端开发 JavaScript
终于弄懂了Layui表格重载数据(中途被女朋友劝反附聊天记录)
终于弄懂了Layui表格重载数据(中途被女朋友劝反附聊天记录)
183 0
|
前端开发 IDE 开发工具
「趣学前端」页面上吸顶的效果是怎么做到的
用技术实现梦想,用梦想打开创意之门。为了给不懂技术的朋友讲解日常开发中怎么实现网页的效果,我准备出一个系列。
187 1
|
JavaScript Android开发 数据安全/隐私保护
移动端爬坑记 --- (1)布局与样式上的奇葩偶遇
Flex想要兼容众多花样式手机,要注意以下这么些 • 前缀要考虑2009~2012年的语法[webkit-box,flex,flex-box] • 少用复合属性,比如flex:1,考虑兼容理应拆成[flex-grow,flex-shrink,flex-basis];flex-flow拆开成[flex-direction,flex-wra
151 0
|
JavaScript 容器 前端开发
一些JS事件小片段代码整理收集(持续)
一、js实现 1 2 3 4 5 function AcceptData(num){ 6 document.getElementById("accepDate").value+=num; 7 } 8 9 10 11 12 13 14 15 16  二、input输入框的value传值显示 input输入框中用户输入的值,点击按钮显示在另一个容器之中。
1053 0
|
Android开发 UED 数据安全/隐私保护
Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏
原文:Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏   大家会发现一个空项目,从手机桌面打开app是秒启动。但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面。
1450 0