日常地图表达中我们通常使用的地图符号多是静态地图符号,时间久了会造成视觉审美疲劳,也没有现代感。

在这种背景下,对现有地图符号进行简单处理,即可得到色彩鲜艳,对比度强烈,活灵活现的地图表达形式。

灵感

观察 ArcGIS JS API 带来的原生符号 SimpleMarkerSymbol 在前端对符号进行渲染的结果,简化后的代码如下:

<g id="graphicsLayer1_layer" data-geometry-type="point" style="display: block;">
    <circle fill="rgb(70, 230, 255)" 
    fill-opacity="0.8" 
    stroke="none" stroke-opacity="0" 
    stroke-width="1" 
    stroke-linecap="butt" 
    stroke-linejoin="miter" 
    stroke-miterlimit="4" 
    cx="653" 
    cy="519" 
    r="6" 
    transform="matrix(1.00000000,0.00000000,0.00000000,1.00000000,0.00000000,0.00000000)" 
    fill-rule="evenodd"></circle>
    <circle fill="rgb(70, 230, 255)" 
    fill-opacity="0.8" 
    stroke="none" 
    stroke-opacity="0" 
    stroke-width="1" 
    stroke-linecap="butt" 
    stroke-linejoin="miter" 
    stroke-miterlimit="4" 
    cx="764" 
    cy="533" 
    r="6" 
    transform="matrix(1.00000000,0.00000000,0.00000000,1.00000000,0.00000000,0.00000000)" 
    fill-rule="evenodd"></circle>
</g>

这里简单解释下,前端渲染的逻辑。

首先,每个符号化的图层都会使用 <g> 标签来承载该图层中的几何要素。

其次,每个几何要素也会通过不同的标签在前端进行展示,例如上述代码中 <circle> 标签很明显是一个圆形符号,并且可以在标签中看到许多属性信息,例如:

“fill”代表符号的颜色;

“fill-opacity”代表符号的透明度;

“cx”代表屏幕 x 坐标值;

“cy”代表屏幕 y 坐标值;

这里 “cx” 与 “cy” 虽然不会去修改,但是我在测试时发现,当“cx=150”,“cy=0”时,符号的圆心位于屏幕左上角顶点。也就是说未来如果大家想要用代码强行修改一个 <circle> 标签的位置时,可能需要考虑到 x 的偏移值。大家如果发现了这个问题的原因,欢迎评论留言。

上述属性与我们做动效无关,我们能做动效的关键在于控制 <circle> 的半径大小,也就是 “r” 属性。

动效

动效使用 CSS 来写:

@keyframes Warning {
  0% {
    opacity: 1
      }
  50% {
    r: 12;
    opacity: .5
      }
  100% { 
    opacity: 1
      }
}

增加效果

下一步我们需要做的只是用 jQuery 帮我们找到所有几何要素,然后给每个几何要素标签加上动画属性:

