首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Geoserver的动态SLD

基于Geoserver的动态SLD
EN

Stack Overflow用户
提问于 2021-11-30 11:23:35
回答 2查看 488关注 0票数 0

有人能帮我解决这个在geoserver上的CSS sld吗?

如果有人有更好的选择,而不是我的方法,请建议。

代码语言:javascript
复制
[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;
    }
}

这很好,但我想简化一下,如果-那么-否则我就被困在这上面了。

因为有30多个独特的“activity_group_id”

我有点数据,每一行都有两个变量'activity_group_id‘和’activity‘,我使用ttf符号作为层显示,但条件是,每个点需要根据其状态分配颜色(Fill) --总共有4个唯一值,因为我对sld引用的文档并不熟悉,但没有找到任何解决方案。

编辑:-为点定位层添加一些测试数据

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-30 11:45:51

使用记录函数简化样式。我不能测试它,但应该是这样的:

代码语言:javascript
复制
[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变化的,那么使用级联并设置单独的规则:

代码语言:javascript
复制
[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
EN

Stack Overflow用户

发布于 2021-11-30 15:27:52

@Andrea Aime

从您的参考资料来看,我检查了docs,并对您的答案的语法进行了一些修改,以供其他人使用。

检查geoserver css文档

代码语言:javascript
复制
/* @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')];
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70168539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档