ES6 环境下 Openlayers 集成使用 ol-ext 以及在线示例
ES6 环境下 Openlayers 集成使用 ol-ext 以及在线示例
- ol-ext 简介
- 版本说明
- 打包后体积
- 集成方式
- 在线示例
最近打算重新封装一下 Openlayers,方便前端人员使用,基础功能没什么可说的,毕竟 Openlayers 的示例和 API 已经非常友好了。
想增加一些地图酷炫的功能,但是能力和时间有限,于是把心心念的 ol-ext 集成进去。
经过初步测试,集成 ol-ext 的图形要素动态效果模块,对于项目打包体积影响较小,可以放心集成。
由于官方示例和百度搜的博客,绝大多数都是 ES5 原生 JavaScript 版本的,对于初学者不太容易参考,于是这里总结一下 ES6 环境下的使用。
本文主要包括:ol-ext 简介、使用版本、打包体积对比、集成使用方式、在线示例。
ol-ext 简介
Openlayers 本身已经非常完善,地图功能也基本能满足项目需求。
而 ol-ext 是一个开源的、基于 Openlayers 的扩展工具,主要是增加一些操作工具、几何样式、动画效果等功能。
官网地址:项目 githup 在线示例
版本说明
node 版本:v16.16.0
npm 版本:8.17.0
Openlayers 版本:7.2.2
ol-ext 版本:4.0.4
谷歌版本:109.0.5414.75
打包后体积
1. 未集成 ol-ext 时的体积
2. 只集成所需要 ol-ext 模块(Featureanimation,图形要素弹跳效果)时的体积,只有几K大小。
import Bounce from 'ol-ext/featureanimation/Bounce'
3. 集成所有模块时的体积,这里可以看到,大概5-600K的样子,Gzip 压缩也可以接受。
import * as olext from 'ol-ext'
在实际使用中,不一定要把所有功能都集成进去,按需使用即可。
集成方式
ES5 传统 JavaScript 使用方式这里不做过多介绍,参照官方即可。
ES6 集成方式也比较容易,只是当时想的有点跑偏,也没仔细看源码,耽误了一些时间。
接下来以图形要素 Feature 的弹跳效果来介绍 ol-ext 的集成使用方式。
ol-ext 通过扩展 VectorLayer 类的方法,来实现图形要素的动态效果,详见以下核心代码注释。
核心代码:
1. 基于 Openlayers 的 VectorLayer 类扩展
import VectorSource from "ol/source/Vector";
import OLVectorLayer from "ol/layer/Vector";
import Bounce from 'ol-ext/featureanimation/Bounce'/*** @todo 矢量图层类,增加动态效果* @author Southejor Zhao <zf2008e57@buaa.edu.cn>* @date 2023/2/1 16:13* @description*/
export default class VectorLayer extends OLVectorLayer {constructor(options) {// 默认参数const defaultOptions = {zIndex: 1,};// 这里防止报错,先合并一次options = Object.assign({}, defaultOptions, options);// 创建矢量资源对象options.source = options.source || new VectorSource();super(options);}bounce(feature, options) {const defaultOptions = {// 振幅amplitude: 50,// 弹跳次数bounce: 30,// 持续时间duration: 10000,// 是否反转方向revers: true};// 这里防止报错,先合并一次options = Object.assign({}, defaultOptions, options);// 调用父类动态效果方法super.animateFeature(feature, [// 弹跳效果对象,注意:这里还可以传入其他效果(滑动、缩放、掉落等)new Bounce(options)]);}
}
2. 调用方法
// 点数据
const point = 'POINT(116.39132826940465 39.9055682341411)';// 创建图层对象,注意:这里是上边自定义的类,而非 openlayers 原生类
const vectorLayer = new VectorLayer(mymap);// 添加到地图中
map.addLayer(vectorLayer)// 创建图形要素对象,原生 openlayers 对象
const feature = new Feature(point);// 将图形要素添加到地图中
vectorLayer.getSource().addFeature(feature)// 调用弹跳效果方法
vectorLayer.bounce(feature)
3. 源码解释
开始我也很疑惑,为啥引入 ol-ext/featureanimation/Bounce
之后,就会有 animateFeature()
方法。
后来查看源码发现:ol-ext/featureanimation/Bounce
继承 'ol-ext/featureanimation/FeatureAnimation'
而 'ol-ext/featureanimation/FeatureAnimation'
中扩展了 animateFeature()
方法:
ol-ext 以前的版本,好像是需要手动对某个类进行扩展,现在的新版本省略了这个过程,和 Openlayers 兼容的很好,拿过来直接用就行。
在线示例
示例默认加载 10 个星星点状图形要素,也可以添加线段和多边形;点击地图可以继续添加星星。
Openlayers 自定义投影坐标系转换工具:Openlayers ol-ext bounce
ES6 环境下 Openlayers 集成使用 ol-ext 以及在线示例相关推荐
- .NET环境下每日集成
本系列主要介绍了.Net环境下如何使用CruiseControl.Net进行每日集成 .NET环境下每日集成(1):简介 .NET环境下每日集成(2):CruiseControl.Net安装 .NET ...
- Oracle 环境下 GoldenGate 集成抽取(Integrated Capture)模式与传统抽取模式(Classic Capture)间的切换...
检查抽取进程模式 在 GGSCI 环境下,执行类似如下语句查看特定进程的状态. GGSCI> info <Group_Name> 其中,<Group_Name> 为进程名 ...
- spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
一,学习背景 1. 前言 对于我们不管工作还是生活中,需要或者想去学习一些东西的时候,大致都考虑几点: a) 我们为什么需要学习这个东西? b) 这个东西是什么? c) ...
- 在Linux环境下配置集成环境
python环境配置 1.查看python3的版本 命令是:python3 -V 2.安装pip3,如果已经安装,则跳过此步 sudo apt install python3-pip 2.1 如果一直 ...
- .NET环境下每日集成(4):CruiseControl.Net配置注意事项
. 今天机器改了密码,启动不了,解决方法如下 设置为当前登录的用户名和密码 2. 我为web引用了log4net.dll,编译时本地成功,但是CruiseControl.Net编译不成功,经过查看日志 ...
- VUE开发环境下mock模拟数据与后端接口对接示例
在以往的前端开发中,前端严重依赖后端,必须等待后端接口开发出来才能继续开发.使用mock,可以使得前后端开发异步进行,互不影响.Mock.js 是一个模拟数据生成器,使用它可以拦截ajax请求,直接模 ...
- windows下集成maven+eclipse开发环境二:集成maven到eclipse,并使用nexus作为maven仓库...
上一章中,我们已经成功安装了nexus,现在我们将在eclipse中集成maven插件,并将nexus配置成maven的仓库. 1.安装eclipse的svn插件subeclipse,打开你的ecli ...
- phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module……
phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module-- 废话不多说,我只提供一种情况下的解决思 ...
- 【Rhapsody学习笔记(二)】Linux环境下的Rhapsody集成引擎安装部署
Rhapsody的安装部署包括Rhapsody引擎的部署(服务端),以及Rhapsody IDE(客户端)的安装部署,其中,IDE可以安装在多台不同的windows客户机上,本文仅介绍CentOS7环 ...
最新文章
- 基于快速原型模型建立商业呼叫中心SPOMP的应用研究
- python实现人脸识别复杂么_人脸识别没有那么复杂,Python一行代码就可以办到
- [HIHO1323]回文字符串(区间dp)
- GraphQL的schema定义文件加载到内存里的例子
- win7 64安装工商网银U盾软件
- python List中元素两两组合
- python书籍推荐:Python Cookbook第三版中文
- oracle startup open ora 03113,Oracle 11g startup时报ORA-03113通信通道的文件结尾
- 如何在CentOS系统服务器下搭建代理IP
- top--查看服务器CPU及内存使用情况
- Python全栈开发-gitgithub快速入门
- Linux-lsxxx
- 计算机网络层包括哪些设备,网络层的设备有哪些
- JavaWeb — 系统结构分析
- CISCO和华为交换机修改密码
- 12.22 @烤仔建工 | 烤仔家具城建设中……
- 中高级JAVA工程师-面试题汇总
- 几个在线画图的工具,以备偷懒之需
- 【精品】轻松部署ceph分布式存储集群
- 2022-01-24 工作记录--CSS-TweenMax动画效果
热门文章
- 简单易懂的沉浸式状态栏使用详解(1)——状态栏全透明(含虚拟按键适配)
- 华南农业大学计算机专业学硕20,2020华南农业大学电子工程学院招收计算机方向学硕及专硕...
- 8核服务器cpu配套主板芯片,三款8核16线程处理器对比,看看谁才是你最好的选择...
- svg转css font,svg转font字体方案
- 单片机菜单-菜单数据结构
- IC基础知识(一)CMOS器件
- 边缘检测robert原理_有源电扫相控阵天线原理(视频)
- 数据可视化之美:经典案例与实践解析
- IDEA查询控制台打印的历史数据
- 玩转 Windows Terminal