0

我正在使用 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)

4

0 回答 0