基于Leaflet的点、线、面、圆等多要素闪烁实现方法
目录
前言
在一些面向公安指挥、应急消防、热搜舆情等应用中,通常为了将实时位置显示出来,凸出当前发生的事情的时空位置。在做WebGIS应用时,不仅要将空间位置,比如事件发生的具体事件点;还有发生了某重大事件之后,需要把一定的缓冲范围的红线在地图上标注出来。Leaflet.js本身是没有这些功能的,但是我们可以结合Leaflet的API和JavaScript的组合来一起实现上面的这些需求。
网上这方面已经有一些博主进行相关技术的分享,但是没有覆盖所有的基础要素。本文不仅介绍了在Leaflet中实现要素的闪烁实现方法,同时还使用代码对点、线、面、圆、矩形等多种要素的具体实现提供了实际可运行代码。如果您当前有这方面的需求,可以看看这篇博客。
文章首先介绍在Leaflet中的技术实现方案,然后介绍了Leaflet中的样式设置基础知识,最后以实际代码的方式给出点、线 、面、圆、矩形等要素的闪烁实现效果。让您充分了解掌握这些基础知识,在项目开发中可以直接应用。
一、技术实现方案
本节首先来分析一下技术实现方案,为了能实现这些图形要素的闪烁,我们首先要来看一下怎么操作这些图形。只有针对的找到了设置方法,才能正确的进行设置。
1、要素属性设置
在Leaflet,我们可以通过控制要素的透明度来实现要素的隐藏和实现。而闪烁可以分解为一定时间周期内的隐藏和闪烁。因此我们使用定时器和透明度设置来实现动态闪烁的效果。首先来看一下Maker和其他的Polygon、circle、rectangle等的透明度设置属性。关于这些对象的属性,大家可以在Leaflet的官网网站中找到相关的说明。下面是Marker的相关属性列表:
选项 | 类型 | 默认 | 说明 |
---|---|---|---|
icon |
|
* |
用于渲染标记(marker)的图标实例。有关如何自定义标记(marker)图标的详细信息,请参阅 | 。如果未指定, 则使用公共实例。
keyboard |
Boolean |
true |
是否可以用键盘标记并按回车键进行点击。 |
title |
String |
'' |
悬停在标记(marker)上时出现的浏览器 tooltip 提示文本内容(默认情况下没有 tooltip 提示)。 | 。
alt |
String |
'Marker' |
Icon图标的 alt 属性提示文本内容。 。 |
zIndexOffset |
Number |
0 |
默认情况下,标记(marker)图像 zIndex 是根据其纬度自动设置的。如果您想将标记置于所有其他标记(marker)之上(或之下),则使用此选项指定一个高值,如 1000 (或高的负值)。 |
opacity |
Number |
1.0 |
标记(marker)的不透明度。 |
riseOnHover |
Boolean |
false |
如果为 true ,当你把鼠标悬停在它上面时,该标记(marker)会在其他标记之上。 |
riseOffset |
Number |
250 |
用于 riseOnHover 功能的 z-index 偏移。 |
pane |
String |
'markerPane' |
Map pane 将添加标记图标的位置。 |
shadowPane |
String |
'shadowPane' |
Map pane 将添加标记阴影的位置。 |
bubblingMouseEvents |
Boolean |
false |
当为 true 时,此标记上的鼠标事件将触发地图上的相同事件(除非使用 )。 |
autoPanOnFocus |
Boolean |
true |
When true , the map will pan whenever the marker is focused (via e.g. pressing tab on the keyboard) to ensure the marker is visible within the map's bounds |
与Maker类似的是,其它的继承自Path对象的其它要素,如Polygon。、Polyline等也是使用这种方式。也是通过修改透明度的方式来进行效果的实现。
二、闪烁效果实现
在明确了上述的技术方案之后,本节我们来重点讲解实现过程。技术实现采用定时器和Leafet的API的方式。
1、Maker的闪烁实现
这里直接贴出代码,marker的闪烁实现较为简单:
在将marker对象添加到map地图中时,会自动进行透明度的设置调用。当我们从map中移除当前的marker,会自动调用clearInterval方法来停止循环调用。下面展示如何在Leaflet中调用这个方法:
实现的效果如下:
以上就是marker对象的实现,熟悉Leaflet对象的朋友都知道。Marker是比较独立的一个类。其它的要素如Polygon、Polyline都是继承自Path对象的。 因此Polygon与Polyline的实现方式有所不同。
2、Path类对象的实现方式
通过上述这张图,大概可以看到。常见的Polyline、Polygon、rectangle、CirleMarker、Cirle都是继承自Path对象的,所以这些对象都需要使用别的定义方式。
与Maker对象不一样的是,这里的调用使用的是requestAnimationFrame,而不是通过定时器的模式。站在前人的肩膀上,可以得到更多有价值的经验。关于requestAnimationFrame和定时器模式的区别,可以看看博主前辈的介绍。如果不是博主的经验分享,我想一定会在循环调用上陷入崩溃,这就是知识分享的益处。
在设置完成了要素闪烁的方法之后,我们在地图上创建对应的子类对象,比如Polygon、Polyline、Circle、Rectangle 后,调用闪烁方法。关键代码如下:
以上就基本实现了在地图上进行点、线、面、圆、矩形等类型要素的闪烁效果的展示。下面给大家看一下视频实际效果。
三、总结
以上就是本文的主要内容,文章首先介绍在Leaflet中的技术实现方案,然后介绍了Leaflet中的样式设置基础知识,最后以实际代码的方式给出点、线 、面、圆、矩形等要素的闪烁实现效果。行文仓促,定有不足之处,欢迎各位朋友在评论区留言指正,不胜感激。文章编写时,参考了以下朋友的博客,受益匪浅。本实例已经整理成压缩包,感兴趣的可以下载
。1、
。2、
。- 点赞
- 收藏
- 关注作者
评论(0)