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 相关文章推荐
Python脚本后台运行的几种方式
Mar 09 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
javascript中setAttribute兼容性用法分析
Dec 12 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
Jan 19 Javascript
JS SetInterval 代码实现页面轮询
Aug 11 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
微信小程序使用navigateTo数据传递的实例
Sep 26 Javascript
详解基于vue-router的动态权限控制实现方案
Sep 28 Javascript
js Element Traversal规范中的元素遍历方法
Apr 19 Javascript
详解js类型判断
May 22 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
Feb 22 Javascript
vue实现井字棋游戏
Sep 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Python文件路径名的操作方法
2019/10/30 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
python 如何停止一个死循环的线程
2020/11/24 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
大学生实习感言
2014/01/16 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
绿色环保演讲稿
2014/05/10 职场文书
关于保护环境的建议书
2014/05/13 职场文书
环保建议书300字
2014/05/14 职场文书
小区推广策划方案
2014/06/06 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
父亲节活动总结
2015/02/12 职场文书
现实表现证明材料
2015/06/19 职场文书