GeoServer中SLD线符号的几个测试

时间:2023-02-01 10:15:53

1.符号层次

SLD里写两个<se:FeatureTypeStyle>,就相当于写了两个符号图层。

以下这个只写了一个FeatureTypeStyle,里面包含两个Rule,第一个Rule里是先画黑色,宽度为4。第二个Rule里再画白色,宽度为3。

GeoServer中SLD线符号的几个测试

以下这个写了两个FeatureTypeStyle,各包含一个Rule,第一个FeatureTypeStyle画黑色,第二个画白色。

GeoServer中SLD线符号的几个测试

结果表明FeatureTypeStyle就是符号层。


2 标记线

GeoServer从2.1开始支持标记线,原话是 Starting from version 2.1 dash arrays can be combined with graphic strokes to generate complex line styles with alternating symbols or a mix of lines and symbols.

GeoServer中SLD线符号的几个测试


下面是测试代码

     <se:FeatureTypeStyle>
        <se:Rule>
          <se:Name>Single symbol</se:Name>
          <se:LineSymbolizer>
            <se:Stroke>
              <se:GraphicStroke>
                <se:Graphic>
                  <se:ExternalGraphic>
                    <se:OnlineResource xlink:type="simple" xlink:href="svg/wind_roses/WindRose_01.svg"/>
                    <se:Format>image/svg+xml</se:Format>
                  </se:ExternalGraphic>
                  <se:Size>
                    <ogc:Literal>12</ogc:Literal>
                  </se:Size>
                </se:Graphic>
              </se:GraphicStroke>
              <se:SvgParameter name="stroke-dasharray">10 2</se:SvgParameter>
            </se:Stroke>
          </se:LineSymbolizer>
        </se:Rule>
      </se:FeatureTypeStyle>

重点说明

(1)我这儿标记是用的外联SVG。

a. ExternalGraphic是外联SVG文件的,xlink:href=可以写绝对路径,也可以写相对路径。

  相对路径一般放在X:\GeoServer 2.5.1\data_dir\styles下即可

b.SvgParameter name="stroke-dasharray" 是点划线的参数,

比如写10 2就是点长10像素、空2像素、以此重复

比如写10 2 5 10就是 点长10像素、空2像素、点长5像素、空10像素以此重复

标记符号按道理是处于点长像素的位置,所以一旦一个标记符号的尺寸大于了点划区间的总长度,那么...呵呵...


(2)标记符号用字体

GeoServer中SLD线符号的几个测试

        < se:LineSymbolizer >
             < se:Stroke >
               < se:GraphicStroke >
                 < se:Graphic >
                   < se:Mark >
                     < se:OnlineResource  xlink:type = "simple"  xlink:href = "ttf://宋体" />
                     < se:Format > ttf </ se:Format >
                     < se:MarkIndex > 50 </ se:MarkIndex >
                     < se:Fill >
                     < se:SvgParameter  name = "fill" > #000000 </ se:SvgParameter >
                   </ se:Fill >
                   </ se:Mark >
                   < se:Size > 4.23333 </ se:Size >
                 </ se:Graphic >
               <se:SvgParameter name="stroke-dasharray">10 2</se:SvgParameter>
               </ se:GraphicStroke >
             </ se:Stroke >
           </ se:LineSymbolizer >
字体文件可以不是操作系统注册的,可以写个绝对路径或相对路径来引用字体文件。

MarkIndex是十进制,所以无论是Unicode还是GBK码,都要转成10进制。

SvgParameter name="fill"看名字都能知道是什么用的了吧

其他的参数已介绍了。