0

有人可以帮我解决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
4

2 回答 2

2

使用重新编码功能来简化样式。我无法测试它,但应该是这样的:

[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);
  }
}
于 2021-11-30T11:45:51.700 回答
0

@安德里亚·艾梅

从您的参考资料中,我检查了文档,并对您的答案的语法进行了一些更改,分享我的答案以寻求其他帮助

检查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')];
  }
}
于 2021-11-30T15:27:52.170 回答