当前位置: 首页 > news >正文

OpenLayers基础教程——使用WebGL加载海量数据(1)

1、前言

最近遇到一个问题:如何在OpenLayers中高效加载海量的场强点?由于项目中的一些要求,不能使用聚合的方法加载。一番搜索之后发现:OpenLayers中有一个WebGLPoints类,使用该类可以轻松应对几十万的数据量,下面开始介绍。

2、使用ol.layer.Vector

ol.layer.Vector是常用的矢量要素图层,下面这段代码演示了加载100000个随机点:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>WebGL</title><style>html,body,#map {width: 100%;height: 100%;margin: 0;padding: 0;}</style><link rel="stylesheet" href="libs/ol/ol.css" /><script src="libs/ol/ol.js"></script>
</head>
<body><div id="map"></div><script>// 创建图层var layer = new ol.layer.Vector({source: new ol.source.Vector(),style: new ol.style.Style({image: new ol.style.Circle({radius: 20,fill: new ol.style.Fill({color: 'red'})})})});// 创建要素var source = layer.getSource();for (var i = 1; i <= 100000; i++) {var coordinates = [120.00 + Math.random(), 30.00 + Math.random()];var feature = new ol.Feature(new ol.geom.Point(coordinates));source.addFeature(feature);}// 创建地图var map = new ol.Map({target: 'map',layers: [layer],view: new ol.View({projection: 'EPSG:4326',center: [120, 30],zoom: 10})});</script>
</body>
</html>

运行程序后可以发现:界面卡顿严重,用户体验较差。

在这里插入图片描述

3、使用ol.layer.WebGLPoints

下面使用ol.layer.WebGLPoints来加载100000个随机点,需要注意:OpenLayers的版本从6开始才支持ol.layer.WebGLPoints

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>WebGL</title><style>html,body,#map {width: 100%;height: 100%;margin: 0;padding: 0;}</style><link rel="stylesheet" href="libs/ol/ol.css" /><script src="libs/ol/ol.js"></script>
</head>
<body><div id="map"></div><script>// 创建图层var layer = new ol.layer.WebGLPoints({source: new ol.source.Vector(),style: {symbol: {symbolType: 'circle',size: 20,color: 'red'}}});// 创建要素var source = layer.getSource();for (var i = 1; i <= 100000; i++) {var coordinates = [120.00 + Math.random(), 30.00 + Math.random()];var feature = new ol.Feature(new ol.geom.Point(coordinates));source.addFeature(feature);}// 创建地图var map = new ol.Map({target: 'map',layers: [layer],view: new ol.View({projection: 'EPSG:4326',center: [120, 30],zoom: 10})});</script>
</body>
</html>

运行程序后可以发现:界面无卡顿,用户体验较好。

在这里插入图片描述

4、结语

WebGL由于使用GPU加速渲染,因此绘图效率较高。在OpenLayers的开发中,如果遇到加载海量数据点的需求,不妨考虑使用WebGLPoints实现。

相关文章:

  • Docker学习笔记 - 使用配置脚本来启动image
  • golang常用库之-golang常用库之-ladon包 | 基于策略的访问控制
  • docker入门(十)—— docker-compose详解
  • stm32定时器
  • scDEA一键汇总12种单细胞差异分析方法 DESeq2、edgeR、MAST、monocle、scDD、Wilcoxon
  • K8S Storage
  • PYTorch训练和推理 指定GPU
  • docker swarm 集群创建
  • Go语言学习04~05 函数和面向对象编程
  • c++算法学习笔记 (15) 质数
  • 新手如何入门电子电路
  • 我的VSCode配置和常见插件
  • 探秘开源隐语:架构深度剖析与隐私计算技术之旅
  • 解读 Xend Finance:向 RWA 叙事拓展,构建更具包容性的 DeFi 体系
  • c++类型转换(持续更新)
  • python3.6+scrapy+mysql 爬虫实战
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Bootstrap JS插件Alert源码分析
  • css选择器
  • github指令
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Meteor的表单提交:Form
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Sass Day-01
  • ubuntu 下nginx安装 并支持https协议
  • 笨办法学C 练习34:动态数组
  • 对JS继承的一点思考
  • 基于游标的分页接口实现
  • 学习使用ExpressJS 4.0中的新Router
  • 用mpvue开发微信小程序
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 在weex里面使用chart图表
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • #13 yum、编译安装与sed命令的使用
  • (1)STL算法之遍历容器
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2)(2.10) LTM telemetry
  • (31)对象的克隆
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (转)Google的Objective-C编码规范
  • (转)memcache、redis缓存
  • (转)详解PHP处理密码的几种方式
  • (转载)hibernate缓存
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 依赖注入和配置系统
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /*在DataTable中更新、删除数据*/
  • @staticmethod和@classmethod的作用与区别
  • []串口通信 零星笔记
  • [20140403]查询是否产生日志