Openlayers绘制聚合标注


Posted in Javascript onSeptember 28, 2020

本文实例为大家分享了Openlayers实现聚合标注的具体代码,供大家参考,具体内容如下

1、聚合标注

聚合标注是指在不同的地图分辨率下,通过聚合的方式来展示标注点的一种方法,其目的就是为了减少当前视窗中加载的标注点的数量,从而提高客户端的渲染速度,有点类似于ArcGIS的点抽稀。

2、代码实现

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <title></title>
 <script src="../lib/ol/ol.js"></script>
 <script type="text/javascript">
 window.onload = function () {
  //初始化地图
  var map = new ol.Map({
  target: 'map',
  layers: [
   new ol.layer.Tile({
   source: new ol.source.OSM()
   })
  ],
  view: new ol.View({
   center: new ol.proj.fromLonLat([116.28, 39.54]),
   zoom: 8
  })
  });
 
  //创建要素的数量
  //10000个点没有任何压力,50000个点稍微有些卡了,100000个点可以把浏览器卡崩溃
  var count = 10000;
  //创建一个要素数组
  var features = new Array(count);
  //坐标偏移量
  var e = 8500000;
 
  for (var i = 0; i < count; i++) {
  //要素坐标
  var coordinates = [3 * e * Math.random() - e, 2 * e * Math.random() - e];
  //新建点要素
  features[i] = new ol.Feature(new ol.geom.Point(coordinates));
  }
 
  //初始化矢量数据源
  var source = new ol.source.Vector({
  //要素
  features:features
  });
 
  //初始化聚合标注数据源
  var clusterSource = new ol.source.Cluster({
  //标注元素之间的间距
  distance: 40,
  //数据源
  source:source
  });
 
  //样式缓存
  var styleCache = {};
  //初始化矢量图层
  var clusters = new ol.layer.Vector({
  //数据源
  source: clusterSource,
  //样式
  style: function (feature, resolution) {
   //当前聚合标注数据源的要素大小
   var size = feature.get('features').length;
   //定义样式
   var style = styleCache[size];
   //如果当前样式不存在则创建
   if (!style) {
   style = [
    //初始化样式
    new ol.style.Style({
    //点样式
    image: new ol.style.Circle({
     //点的半径
     radius: 10,
     //笔触
     stroke: new ol.style.Stroke({
     color: '#fff'
     }),
     //填充
     fill: new ol.style.Fill({
     color: '#3399cc'
     })
    }),
    //文本样式
    text: new ol.style.Text({
     //文本内容
     text: size.toString(),
     //填充
     fill: new ol.style.Fill({
     color: '#fff'
     })
    })
    })
   ];
   styleCache[size] = style;
   }
   return style;
  }
  });
  //将聚合标注图层添加到map中
  map.addLayer(clusters);
 
  //获取添加聚合标注按钮
  document.getElementById('addFeatures').onclick = function () {
  //获取聚合标注数据源中的要素
  var currentFeatures = clusterSource.getSource().getFeatures();
  //如果当前数据源中没有任何要素则添加
  if (currentFeatures.length == 0) {
   clusterSource.getSource().addFeatures(features);
   clusters.setSource(clusterSource);
   map.addLayer(clusters);
  }
  };
 
  //获取移除聚合标注的按钮
  document.getElementById('removeFeatures').onclick = function () {
  //清除聚合标注数据源中的所有元素
  clusterSource.getSource().clear();
  //从map中移除聚合标注图层
  map.removeLayer(clusters);
  };
 };
 </script>
</head>
<body>
 <input type="button" name="name" value="添加聚合标签" id="addFeatures" />
 <input type="button" name="name" value="移除聚合标签" id="removeFeatures" />
 <div id="map"></div>
</body>
</html>

3、结果展示

初始化界面

Openlayers绘制聚合标注

随意更改地图的分辨率(进行缩放操作),标注点的数量也会跟着改变

Openlayers绘制聚合标注

单击左上角的移除聚合标签按钮,则会清空界面上的所有标注

Openlayers绘制聚合标注

单击左上角的添加聚合标签按钮,则会在界面上重新添加聚合标注

Openlayers绘制聚合标注

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript小技巧 2.5 则
Sep 12 Javascript
基于Jquery的标签智能验证实现代码
Dec 27 Javascript
js 金额文本框实现代码
Feb 14 Javascript
Jquery树插件zTree用法入门教程
Feb 17 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
jquery 正整数数字校验正则表达式
Jan 10 Javascript
angularjs中ng-bind-html的用法总结
May 23 Javascript
AngularJS常见过滤器用法实例总结
Jul 06 Javascript
解决vue热替换失效的根本原因
Sep 19 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
Jul 29 Javascript
Openlayers绘制地图标注
Sep 28 #Javascript
Openlayers实现图形绘制
Sep 28 #Javascript
Openlayers显示瓦片网格信息的方法
Sep 28 #Javascript
Openlayers实现地图全屏显示
Sep 28 #Javascript
Openlayers学习之加载鹰眼控件
Sep 28 #Javascript
Openlayers显示地理位置坐标的方法
Sep 28 #Javascript
Openlayers学习之地图比例尺控件
Sep 28 #Javascript
You might like
PHP中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
PHP取进制余数函数代码
2012/01/19 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
浅谈function(函数)中的动态参数
2017/04/30 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python实现Decorator模式实例代码
2018/02/09 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
美国滑板店:Tactics
2020/11/08 全球购物
明星员工获奖感言
2014/08/14 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
采购员工作总结范文
2015/08/12 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python
Oracle用户管理及赋权
2022/04/24 Oracle