【问题标题】:Dynamic SLD on GeoserverGeoserver 上的动态 SLD
【发布时间】: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

【问题讨论】:

标签: geoserver sld


【解决方案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')];
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多