ArcGIS API for JavaScript 3.x 添加动态波纹标注

news2024/11/29 11:33:29

模拟波纹效果基于 arcgis 3.x,

先看效果图:

 

实现思路

波纹是由两个图层组成,圆点+动态圆,主要借助于'esri/geometry/Point''esri/symbols/SimpleMarkerSymbol',这两个类。

Point创建点,

SimpleMarkerSymbol创建一个圆,并且通过api( markerSymbol.setSize(15);  markerSymbol.setColor([255, 0, 0, 0.85]) ) 来定时控制圆的大小和透明度。

如果地图中只要一个波纹标注,可通过定时器实现即可,但是如果页面地图中有多个点的标注,开一堆定时器并不容易操控。

后来我的思路是把定位的图层先放到一个数组中,等所有的图层标注完成后,在开一个定时器来统一设置圆图层的大小和透明度。这样就避免了每个标注点开一个定时器的烦恼。但这样会有一个小小的瑕疵,就是各个标注图层放大缩小都是统一的(就如上面效果图一样),但这样也是可以解决的,其实在给图层设置半径大小的时候,最初添加一个随机数就可以了,不需要每个图层半径大小开始都一样。

以下是主要代码,其他不在过多赘述:

一:创建一个人员标注图层,方便后期其他业务统一管理(比如标注图层的清除等)。

this.peoplePositionLayer = new this.gisConstructor.GraphicsLayer({
        id: 'peoplePostionLayer',
        className: 'custom-position-layer',
      })

二、波纹图层

drawPeoplePosition(longitude,latitude){   
     // 根据经纬度标注点
        var point = new this.gisConstructor.Point(longitude,latitude);

        // 创建符号类实例    
        // 这里创建的是红色实心圆点
        var markerSymbol = new this.gisConstructor.SimpleMarkerSymbol();
        // 设置实例样式
        markerSymbol.setStyle(this.gisConstructor.SimpleMarkerSymbol.STYLE_CIRCLE);
        // 设置圆点半径--这个是那个实心圆点
        markerSymbol.setSize(15);
        // 设置圆点rgba
        markerSymbol.setColor([255, 0, 0, 0.85]);
        markerSymbol.setOutline(null);
        var graphic = new this.gisConstructor.graphic(point, markerSymbol);
        // 添加到自定义图层中
        this.peoplePositionLayer.add(graphic);
        
        // 创建符号类实例    
        // 这里创建的是红色半透明圆-后面就是控制该实例半径和透明图实心波纹效果
        var rippleSymbol = new this.gisConstructor.SimpleMarkerSymbol();
        rippleSymbol.setStyle(this.gisConstructor.SimpleMarkerSymbol.STYLE_CIRCLE);
         // 设置初始半径
        rippleSymbol.setSize(5);
        rippleSymbol.setOutline(null);
        // 设置圆rgba
        rippleSymbol.setColor([255, 0, 0, 1]);
        var rippleGraphic = new this.gisConstructor.graphic(point, rippleSymbol);
         // 添加到自定义图层中
        this.peoplePositionLayer.add(rippleGraphic);
        // 把标注的图层依次放入数组中
        // 后面统一设置半径大小和透明度
        this.rippleGraphicArr.push(rippleGraphic);
}

三、统一设置波纹圆的大小和透明度(这里我没有用定时器,改用请求动画帧这样效果过渡更加自然)

step(){
    // 循环定位标注图层
      this.rippleGraphicArr.forEach(rippleGraphic=>{
           // 获取当前标注图层半径大小
            // 并设置图层半径放大的粒度
          var size = rippleGraphic.symbol.size;
          size += 2;
            // 圆图层放到最大即波纹消失,重置图层半径
          if (size > 100) {
             rippleGraphic.symbol.setSize(0);
           
          } else {
            rippleGraphic.symbol.setSize(size);
          }
          let alpha=(101-size)/100;
        // 设置颜色透明度
          rippleGraphic.symbol.setColor([255, 0, 0, alpha]);
        // setSymbol 这个方法必须调用,否则不生效,重绘标注圆图层
          rippleGraphic.setSymbol(rippleGraphic.symbol)
        
      });
      this.animateID= window.requestAnimationFrame(this.step);
    },

最后调用step() 方法即可。

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

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

相关文章

理化生实验室常用实验仪器清单及用途说明

理化生实验室除了常见的玻璃器皿,作为实验室中同样重要的一部分,实验仪器也是不可或缺,其可以有效地提高实验精度与效率。下面,就为大家盘点一下实验室都有哪些常见的实验仪器。 显微镜的用途主要用于放大微小物体成为人的肉眼所…

Acceptance-Rejection Sampling

Acceptance-Rejection Sampling 文章目录 Acceptance-Rejection Sampling[toc]1 接受拒绝采样2 Acceptance-Rejection 采样实现 1 接受拒绝采样 给定随机变量 X X X服从pdf为 f ( x ) f(x) f(x)的分布,例如 f ( x ) f(x) f(x)为正态概率密度函数,我们可…

js 字符串拼接的4种方法

一、使用连接符 把想要连接的字符串串起来 let shy 帅哥 let a 我是 shy console.log(a) // 我是帅哥 二、模板字符串 模板字符串(template string)是增强版的字符串,用反引号()标识,特点&#xff1a…

【C++】-6- 模板初阶

