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 以及在线示例相关推荐

  1. .NET环境下每日集成

    本系列主要介绍了.Net环境下如何使用CruiseControl.Net进行每日集成 .NET环境下每日集成(1):简介 .NET环境下每日集成(2):CruiseControl.Net安装 .NET ...

  2. Oracle 环境下 GoldenGate 集成抽取(Integrated Capture)模式与传统抽取模式(Classic Capture)间的切换...

    检查抽取进程模式 在 GGSCI 环境下,执行类似如下语句查看特定进程的状态. GGSCI> info <Group_Name> 其中,<Group_Name> 为进程名 ...

  3. spring Boot环境下dubbo+zookeeper的一个基础讲解与示例

    一,学习背景 1.   前言 对于我们不管工作还是生活中,需要或者想去学习一些东西的时候,大致都考虑几点: a)      我们为什么需要学习这个东西? b)     这个东西是什么? c)      ...

  4. 在Linux环境下配置集成环境

    python环境配置 1.查看python3的版本 命令是:python3 -V 2.安装pip3,如果已经安装,则跳过此步 sudo apt install python3-pip 2.1 如果一直 ...

  5. .NET环境下每日集成(4):CruiseControl.Net配置注意事项

    . 今天机器改了密码,启动不了,解决方法如下 设置为当前登录的用户名和密码 2. 我为web引用了log4net.dll,编译时本地成功,但是CruiseControl.Net编译不成功,经过查看日志 ...

  6. VUE开发环境下mock模拟数据与后端接口对接示例

    在以往的前端开发中,前端严重依赖后端,必须等待后端接口开发出来才能继续开发.使用mock,可以使得前后端开发异步进行,互不影响.Mock.js 是一个模拟数据生成器,使用它可以拦截ajax请求,直接模 ...

  7. windows下集成maven+eclipse开发环境二:集成maven到eclipse,并使用nexus作为maven仓库...

    上一章中,我们已经成功安装了nexus,现在我们将在eclipse中集成maven插件,并将nexus配置成maven的仓库. 1.安装eclipse的svn插件subeclipse,打开你的ecli ...

  8. phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module……

    phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module-- 废话不多说,我只提供一种情况下的解决思 ...

  9. 【Rhapsody学习笔记(二)】Linux环境下的Rhapsody集成引擎安装部署

    Rhapsody的安装部署包括Rhapsody引擎的部署(服务端),以及Rhapsody IDE(客户端)的安装部署,其中,IDE可以安装在多台不同的windows客户机上,本文仅介绍CentOS7环 ...

最新文章

  1. 基于快速原型模型建立商业呼叫中心SPOMP的应用研究
  2. python实现人脸识别复杂么_人脸识别没有那么复杂,Python一行代码就可以办到
  3. [HIHO1323]回文字符串(区间dp)
  4. GraphQL的schema定义文件加载到内存里的例子
  5. win7 64安装工商网银U盾软件
  6. python List中元素两两组合
  7. python书籍推荐:Python Cookbook第三版中文
  8. oracle startup open ora 03113,Oracle 11g startup时报ORA-03113通信通道的文件结尾
  9. 如何在CentOS系统服务器下搭建代理IP
  10. top--查看服务器CPU及内存使用情况
  11. Python全栈开发-gitgithub快速入门
  12. Linux-lsxxx
  13. 计算机网络层包括哪些设备,网络层的设备有哪些
  14. JavaWeb — 系统结构分析
  15. CISCO和华为交换机修改密码
  16. 12.22 @烤仔建工 | 烤仔家具城建设中……
  17. 中高级JAVA工程师-面试题汇总
  18. 几个在线画图的工具,以备偷懒之需
  19. 【精品】轻松部署ceph分布式存储集群
  20. 2022-01-24 工作记录--CSS-TweenMax动画效果

热门文章

  1. 简单易懂的沉浸式状态栏使用详解(1)——状态栏全透明(含虚拟按键适配)
  2. 华南农业大学计算机专业学硕20,2020华南农业大学电子工程学院招收计算机方向学硕及专硕...
  3. 8核服务器cpu配套主板芯片,三款8核16线程处理器对比,看看谁才是你最好的选择...
  4. svg转css font,svg转font字体方案
  5. 单片机菜单-菜单数据结构
  6. IC基础知识(一)CMOS器件
  7. 边缘检测robert原理_有源电扫相控阵天线原理(视频)
  8. 数据可视化之美:经典案例与实践解析
  9. IDEA查询控制台打印的历史数据
  10. 玩转 Windows Terminal