OpenLayers基础教程——使用WebGLPoints加载海量点数据
时间:2024-04-25 10:25:47 来源:网络cs 作者:璐璐 栏目:卖家故事 阅读:
阅读本书更多章节>>>>
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
实现。
本文链接:https://www.kjpai.cn/gushi/2024-04-25/162049.html,文章来源:网络cs,作者:璐璐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
上一篇:【c++】探究C++中的list:精彩的接口与仿真实现解密
下一篇:返回列表