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 相关文章推荐
css与javascript跨浏览器兼容性总结
Sep 15 Javascript
javascript模拟php函数in_array
Apr 27 Javascript
javascript获取wx.config内部字段解决微信分享
Mar 09 Javascript
jquery仿ps颜色拾取功能
Mar 08 Javascript
Vue resource中的GET与POST请求的实例代码
Jul 21 Javascript
Vue单页应用引用单独的样式文件的两种方式
Mar 30 Javascript
Vue项目自动转换 px 为 rem的实现方法
Oct 29 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
layui实现tab的添加拒绝重复的方法
Sep 04 Javascript
关于Layui Table隐藏列问题
Sep 16 Javascript
node.js文件操作系统实例详解
Nov 05 Javascript
vue 使用 canvas 实现手写电子签名
Mar 06 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实现基于mysqli的Model基类完整实例
2016/04/08 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
理解javascript正则表达式
2016/03/08 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
Python标准库itertools的使用方法
2020/01/17 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
2014年清明节寄语
2014/04/03 职场文书
建筑节能汇报材料
2014/08/22 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
金融保险专业求职信
2014/09/03 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python