码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【arcgis】地图数据加载优化方法


    一、将远程字库替换为本地字库

    参考文章:https://blog.csdn.net/lf5566fl/article/details/127667321

    二、graphicLayer替代FeatureLayer

    如果是动态加载图斑尽可能用graphicLayer替代FeatureLayer提升效率
    但要明确需求 如果有很高的样式要求,FeatureLayer能实现更灵活。

    三、使用sleep函数实现延迟执行地图数据请求

    在arcgis js api使用过程中,地图操作响应可能出现多次快速重复触发响应,但实际上我们不抱希望刷新数据的频率过高,希望用户在滚动或滑动地图界面时,只取最终的缩放、移动参数进行数据请求,因此需要用到sleep方法。在原生js中并不存在sleep方法,因此推荐以下两种实现代码参考。

    参考资料:javascript 使用sleep函数的常见方法详解

    1、实现基于async函数实现sleep

    let timeclear=false;
    
    function sleep(time){
     return new Promise((resolve) => setTimeout(resolve, time));
    }
    
    async function refresh(){
    	console.log('触发arcgis响应事件')
     if(!timeclear){
    	 timeclear=true;
    	 console.log('刷新地图数据')
    	 await sleep(5000);
    	 timeclear=false;
     }
    }
    
    setInterval(function(){ refresh() }, 1000); //模拟arcgis js api地图事件多次快速重复触发响应
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2、使用npm sleep包实现sleep
    npm安装sleep模块(官网地址)

    npm i sleep
    
    • 1
    let timeclear=false;
    let sleep = require('sleep');
    
    function refresh(){
    	console.log('触发arcgis响应事件')
     if(!timeclear){
    	 timeclear=true;
    	 console.log('刷新地图数据')
    	 sleep.sleep(2); //休眠2秒钟
         //sleep.msleep(1000); //休眠1000毫秒
         //sleep.usleep(1000000) //休眠1000000微秒 = 1秒
    	 timeclear=false;
     }
    }
    
    setInterval(function(){ refresh() }, 1000);  //模拟arcgis js api地图事件多次快速重复触发响应
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    四、使用数据聚合

    如果点位/多边形数量分布范围较大,一般需要做聚合操作。

    1、数据量如果不大,可在前台实现数据聚合,优化视觉效果。
    arcgis api js前端聚合参考:
    aggregate官方案例1
    aggregate官方案例2
    在这里插入图片描述

    设置启用聚合:

    layer.featureReduction = {
      type: "cluster"
    };
    
    • 1
    • 2
    • 3

    聚合配置:

    const clusterConfig = {
              type: "cluster",
              clusterRadius: "100px",
              // {cluster_count} is an aggregate field containing
              // the number of features comprised by the cluster
              popupTemplate: {
                title: "Cluster summary",
                content: "This cluster represents {cluster_count} earthquakes.",
                fieldInfos: [{
                  fieldName: "cluster_count",
                  format: {
                    places: 0,
                    digitSeparator: true
                  }
                }]
              },
              clusterMinSize: "24px",
              clusterMaxSize: "60px",
              labelingInfo: [{
                deconflictionStrategy: "none",
                labelExpressionInfo: {
                  expression: "Text($feature.cluster_count, '#,###')"
                },
                symbol: {
                  type: "text",
                  color: "#004a5d",
                  font: {
                    weight: "bold",
                    family: "Noto Sans",
                    size: "12px"
                  }
                },
                labelPlacement: "center-center",
              }]
            };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    2、数据量如果比较大,可在后台实现数据聚合计算,优化数据加载。
    逻辑

  • 相关阅读:
    Kubernetes概述及其组件/核心组件
    SonarQube 安装
    Zerotier免费的虚拟局域网
    Hadoop和关系型数据库间的数据传输工具——Sqoop
    使用adobe font style 工具绘制的艺术字,请鉴赏。
    RK3568平台开发系列讲解(安卓适配篇)Android 源码的 device 目录
    [Spring]第二篇:IOC控制反转
    C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点
    【webrtc】call:RtpTransportControllerSend 基于RTP的传输链路控制(包括收发)和MediaSoup cc简单对比
    【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器
  • 原文地址:https://blog.csdn.net/qq_35079107/article/details/127609552
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号