map.on('extent-change',function(){
    setTimeout(function(){
        for(var i=0;i<$('#map').find('circle').length;i++){
            $('#map').find('circle')[i].style.animation = "Warning 1s cubic-bezier(0.26, 0.04, 1, 0.67) 0s infinite normal none running";
            $('#map').find('circle')[i].style.animationDelay = Math.random()+'s'
        }
    },1000)

这里有 3 个细节需要说明:

  1. 使用地图缩放监听事件,保证每次地图范围变动,都给每个符号加上动效。

  2. 延迟 1 秒执行的原因是,如果地图缩放就立即执行赋动效语句会无效,因为在每次缩放过程中几何对象会重新渲染,因此延迟 1 秒保证所有点已重绘完成,大家可以自行修改时间,如果有更优方案,欢迎评论留言。

  3. 为优化每个点位的动效渐隐渐现效果,给每个符号加上随机动画延迟。

弯路

在最开始,我以为可以使用样式的 scale 属性来控制圆圈符号的大小,后来测试发现完全错误,缩放会产生偏移和运动,大家可以动手在 Chrome 里尝试下最初的脑洞会带来什么样的效果。

拓展联想

既然圆形符号可以用代码进行修改,那其他类型的符号同理也可以通过属性控制来修改样式。

接下来我会再更新一篇对地图轮廓多边形的控制实操。

大家如有更好的想法,欢迎在评论留言。

ArcGIS API For Javascript :如何在地图上做出点位脉冲闪烁的效果的更多相关文章

  1. ArcGIS API for Silverlight 实现修改地图上的工程点位置

    原文:ArcGIS API for Silverlight 实现修改地图上的工程点位置 #region 处理工程点点击编辑相关事件 public Graphic editgraphics = null ...

  2. ArcGIS api for javascript——查询没有地图的数据

    描述 本例展示了用户能够从没有显示服务的地图服务查询数据.大部分地图服务包含属性信息的数据集,数据集能够被查询并显示在一个简单的列或表格里. 本例按提供的州名称查询USA人口普查数据,然后显示关于州的 ...

  3. Arcgis api for javascript学习笔记(3.2版本) - 匀速行驶轨迹动画效果

    一.前言 有这样一个需求:已知某条线上的n个点的经纬度数组 ,实现物体运行轨迹. 如果这些点中两个距离很近,那么我们可以用一个定时器在地图上每次重新画一个点,这样肉眼看到这个点上的运动效果,如下图代码 ...

  4. ArcGIS API For JavaScript 加载地图,设置地图中心点

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. ArcGIS API for JavaScript使用中出现的BUG(1)

    本人在使用ArcGIS API for JavaScript开发一个地图的搜索框时,总是出现一个BUG.如图所示: 搜索框总是出不来. 该引用的也引用了,找了半天终于解决,是因为路径没有定义详细. 应 ...

  6. ArcGIS API for JavaScript根据两个点坐标在地图上画线

    ArcGIS API for JavaScript根据两个点坐标在地图上画线比如说a(xxxx,xxxxx),b(xxxx,xxxxx).利用这两个点画一条线 var polyline = new e ...

  7. ArcGIS.Server.9.3和ArcGIS API for JavaScript地图实现Toorbar功能(四)

    转自:http://www.cnblogs.com/hll2008/archive/2008/11/22/1338630.html 目的:1.ArcGIS API for JavaScript实现To ...

  8. arcgis api for javascript本地部署加载地图

    最近开始学习arcgis api for javascript,发现一头雾水,决定记录下自己的学习过程. 一.下载arcgis api for js 4.2的library和jdk,具体安装包可以去官 ...

  9. ArcGis API for JavaScript学习——加载地图

    ArcGis API for JavaScript开发笔记——加载地图 在这个例子中使用的离线部署的API(请参见 http://note.youdao.com/noteshare?id=f42865 ...

随机推荐

  1. 生产环境中利用软链接避免"rm -rf /"的方法

      1.将系统中的rm二进制文件重命名为rm_real:2.编写脚本rm_shell,rm_shell中主要包含以下内容:    2.1)路径转换模块,用于将rm_shell参数中的路径转换为绝对路径 ...

  2. Unity的学习笔记(射线检测)

    首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚: 接下来是自己使用这个进行测试 using System.Collections; using System.Collections. ...

  3. go-异常处理-error-panic-recover

    Go语言的函数可以一次返回多个结果.这就为我们温和地报告错误提供了语言级别的支持. func readFile(path string) ([]byte, error) { file, err := ...

  4. git 拉取指定的远程分支(三种方式)

    直接拉取 git clone -b ants git@github.com:Ants-double/CareerJava.git git clone -b 远程分支名 仓库地址 本地已经有相关的仓库代 ...

  5. axios reponse请求拦截以及token过期跳转问题

    前两天项目中遇到了token拦截,需要在请求的header头里放置token,需要用到response拦截,调试过程中遇到了拿不到token的问题 我用的axios实例 let token = sto ...

  6. bash_history文件怎么删除

    Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样可以使你输入使用过的长命令变得容易.每个在系统中拥有账号的用户在他的目录下都有一个 ...

  7. Veins(车载通信仿真框架)入门教程

    Veins入门教程——教你如何下手研究 目录 Veins入门教程——教你如何下手研究 目录 废话少说! 讲解omnetpp.ini!(挑关键的) 讲解RSUExampleScnario.ned! 注意 ...

  8. 四、docker 仓库(让我们的镜像有处可存)

    前言 前面讲完了docker 镜像和容器,以及通过Dockerfile 定制属于我们自己的镜像,那那现在就是需要将我们自己定制的镜像存放到仓库中供他们使用.这一套流程才算是正式走完了.从获取镜像,操作 ...

  9. python str的一些操作及处理

    一.str的定义:Python中凡是用引号引起来的数据可以称为字符串类型,组成字符串的每个元素称之为字符,将这些字符一个一个连接起来,然后在用引号起来就是字符串. 二.str的简单操作方法: conu ...

  10. Jenkins 结合 ANT 发送测试报告

    全局变量配置 点击 ManageJenkins进入Jenkins 管理 点击 Global Tool Configuration 进入全局变量配置 配置 Ant ,Name 自己定义一个比较好理解的名 ...