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 相关文章推荐
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
Jun 15 Javascript
javascript中$(function() {});写与不写有哪些区别
Aug 10 Javascript
浅谈javascript函数式编程
Sep 06 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 Javascript
CSS+jQuery实现简单的折叠菜单
Dec 20 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
Javacript中自定义的map.js  的方法
Nov 26 Javascript
微信小程序实现吸顶效果
Jan 08 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源代码
2013/06/26 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
用Python中的字典来处理索引统计的方法
2015/05/05 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
python3实现名片管理系统
2020/11/29 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
中国电视购物:快乐购
2017/02/04 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
领导的自我鉴定
2013/12/28 职场文书
实习鉴定评语
2014/01/19 职场文书
国培教师自我鉴定
2014/02/12 职场文书
端午节演讲稿
2014/05/23 职场文书
大学生简历求职信
2014/06/24 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
移除Selenium中window.navigator.webdriver值
2022/06/10 Python