openlayers-18-聚合显示补充(切换聚合与非聚合状态)

最近有一些网友问我,聚合显示怎么实现聚合与不聚合之间的切换,有很多方法能够实现,下面是一个示例作为参考。

在这里插入图片描述
在这里插入图片描述

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>加载天地图</title><link href="ol/ol.css" rel="stylesheet" type="text/css" /><script src="ol/ol.js" type="text/javascript"></script><style type="text/css">html,body{margin:0px;padding:0px;}#mapCon {width: 100%;height: 98%;}</style>
</head>
<body><!-- 地图容器 --><div id="mapCon"></div><div style="position: absolute;top:10px;left:50px;"><button onclick="toggleCluster()">切换聚合</button></div><script type="text/javascript">var key = "4689fc6b9bc0fdc8c48298f751ebfb41";//天地图密钥var center = [116.3913,39.9071];var pointArr = [[116.3913,39.9071],[116.3813,39.9071],[116.3713,39.9071],[116.3613,39.9071],[115.3913,38.9071],[115.3813,38.9071],[115.3613,38.9071],[115.3313,38.9071]];//北京经纬度//ol.layer.Tile:是一个瓦片图层类,用于显示瓦片资源。//source是必填项,用于为图层设置来源。//ol.source.XYZ: //创建天地图矢量图层var TiandiMap_vec = new ol.layer.Tile({title: "天地图矢量图层",source: new ol.source.XYZ({url: "http://t{0-7}.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=" + key,wrapX: false})});//创建天地图矢量注记图层var TiandiMap_cva = new ol.layer.Tile({title: "天地图矢量注记图层",source: new ol.source.XYZ({url: "http://t{0-7}.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=" + key,})});//1. 实例化Map对象加载地图var map = new ol.Map({//地图容器div的IDtarget: 'mapCon',//地图容器中加载的图层layers: [TiandiMap_vec, TiandiMap_cva],//地图视图设置view: new ol.View({//地图初始中心点(经纬度)center: center,//地图初始显示级别zoom: 8,projection: "EPSG:4326"})});//2.创建用于放置标注的矢量图层以及图层源//矢量标注的数据源-非聚合var vectorSource = new ol.source.Vector();//3.聚合标注数据源var clusterSource = new ol.source.Cluster({distance: 40,source: vectorSource});var styleCache = {};//矢量标注图层var vectorLayer = new ol.layer.Vector({source: clusterSource,//初始设置源为聚合源zIndex:1000,style: function (feature, resolution) {var size = feature.get('features').length;var style;//当前的标注仅包含一个feature时,采用该feature的样式显示,而不是统一聚合样式,这个很有用if (size == 1) {style = styleCache[feature.get('features')[0].get("name")];} else {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: '#cc4700'})}),text: new ol.style.Text({text: size.toString(),fill: new ol.style.Fill({color: '#fff'})})})];if (size == 1) {//这里采用那么作为styleCache对象key的值,name是唯一的,//这样就可以为为每一个feature设置不同的样式,因为起初feature未聚合前,//可能会使用不同的图标来表示不同的目标let pkiaa = feature.get('features')[0].get("name");style = feature.get('features')[0].getStyle();styleCache[pkiaa] = style;} else {styleCache[size] = style;}}return style;}});map.addLayer(vectorLayer);//4.实例化矢量标注对象并添加到矢量图层源for (let index = 0; index < pointArr.length; index++) {const element = pointArr[index];var markerFeature = new ol.Feature({geometry: new ol.geom.Point(element),name:'point_'+index,//保证唯一性,在聚合显示时用于区分独立的 style});markerFeature.setStyle(createMarkerStyle(markerFeature));//将新要素添加到数据源中vectorSource.addFeature(markerFeature);}//切换聚合状态function toggleCluster(){//获取当前矢量图层的源let vecSource = vectorLayer.getSource();//判断矢量图层的 源 是否 有 distance属性,该属性是聚合矢量源特有,可以根据此来判断当前 矢量图层的源是 聚合源还是非聚合源//如果有distance属性,则设置矢量图层的源 为  非聚合源if (vecSource.distance !=undefined){vectorLayer.setSource(vectorSource);}//如果没有distance属性,则设置矢量图层的源 为 聚合源else{vectorLayer.setSource(clusterSource);}}//创建矢量标注样式function createMarkerStyle(feature) {//获取name,根据不同的name,配置不同的图标let name = feature.get("name");let index = name.split('_')[1];console.log(index);let imageUrl = 'static/img/hq.png';if (index%2 == 0) {//与2求余为0的,设置为勋章 标记imageUrl = "static/img/xz.png";}return new ol.style.Style({/**{olx.style.IconOptions}类型*/image: new ol.style.Icon(({// anchor: [0.5, 0.5],//图标的锚点,经纬度点所对应的图标的位置,默认是[0.5, 0.5],即为标注图标的中心点位置anchorOrigin: 'top-right',//锚点的偏移位置,默认是top-left,anchorXUnits: 'fraction',//锚点X的单位,默认为百分比,也可以使用pxanchorYUnits: 'pixels',//锚点Y的单位,默认为百分比,也可以使用pxoffsetOrigin: 'top-right',//原点偏移bottom-left, bottom-right, top-left, top-right,默认 top-left// offset:[0,10],//图标缩放比例// scale:0.5,//可以设置该比例实现,图标跟随地图层级缩放//透明度opacity: 0.75,//如果想隐藏某个图标,可以单独设置该值,透明度为0时,即可隐藏,此为隐藏元素的方法之一。//图标的urlsrc: imageUrl})),text: new ol.style.Text({//位置textAlign: 'center',//基准线textBaseline: 'middle',//文字样式font: '20px 宋体',//文本内容text: feature.get('name'),//通过设置的fature的name属性获取,也可以通过参数获取设置,此处接收 字符串 对象//文本填充样式(即文字颜色),红色fill: new ol.style.Fill({ color: '#ff002f' }),//描边颜色,蓝色stroke: new ol.style.Stroke({ color: '#0022ff', width: 1 })})});}</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人过程自动化(RPA)入门 6. 通过插件和扩展易于控制应用程序

