Geoserver 上的动态 SLD
Posted
技术标签:
【中文标题】Geoserver 上的动态 SLD【英文标题】:Dynamic SLD on Geoserver 【发布时间】:2021-11-30 11:23:35 【问题描述】:有人可以帮我处理 geoserver 上的这个 CSS sld 吗?
如果有人有更好的选择而不是我的方法,请提出建议。
[activity_group_id = 20] [application_status = 'PreSanction-Pending']
mark:symbol('ttf://ESRI Business#39');
:symbol
fill:#FF0000;
[activity_group_id = 20] [application_status = 'Payment-Done']
mark:symbol('ttf://ESRI Business#39');
:symbol
fill:#00FF00;
[activity_group_id = 20] [application_status = 'Work-Completed']
mark:symbol('ttf://ESRI Business#39');
:symbol
fill:#0000FF;
[activity_group_id = 20] [application_status = 'PreSanction-Received']
mark:symbol('ttf://ESRI Business#39');
:symbol
fill:#00FFFF;
这工作正常 但我想使用 if-then-else 来简化它 我被困住了
因为那里有 30 多个唯一的“activity_group_id”
我有每行有两个变量“activity_group_id”和“activity_status”的点数据, 我正在使用 ttf 符号显示为图层,但条件是, 每个点都需要根据其状态分配颜色(填充) 它总共有 4 个独特的价值,因为我是 sld 引用文档的新手,但没有找到任何解决方案。
编辑:- 为点位置图层添加一些测试数据
activity_group_id application_status desk4_longitude desk4_latitude
20 "Work-Completed" 77.8912643252645 20.7848792063826
20 "PreSanction-Pending" 77.8912791454753 20.7796634062134
20 "Payment-Done" 77.874307404545 20.7786504284761
20 "PreSanction-Pending" 77.8748653559629 20.7777572907007
20 "Payment-Done" 77.8935239518168 20.7742195299066
20 "PreSanction-Pending" 77.8887775696933 20.7848194877974
20 "PreSanction-Received" 77.8829004567405 20.7622202218188
【问题讨论】:
似乎有一种方法可以使用 ogc 过滤器,请参阅gis.stackexchange.com/a/262356 @Jose Hermosilla Rodrigo 我使用了这里的 css 链接,并从您的建议中得到了参考,谢谢。 docs.geoserver.org/stable/en/user/styling/css/examples/… 【参考方案1】:使用recode function 来简化样式。 我无法测试它,但应该是这样的:
[activity_group_id = 20]
mark:symbol('ttf://ESRI Business#39');
:symbol
fill: recode(application_status,
'Payment-Done', #00FF00,
'Work-Completed', #0000FF,
'PreSanction-Received', #00FFFF);
如果颜色基于application_status
相同,但形状根据组id发生变化,则使用级联并设置单独的规则:
[activity_group_id = 20]
mark:symbol('ttf://ESRI Business#39');
[activity_group_id = anotherId]
mark:symbol('ttf://anotherSymbol');
*
:symbol
fill: recode(application_status,
'Payment-Done', #00FF00,
'Work-Completed', #0000FF,
'PreSanction-Received', #00FFFF);
【讨论】:
非常感谢您的回答,在我的情况下第一种情况适用。【参考方案2】:@Andrea 艾梅
根据您的参考,我检查了文档,并对您的答案的语法进行了一些更改 分享我的答案以供其他人帮助
check geoserver css doc
/* @title Apiculture */
[activity_group_id = 20]
mark:symbol('ttf://ESRI Business#39');
mark-size:15;
:symbol
fill: [recode(application_status,
'PreSanction-Pending','#FF0000',
'Payment-Done', '#00FF00',
'Work-Completed', '#0000FF',
'PreSanction-Received', '#00FFFF')];
/* @title Sprinkler Irrigation */
[activity_group_id = 19]
mark:symbol('ttf://ESRI Business#40');
mark-size:15;
:symbol
fill: [recode(application_status,
'PreSanction-Pending','#FF0000',
'Payment-Done', '#00FF00',
'Work-Completed', '#0000FF',
'PreSanction-Received', '#00FFFF')];
【讨论】:
以上是关于Geoserver 上的动态 SLD的主要内容,如果未能解决你的问题,请参考以下文章
在 Leaflet.js 中消除光栅图像上的白色、无数据像素时遇到问题,通过 GeoServer 提供服务
GeoServer Image Mosaics:PostGIS 索引表上的查询超过最大连接限制
我需要在我的服务器上的同一个 Tomcat 7 中运行 Pentaho CE BI-Server 和 Geoserver