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 相关文章推荐
jQuery.extend 函数详解
Feb 03 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
jquery(hide方法)隐藏指定元素实例
Nov 11 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
js生成的验证码的实现与技术分析
Sep 17 Javascript
超炫的jquery仿flash导航栏特效
Nov 11 Javascript
浅析JavaScript 箭头函数 generator Date JSON
May 23 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
node.js学习之base64编码解码
Oct 21 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
Oct 28 Javascript
Bootstrap警告框(Alert)插件使用方法
Mar 21 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筛选不存在的图片资源
2015/04/28 PHP
PHP生成plist数据的方法
2015/06/16 PHP
php经典算法集锦
2015/11/14 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python3 配置logging日志类的操作
2020/04/08 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
python绘制汉诺塔
2021/03/01 Python
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
财务主管自我鉴定
2014/01/17 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android