当前位置: 首页 > news >正文

金融软件网站建设公司网站模板购买 优帮云

金融软件网站建设公司,网站模板购买 优帮云,如何自己创建一个小程序,找装修公司电话问题说明 在地图开发中#xff0c;当地图中绘制大量的标记点后#xff0c;无论是拖动或者缩放#xff0c;都会感觉到明显的卡顿现象。#xff08;一般超过800个点后就比较明显了#xff09;.在平时的工作业务中#xff0c;由于公司的实时监控页面需要展现5000-20000车辆…问题说明 在地图开发中当地图中绘制大量的标记点后无论是拖动或者缩放都会感觉到明显的卡顿现象。一般超过800个点后就比较明显了.在平时的工作业务中由于公司的实时监控页面需要展现5000-20000车辆的实时定位跟踪特别是切换到车辆密集的港口码头卡顿现象非常严重(如下图)看起来非常难看用户体验也非常差。在此写下一些开发优化中的心得体会(本文中使用的是高德地图为参考)。 解决思路 首先我们应该将地图上的所有覆盖物(包括Marker,Icon,Text,Polygon)分组添加到多个OverlayGroup中对每一类统一管理。部分覆盖物默认隐藏需要时才展现。 不要将大量的覆盖物信息都直接挂载在地图对象上可以按需加载减少地图在移动后重新渲染的工作量 合理的使用覆盖物聚合聚合虽然会减少卡顿但是覆盖物数量太多依旧会比较卡 解决方法 首先添加一个地图设置勾选面板将除车辆点标记以外的所有覆盖物按类型分类添加到一个个单独的OverlayGroup中默认不挂载在地图上在勾选时才调用OverlayGroup.setMap(map)方法添加到地图上。去掉了这些不必要覆盖物首次进入时立马清爽了许多。 尽管去掉了各类网点文字等覆盖物但是我们需要渲染的车辆标记点依旧是非常多的。在此基础上我们采用按屏幕加载筛选出屏幕内的点屏幕外的标记点不渲染监控每次地图的moveendzoomendresize每次的改变后重新计算屏幕内的标记点当屏幕内标记点较少比如200以下(这个随个人需要定)直接绘制在地图上。当屏幕内标记点比较多大于200调用聚合方法将标记点聚合后绘制在地图上。 参考代码 /**监听地图拖拽放大事件根据屏幕范围动态渲染点位 */reloadMarks(){AMap.event.addListener(this.map,moveend,() {this.computeMarkers();})AMap.event.addListener(this.map,zoomend,() {this.computeMarkers();})AMap.event.addListener(this.map,resize,() {this.computeMarkers();})},/** 根据当前屏幕范围帅选marker */computeMarkers(){this.newViewData{};//获取当前视图范围let now_bounds this.map.getBounds();//遍历车辆数据为了减少后台传入的重复数据我的车辆信息列表一直使用对象保存for(let sel_deviceNo in this.carDataObj0){let itemthis.carDataObj0[sel_deviceNo];//判断当前点的坐标是否存在于视图内if(now_bounds.contains(item.gcj02_coords.split(,))){//将当前屏幕内的视图点保存this.newViewData[sel_deviceNo] item;}}this.renderMarker();now_boundsnull;},/** 创建聚合**/createCluser(markerArr) {AMap.plugin([AMap.MarkerClusterer], () {this.cluster new AMap.MarkerClusterer(this.map, markerArr, {gridSize: 80,renderCluserMarker,minClusterSize: 1,maxZoom: 18});})},/** 将markers渲染到map上 */renderMarker(){//判断目前是否有当前覆盖物组!this.overLayGroup this.overLayGroup new AMap.OverlayGroup([]);let MarkerAddArr [];for(let sel_deviceNo in this.newViewData){/**我的所有创建的Marker点对象都是长期存在于this.markerObj中并不销毁每次数据更新后调用marker对象的setPosition(),setAngle(),setIcon()等方法改变状态再筛选出需要挂载上的一起加到地图上 **/if(this.markerObj[sel_deviceNo]){MarkerAddArr.push(this.markerObj[sel_deviceNo]);}}this.overLayGroup.clearOverlays();//超过200个点则开启聚合模式 且在聚合模式下不渲染面板展示点if(MarkerAddArr.length200){if(this.cluster){this.cluster.clearMarkers();this.cluster.setMarkers(MarkerAddArr);}else{this.createCluser(MarkerAddArr);}}else{if(this.cluster){this.cluster.clearMarkers();}this.overLayGroup.addOverlays(MarkerAddArr);this.overLayGroup.setMap(this.map);}MarkerAddArrnull;},代码直接从业务中复制的耦合度比较高还请见谅。 做完了标记点按屏幕分组加载之后我们在添加一个简单的防抖方法,防止连续的拖动或者缩放导致computeMarkers方法被触发减少方法调用次数 const debounce (fn, wait500) {return function() {clearTimeout(fn.timer)fn.timer setTimeout(fn.bind(this, ...arguments), wait)} }完成后效果如下减少了地图的计算与渲染每次只计算视野内的点数因此总数的大小不会影响地图性能当视野内超过200个点都会聚合200以下时显示。 平时写文章比较少文笔很差还请多多见谅谢谢。
http://www.yutouwan.com/news/238063/

相关文章:

  • 门户网站 建设商 排名怎么做刷业务网站
  • 什么是灰色网站电子工程专辑
  • 要怎样夸一个网站做的好看建立网络平台需要什么
  • 建行生活网页版登录入口塘沽网站优化
  • 网站开发公司人员配备电子商城网站开发项目描述
  • 单页网站排名没有网站制作高手
  • 一站式网站建设架构网站设计作品案例讲解
  • 包头 网站制作wordpress文章无法使用
  • 企飞互联网站建设网络公司wordpress运行时间
  • jsp网站开发的优点北京网站建设方案
  • 免费网站教程青岛销售系统app开发
  • 北京梦创义网站建设广州企业网站营销电话
  • 母婴用品商城网站建设电商企业网站建设的一般要素有哪些
  • 湛江网站设计公司php免费网站建设
  • 长春做网站建设的公司百度推广广告公司
  • 政务公开既网站信息化建设会议wordpress标签有什么用
  • 搭建公司内部网站营销型网站建设 课程
  • 快站建站怎么收费的网站建设 英语翻译
  • 模板包下载网站在网站开发中如何设置用户登录
  • 夺宝网站还可以做吗一个网站可以做多少个关键词
  • 长安镇仿做网站网站的横幅怎么做的
  • 公司请人做的网站 域名属于谁wordpress 文章段落
  • 网站开发项目的简介广告创意设计与制作
  • 中国网站设计师东莞中高风险地区
  • 伪静态 网站网站开发维护合同模板电子版
  • 网站制作公司多少钱一年论坛模板
  • 邵阳建设网站公司哪个网站可以做高像素动图
  • 湘潭哪里做网站 电话做网站月薪资多少钱
  • 做甜品网站栏目亚i洲人页码24林妹妹
  • 网页制作作业网站安徽做网站公司哪家好