天天看点

geoserver样式(SLD方式)—— 箭头样式

geoserver中在配置图层线条样式的时候,有时候会碰到需要给线条加箭头的情况,那么这个箭头要如何实现呢,先看看效果:

geoserver样式(SLD方式)—— 箭头样式

上面样式完整代码:

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
  xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/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">

  <NamedLayer>
    <Name>vectorline</Name>
    <UserStyle>
      <Title>A cyan line style</Title>
      <FeatureTypeStyle>
        <Rule>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">#fffc00</CssParameter>
              <CssParameter name="width">2</CssParameter>
            </Stroke>
          </LineSymbolizer>
          <LineSymbolizer>
          	<Stroke>
              <GraphicStroke>
                <Graphic>
                  <Mark>
                    <WellKnownName>shape://oarrow</WellKnownName>
                    <Stroke>
                      <CssParameter name="stroke">#e06666</CssParameter>
                      <CssParameter name="width">2</CssParameter>
                    </Stroke>
                  </Mark>
                  <Size>20</Size>
                </Graphic>
              </GraphicStroke>
              <CssParameter name="stroke-dashoffset">10</CssParameter>
              <CssParameter name="stroke-dasharray">20 100</CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>
           

关键样式代码解读:

<LineSymbolizer>
          	<Stroke>
              <GraphicStroke>
                <Graphic>
                  <Mark>
                    <WellKnownName>shape://oarrow</WellKnownName>
                    <Stroke>
                      <CssParameter name="stroke">#e06666</CssParameter><!-- 箭头线条的颜色 -->
                      <CssParameter name="width">2</CssParameter><!-- 箭头线条的宽度 -->
                    </Stroke>
                  </Mark>
                  <Size>20</Size><!-- 控制每个箭头元素的大小 -->
                </Graphic>
              </GraphicStroke>
              <CssParameter name="stroke-dashoffset">10</CssParameter><!-- 箭头的偏移 -->
              <CssParameter name="stroke-dasharray">20 100</CssParameter><!-- 控制箭头和空白部分出现的规律 -->
            </Stroke>
</LineSymbolizer>
           

不难看出,箭头的实现其实是通过虚线的实现来描述的,只是将虚线的实现部分换成了箭头而已。既然这样,我们就可以通过修改箭头大小和stroke-dasharray来达到一些很神奇的效果:

箭头密度调大

geoserver样式(SLD方式)—— 箭头样式
geoserver样式(SLD方式)—— 箭头样式

通过修改stroke-dasharray即可以修改箭头出现的密度

箭头大小变大

geoserver样式(SLD方式)—— 箭头样式
geoserver样式(SLD方式)—— 箭头样式

通过修改Size标签数字大小可以控制箭头图形的大小

多个箭头成对出现

geoserver样式(SLD方式)—— 箭头样式
geoserver样式(SLD方式)—— 箭头样式

将stroke-dasharry的第一个数字参数改为箭头大小的两倍,即可实现箭头成对出现。同理,如果将stroke-dasharry第一个参数改为箭头大小的3倍,则箭头会3个3个的一起出现,有兴趣的同学可以试试。

继续阅读