如何在GeoServer的SLD样式中使用language函数实现栅格图例国际化?
无需额外参数实现栅格图例国际化的SLD配置方案
核心思路
通过ogc:language()函数将规则过滤条件与请求传入的language参数绑定,让GeoServer默认只渲染匹配当前语言的规则图例,无需额外添加legend_options参数。
具体SLD配置示例
<?xml version="1.0" encoding="UTF-8"?> <StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <NamedLayer> <Name>internationalized-raster</Name> <UserStyle> <Name>raster-lang-style</Name> <FeatureTypeStyle> <!-- 英文规则 --> <Rule> <Name>en-rule</Name> <Title>English Legend</Title> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:Function name="language"/> <ogc:Literal>en</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <RasterSymbolizer> <Opacity>1.0</Opacity> <ColorMap> <ColorMapEntry color="#FF0000" quantity="0" label="Low (EN)"/> <ColorMapEntry color="#00FF00" quantity="50" label="Medium (EN)"/> <ColorMapEntry color="#0000FF" quantity="100" label="High (EN)"/> </ColorMap> </RasterSymbolizer> </Rule> <!-- 法文规则 --> <Rule> <Name>fr-rule</Name> <Title>French Legend</Title> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:Function name="language"/> <ogc:Literal>fr</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <RasterSymbolizer> <Opacity>1.0</Opacity> <ColorMap> <ColorMapEntry color="#FF0000" quantity="0" label="Bas (FR)"/> <ColorMapEntry color="#00FF00" quantity="50" label="Moyen (FR)"/> <ColorMapEntry color="#0000FF" quantity="100" label="Élevé (FR)"/> </ColorMap> </RasterSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
关键配置要点
- 规则过滤绑定语言参数:每个语言对应的规则都添加
<ogc:Filter>,用ogc:language()函数获取请求中的language参数,与规则指定的语言字面量匹配,GeoServer会自动过滤不匹配的规则。 - 图例标签国际化:在
ColorMapEntry的label属性中直接写入对应语言的文本,确保图例标签随语言切换。 - 无需额外参数:通过严格的过滤条件,让GeoServer默认只保留匹配当前语言的规则,不用手动开启
hideEmptyRules等参数。
验证请求示例
- 英文图例请求:
http://your-geoserver-url/wms?service=WMS&request=GetLegendGraphic&version=1.1.1&format=image/png&layer=your-workspace:internationalized-raster&language=en - 法文图例请求:
http://your-geoserver-url/wms?service=WMS&request=GetLegendGraphic&version=1.1.1&format=image/png&layer=your-workspace:internationalized-raster&language=fr
内容的提问来源于stack exchange,提问作者SIBeckers
相关产品推荐
相关产品推荐

