我正在使用 Geoserver 来设置多边形图层的样式,该图层包含多个“整数”类型的属性。
当我正在创建一个 WebGIS 时,用户可以选择使用哪个属性来设置图层特征的样式(根据属性值为每个特征赋予颜色)。
如您所见,我将不得不在 Geoserver 中创建几种样式。然后,我将使用下面的行:
layer.getSource().updateParams({'STYLES': 'style_1'});
其中变量“layer”将被 layer_name 替换,变量“style_1”将是在 Geoserver 中创建的样式名称,并由先前函数生成的关于用户选择的属性。
这是一种方法。但是,正如您所说,当属性数量很大时(我可能有多达 30 个属性),它会变得很重。
现在,让我们看一下我正在使用的样式示例:
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
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">
<!-- a Named Layer is the basic building block of an SLD document -->
<NamedLayer>
<Name>default_polygon</Name>
<UserStyle>
<!-- Styles can have names, titles and abstracts -->
<Title>Default Polygon</Title>
<Abstract>A sample style that draws a polygon</Abstract>
<!-- FeatureTypeStyles describe how to render different features -->
<!-- A FeatureTypeStyle for rendering polygons -->
<FeatureTypeStyle>
<Rule>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>refer_AA</ogc:PropertyName>
<ogc:Literal>1000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#f7fbff</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<Rule>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>refer_AA</ogc:PropertyName>
<ogc:Literal>1000</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>refer_AA</ogc:PropertyName>
<ogc:Literal>2000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#deebf7</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
这种样式只是用#f7fbff 为具有属性(refer_AA < 1000)的多边形着色,用#deebf7 为具有(1000<refer_AA < 2000)的多边形着色。
我的目标之一是通过 JavaScript 或其他方式动态编辑此样式。例如,一种我可以个性化属性名称和我为每个过滤器使用的颜色的方法。就像是 :
var attribute = "refer_AA";
var colors = [#f7fbff,#deebf7];
var xml_style = "style_file_source";
function set_attribute_for_style(file) {
...
}
funcion set_colors_fro_style(file) {
...
}
set_attribute_for_style(xml_style)
set_colors_fro_style(xml_style)