到目前为止,您已经学习了如何记录自动化步骤,还学习了控制流以及变量和数据表的使用。最重要的部分是理解和掌握控制。除非您能够正确地识别应用程序的控件,否则不可能成功地实现流程自动化。现在,在本章中,我们将学习如何使用外部插件和扩展。除了基本的提取和与桌面屏幕…

YOLOV3代码分析

文件夹和文件的作用 config:文件的配置&#xff1a; 1.coco.data:存放coco数据集的相关信息&#xff0c;如类别总数&#xff0c;数据集的路径等 2.yolov3.cfg: yolov3的网络架构 data&#xff1a;存放训练集和测试集 1.coco:存放coco训练集和测试集 labels中存放每个照片的标签…

Servlet开发-session和cookie理解案例-登录页面

项目展示 进入登录页面&#xff0c;输入正确的用户名和密码以后会自动跳到主页 登录成功以后打印用户名以及上次登录的时间&#xff0c;如果浏览器和客户端都保存有上次登录的信息&#xff0c;则不需要登录就可以进入主页 编码思路 1.首先提供一个登录的前端页面&…

ubuntu http 服务器响应

代码&#xff1a; h文件 #include <iostream> #include <curl/curl.h>#include <net/if.h> #include <sys/ioctl.h> #include <arpa/inet.h> #include <string.h>#include <event.h> #include <event2/http.h> #include <…

DDS信号发生器Verilog波形发生器FPGA

名称&#xff1a;DDS信号发生器Verilog波形发生器 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 1.可产生正弦波&#xff0c;锯齿波&#xff0c;三角波&#xff0c;方波4种波形&#xff0c;频率可调 2.具有波形选择、起动、停止功能。 代码下载&…

QT信号槽

目录 信号槽的概念 按钮的常用信号 自定义槽函数 自定义信号函数 自定义槽和信号注意的事项 信号与槽的拓展 lambda表达式 信号槽的概念 信号槽是Qt框架引以为豪的机制之一。所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c…

一篇博客学会系列(2)—— C语言中的自定义类型 :结构体、位段、枚举、联合体

