ES6 环境下 Openlayers 集成使用 ol-ext 以及在线示例

news2024/11/20 11:39:22

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

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

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

相关文章

2023-01-31 CSDN问答中如何防止和惩罚 “偷代码操作“

CSDN问答中如何防止和惩罚 "偷代码操作"前言一. 代码隐藏保护(CSDN官方回复目前无此功能)二. 先占位后抄袭的处理三. 编辑记录是照妖镜总结前言 随着问答的参与时间累积, 逐渐的碰到了一些问题, 常在河边走, 怎能不湿鞋, 原先看到抄代码结果原创没被采纳, 只能报以同…

AcWing 10. 有依赖的背包问题(分组背包问题 + 树形DP)

AcWing 10. 有依赖的背包问题&#xff08;分组背包问题 树形DP&#xff09;一、问题二、分析1、整体分析2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、分析 1、整体分析 这道题其实就是作者之前讲解过的一道题&#xff1a;AcWing 487. 金明的预算方案…

【双向链表】数据结构双向链表的实现

前言&#xff1a; 前一期我们已经学习过单链表了&#xff0c;今天我们来学习链表中的双向链表&#xff01; 目录1.概念以及结构2.双向链表结点结构体3.接口实现3.1动态申请一个结点3.2初始化链表3.3打印链表3.4双向链表尾插3.5 双向链表尾删3.6双向链表头插3.7双向链表头删3.8双…

Linux常用命令——pvscan命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) pvscan 扫描系统中所有硬盘的物理卷列表 补充说明 pvscan命令会扫描系统中连接的所有硬盘&#xff0c;列出找到的物理卷列表。使用pvscan命令的-n选项可以显示硬盘中的不属于任何卷组的物理卷&#xff0c;这些…

OAuth2代码演示

目录 1 创建项目结构 1.1 客户 1.2 认证服务器 1.3 资源拥有者 1.4 资源服务器 client 客户 authorization-server 认证服务 resource-owner 资源所有者 resource-server 资源服务器 工作流程&#xff1a; 客户向资源所有者申请授权码 资源所有者下发授权码 客户拿到授权…

springboot+mongodb初体验

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写&#xff0c;旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 1、mongodb服务…

JavaScript 算术运算符

JavaScript 算术运算符 加减乘除以及取模&#xff08;求余数&#xff09;、、– <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" />…

代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

Day15 周日休息一、参考资料二叉树的最大深度 &#xff08;优先掌握递归&#xff09;题目链接/文章讲解/视频讲解&#xff1a; https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html 二叉树的最小深度 &#xff08…

车载网络 - BootLoader - CAN/CANFD刷写前提

刷写作为车载网络测试极其重要的一个模块一直拖到今天才开始写,之前确实没有一个太好的想法怎么介绍这一块,虽然现在也没有想出来怎么写能够更好的介绍这块的内容,不过我也尽量用通俗的语言让大家看懂。 刷写流程 刷写流程我也根据用例的设计分为3个阶段:前置条件、刷写程序…

UDP+有穷自动状态机构造网络指令系统

UDP有穷自动状态机构造网络指令系统 项目背景 某展厅的小项目&#xff0c;使用Unity制作了一个视频播放器&#xff0c;作为受控端&#xff0c;需要接收解说员手中的“PAD”或“触控屏电脑”等设备发来的控制指令。要求指令系统满足以下功能&#xff1a; 能够随意切换要播放的…

剑指Offer 第17天 Top K问题 优先级队列解决数据流中位数

目录 剑指 Offer 40. 最小的k个数 剑指 Offer 41. 数据流中的中位数 剑指 Offer 40. 最小的k个数 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; …

图像处理中的微分算子

摘要 微分算子在图像处理中的作用主要是用在图像的边缘检测&#xff0c;而图像边缘检测必须满足两个条件&#xff1a;一能有效的抑制噪声&#xff0c;二能必须尽量精确定位边缘位置。现在常用的微分算子主要有&#xff1a;Sobel算子&#xff0c;Robert算子&#xff0c;Prewitt…

【数据结构-JAVA】堆和优先级队列

前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不合适&#xff0c;比如&…

Hugo博客教程(一)

秋风阁——北溪入江流&#xff1a;https://focus-wind.com/ 秋风阁——计算机视觉实验&#xff1a;边缘提取与特征检测 文章目录Hugo博客教程&#xff08;一&#xff09;博客静态博客静态博客的优缺点常见的静态博客HexoHugo动态博客动态博客的优缺点常见的动态博客WordPressTy…

sql进阶教程

sql进阶教程第一章、神奇的sql1.1 CASE 表达式将已有编号方式转换为新的方式并统计用一条 SQL 语句进行不同条件的统计用 CHECK 约束定义多个列的条件关系在 UPDATE 语句里进行条件分支表之间的数据匹配在 CASE 表达式中使用聚合函数本节要点1.2 自连接的用法面向集合语言SQL可…

shiro(二):springboot整合shiro

1. 整合思路 2. 加入jsp相关配置方便测试 2.1 加入依赖&#xff1a; <!--引入JSP解析依赖--> <dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId></dependency> <dependenc…

Golang——包

1、GOPATH 项目代码肯定要需要保存在一个目录中&#xff0c;但是如果目录不统一&#xff0c;每个人有一套自己的目录结构&#xff0c;读取配置文件的位置不统一&#xff0c;输出的二进制运行文件也不统一&#xff0c;这样会导致开发的标准不统一。 所以&#xff0c;产生环境变量…

QEMU安装Windows 11的完整过程

零、环境介绍 宿主机&#xff1a; Ubuntu 22.04.1 LTS Windows 11镜像&#xff1a; Win11_Chinese(Simplified)_x64v1 QEMU版本&#xff1a; qemu-img version 7.1.0 Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers 一、安装过程 1. 创建…

随机过程与排队论(二)

随机试验 如果一个试验E满足下列条件&#xff0c;就称此试验为随机试验&#xff1a; 在相同条件下可以重复进行。每次试验的结果不止一个&#xff0c;并且能事先明确知道试验的所有结果。一次试验结束之前&#xff0c;不能确定哪一个结果会出现。 样本空间、随机事件体 随机…

估值85亿美元!智驾前装赛道又添新“巨头”,已开始量产交付

随着智能汽车技术与供应链的发展&#xff0c;可以看到很多高端汽车也逐渐开始采用过去在L4上才使用的传感器&#xff0c;例如激光雷达。同时&#xff0c;多传感器融合技术也已进入规模化量产阶段&#xff0c;为L2在乘用车上的大规模应用打开了一个新窗口。 而作为L4领域的资深…