跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > OpenLayers基础教程——使用WebGLPoints加载海量点数据

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,作者:璐璐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论