目录 前言 1、结构体 1.1、结构体类型的声明 1.2、特殊的结构体类型声明 1.3、结构体的自引用 1.4、结构体的定义和初始化 1.5、结构体成员变量的调用 1.6、结构体内存对齐 1.6.1、offsetof 1.6.2、结构体大小的计算 1.6.3、为什么存在内存对齐&#xff1f; 1.7、…

【WIN32】C++在打印Windows中调用堆栈信息

C在打印Windows中调用堆栈信息 关键函数 GetCurrentProcess 返回当前进程的伪句柄 伪句柄是一个特殊常量&#xff0c;当前 (HANDLE) -1&#xff0c;被解释为当前进程句柄。 为了与将来的操作系统兼容&#xff0c;最好调用 GetCurrentProcess &#xff0c;而不是硬编码此常量…

Linux账户组管理及权限练习

1.使用id命令查看root账户信息 [rootserver ~]# id root 用户id0(root) 组id0(root) 组0(root) 2.使用id命令查看自己的普通账户信息 [rootserver ~]# id kxy 用户id1000(kxy) 组id1000(kxy) 组1000(kxy),10(wheel) 3.新建账户test1&#xff0c;并查看账户信息&#xff1a; [ro…

BASH shell脚本篇3——字符串处理

这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令&#xff0c;请参考&#xff1a; BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型&#xff0c;它用于表示文本而不是数字&#xff0c;它是一组可能…

No150.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

后台管理系统: 商品管理

商品管理之三级联动静态组件 先做俩个卡片组件&#xff0c;分开距离 三级联动很多地方都用到了它&#xff0c;我们可以封装成一个组件 注册为一个全局组件 <div><el-form :inline"true" class"demo-form-inline"><el-form-item label&qu…

1200*A. Flipping Game(前缀和)

解析&#xff1a; 100数据量&#xff0c;两层遍历每个区间&#xff0c;然后前缀和计算1的个数&#xff0c;维护最大值即可。 #include<bits/stdc.h> using namespace std; #define int long long const int N110; int n,a[N],res,sum[N]; signed main(){scanf("%ll…

Python标准库分享之时间与日期 (time, datetime包)

Python具有良好的时间和日期管理功能。实际上&#xff0c;计算机只会维护一个挂钟时间(wall clock time)&#xff0c;这个时间是从某个固定时间起点到现在的时间间隔。时间起点的选择与计算机相关&#xff0c;但一台计算机的话&#xff0c;这一时间起点是固定的。其它的日期信息…

目标检测:FROD: Robust Object Detection for Free

论文作者&#xff1a;Muhammad,Awais,Weiming,Zhuang,Lingjuan,Lyu,Sung-Ho,Bae 作者单位&#xff1a;Sony AI; Kyung-Hee University 论文链接&#xff1a;http://arxiv.org/abs/2308.01888v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;目标检测 2&#xff09;…

性能优化实战使用CountDownLatch

1.分析问题 原程序是分页查询EventAffinityScoreDO表的数据&#xff0c;每次获取2000条在一个个遍历去更新EventAffinityScoreDO表的数据。但是这样耗时比较慢&#xff0c;测试过30万的数据需要2小时 private void eventSubjectHandle(String tenantId, String eventSubject) …

3.6+铁死亡+WGCNA+机器学习

今天给同学们分享一篇3.6铁死亡WGCNA机器学习的生信文章“Identification of ferroptosis related biomarkers and immune infiltration in Parkinsons disease by integrated bioinformatic analysis”&#xff0c;这篇文章于2023年3月14日发表在BMC Med Genomics期刊上&#…

队列的使用以及模拟实现(C++版本)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

C运算符和控制语句

几乎每一个程序都需要进行运算&#xff0c;对数据进行加工处理&#xff0c;否则程序就没有意义了。要进行运算&#xff0c;就需规定可以使用的运算符。 C语言的运算符范围很宽&#xff0c;把除了控制语句和输人输出以外的几乎所有的基本操作都作为运算符处理。 运算符分类1 除…

QToolButton几个小知识点总结

QToolButton设置图标及更改图标大小 QToolButton btn;btn.setIconSize(QSize(35,35));//更改图标大小btn.setIcon(QIcon(":/images/screen.png"));//设置图标QToolButton设置图标和文字显示格式 enum ToolButtonStyle {ToolButtonIconOnly, //只显示图标&#xff08;…