文章目录 引入——泛型编程一、函数模板1.函数模板格式2.函数模板原理3.模板的实例化4.模板参数的匹配原则 二、类模板0.引入1.类模板的定义格式2.类模板的实例化 引入——泛型编程 如果我们需要实现不同数据类型的Swap函数,需要手写很多内容类似的结构。如下。 v…

【Gragph Data Mining】VF2算法 — 图同构匹配的算法

VF2算法是一种用于图同构匹配的算法,可以判断两个图是否同构。VF2算法最初由L. P. Cordella等人在1981年提出,后经过多次改进和优化,已成为常用的图同构匹配算法之一。VF2算法的基本思想是通过递归地搜索两个图的节点匹配,从而判断…

总结847

学习目标: 月目标:5月(张宇强化前10讲,背诵15篇短文,熟词僻义300词基础词) 周目标:张宇强化前3讲并完成相应的习题并记录,英语背3篇文章并回诵 每日必复习(5分钟&#…

概率密度函数可视化

概率密度函数可视化 文章目录 概率密度函数可视化[toc]1 一维随机变量情形2 二维随机变量情形 1 一维随机变量情形 以正态概率密度函数为例,其中位置参数为 μ \mu μ,尺度参数为 σ \sigma σ, f ( x ) 1 2 π σ e − ( x − μ ) 2 2 σ…

ChatGPT聊天新玩意:如何让AI成为你的聊天好友?

目录 引言: 案例: 淄博旅游第一版本: 分析: 淄博旅游第二版本: 分析: 总结: 万能公式: 引言: ChatGPT是什么?今天用一句话概括,它就是新…

翻译: 面向开发人员的GPT提示工程 GPT Prompt Engineering for Developers

1. 提示指南Guidelines for Prompting 在本课中,您将练习两个提示原则及其相关策略,以便为大型语言模型编写有效的提示。 In this lesson, you’ll practice two prompting principles and their related tactics in order to write effective prompts …

7搜索管理

7搜索管理 7.1 准备环境 7.1.1 创建映射 创建xc_course索引库。 创建如下映射 post:http://localhost:9200/xc_course/doc/_mapping 参考 “资料”–》搜索测试-初始化数据.txt { "properties": { "description": { "type": &…

C语言操作符详解

该内容全部代码请看:gitee仓库 第一部分: 板书部分: 1、操作符的分类: 注意: 移位操作符和位操作符 单目操作符中有sizeof 逗号表达式 2、算术操作符: 注意: 除法的使用 取模运算 3、移位操…

485接口的温湿度传感器和RJ45接口的温湿度传感器选择分析

工业以太网RJ45接口 网口温湿度传感器和RS485信号输出温湿度传感器的分析对比 主要适用场合:大型厂房、跨区域机房、多机房、机柜、数据机房、服务器机房、大数据中心、户外电站等 主要区别:以太网温湿度传感器输出信号RJ45,RS485温湿度传…

【JAVA面试】缓存穿透、缓存击穿、缓存雪崩

提示:文章先作为初版,等后续时间充足后,补充更深的内容 文章目录 缓存穿透、缓存击穿、缓存雪崩一、区别二、线程安全问题 缓存穿透、缓存击穿、缓存雪崩 一、区别 缓存穿透(Cache Penetration): 缓存穿…

展会邀请丨虹科诚邀您5月12日于北京参与制药行业质量控制技术论坛

2023年上半年,虹科圆满举办了成都CPQC与杭州药安大会,在两场顺利进行的展会上,虹科的产品广受青睐,也获得了许多客户的认可与信赖,虹科也将继续以优质的产品和解决方案解决您的问题。 5月12-5月13日,虹科将…

卷积神经网络(CNN):基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。随着小卫星星座的普及,对地观测已具备多次以上的全球覆盖…

arm安装pyrealsense

arm安装pyrealsense – Step 1 – conda install numba pip install opencv-python pip install scipy – Step 2 pyrealsense2 – 参考 https://github.com/35selim/RealSense-Jetson 编译安装pyrealsense2 git clone -b v2.50.0 --depth1 https://github.com/IntelRealSens…

【Java】哈希冲突(哈希碰撞)

文章目录 为什么发生哈希冲突(哈希碰撞)能否完全避免哈希冲突常用处理哈希冲突的方法1.开放地址法1.1线性探测再散列缺点:二次聚集 1.2二次探测再散列1.3伪随机探测再散列 2.再哈希地址法3.链地址法4.建立公共溢出区 为什么发生哈希冲突&…

2C 兼容和小技巧 合集

这里写自定义目录标题 2C 兼容小技巧 合集修改input date默认框的小图标 2C 兼容小技巧 合集 以前一直是2b端没遇到过啥兼容性 或者 奇奇怪怪改UI的地方,现在换成C端业务,就在这里记录下遇到的奇奇怪怪的需求以及解决办法吧。 这篇文章争取 长久更新&am…

Kali-linux枚举服务

枚举是一类程序,它允许用户从一个网络中收集某一类的所有相关信息。本节将介绍DNS枚举和SNMP枚举技术。DNS枚举可以收集本地所有DNS服务和相关条目。DNS枚举可以帮助用户收集目标组织的关键信息,如用户名、计算机名和IP地址等,为了获取这些信…

Redis持久化:RDB和AOF

Redis持久化:RDB和AOF Redis 数据存储在内存中,如果不想办法将数据保存到硬盘上,一旦Redis重启(退出/故障),内存的数据将会全部丢失。我们肯定不想 Redis 里的数据由于某些故障全部丢失(导致所有请求都走 MySQL),即便发…