geoserver 图层样式

1.Styled Layer Descriptor

标准描述了稳当的结构合使用规则。一个文档包含了符号定义和绘制规则,那么这个文档就叫做Styled Layer Desciptor(SLD)样式,它是一个text/Xml文件,扩展名为.sld。SLD基于XML标记语言,附加的标准是一个XSD schema,XSD schema定义了SLD语法。

2.样式文档结构

样式最外层部分包含如下片段:

<?xml version="1.0" encoding="ISO-8859-1"?>
    <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">

第一行包含xml定义,每一个样式文件的根节点都为StyledLayerDescriptor,包含了样式标准的版本属性version(Geoserver可使用1.0.0和1.1.0 SLD版本),还包含了命名空间和模型属性。
    StyledLayerDescriptor节点包含了一个NamedLayer或者UserLayer的集合,这两个节点下面又包含了UserStyle节点集合。
UserStyle节点下包含FeatureTypeStyle或者CoverageStyle节点。它们下面都包含了rule集合元素。rule节点定义了怎样绘制features。下面是一个简单的样式文件:

<?xml version="1.0" encoding="UTF-8"?>
<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>capitals</Name>
        <UserStyle>
            <Name>capitals</Name>
            <Title>Capital cities</Title>
            <FeatureTypeStyle>
                <Rule>
                    <Title>Capitals</Title>
                    <PointSymbolizer>
                        <Graphic>
                        <Mark>
                        <WellKnownName>circle</WellKnownName>
                        <Fill>
                        <CssParameter name="fill">
                        <ogc:Literal>#FFFFFF</ogc:Literal>
                        </CssParameter>
                        </Fill>
                        <Stroke>
                        <CssParameter name="stroke">
                        <ogc:Literal>#000000</ogc:Literal>
                        </CssParameter>
                        <CssParameter name="stroke-width">
                        <ogc:Literal>2</ogc:Literal>
                        </CssParameter>
                        </Stroke>
                        </Mark>
                        <Opacity>
                        <ogc:Literal>1.0</ogc:Literal>
                        </Opacity>
                        <Size>
                        <ogc:Literal>6</ogc:Literal>
                        </Size>

                        </Graphic>
                    </PointSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

UserStyle定义了一个circle符号使用白色填充,黑色边界。WellKnownName包括:circle、square、triangle、star、cross、x。

使用geoserver-数据-Styles可查看配置并校验Style文件是否合法。

Rule节点下课包含多个PointSymbolizer,样式文件渲染顺序是倒序的,放在后面的PointSymbolizer渲染在地图上一层,前面的PointSymbolizer渲染在地图的下一层,相当于z-index的顺序。

3.实现一个点包含多个形状(包含多个PointSymbolizer)的样式例子

实现一个比较复杂的点的样式定义,显示效果如下:

样式定义如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
    <NamedLayer>
        <Name>opulatedPlacesComplex</Name>
        <UserStyle>
            <Title>Geoserver Beginners Guide: mark composed of three basic shapes</Title>
            <FeatureTypeStyle>
                <Rule>
                    <PointSymbolizer>
                        <Graphic>
                            <Mark>
                                <WellKnownName>circle</WellKnownName>
                                <Fill>
                                    <CssParameter name="fill">#00FF00</CssParameter>
                                </Fill>
                                <Stroke>
                                    <CssParameter name="stroke">#000000</CssParameter>
                                    <CssParameter name="stroke-width">1</CssParameter>
                                </Stroke>
                            </Mark>
                            <Size>16</Size>
                        </Graphic>
                    </PointSymbolizer>
                    <PointSymbolizer>
                        <Graphic>
                            <Mark>
                                <WellKnownName>square</WellKnownName>
                                <Fill>
                                    <CssParameter name="fill">#FF0000</CssParameter>
                                </Fill>
                                <Stroke>
                                    <CssParameter name="stroke">#000000</CssParameter>
                                    <CssParameter name="stroke-width">1</CssParameter>
                                </Stroke>
                            </Mark>
                            <Size>10</Size>
                        </Graphic>
                    </PointSymbolizer>
                    <PointSymbolizer>
                        <Graphic>
                            <Mark>
                                <WellKnownName>circle</WellKnownName>
                                <Fill>
                                    <CssParameter name="fill">#000000</CssParameter>
                                </Fill>
                            </Mark>
                            <Size>5</Size>
                        </Graphic>
                    </PointSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

4.实现一个点包含外部资源形状(ExternalGraphic)的样式例子

显示的点通过一个外部svg图片来显示,效果如下:

样式定义如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
    <NamedLayer>
        <Name>PopulatedPlacesGraphic</Name>
        <UserStyle>
            <Title>Geoserver Beginners Guide: Populated Places with external graphics</Title>
            <FeatureTypeStyle>
                <Rule>
                    <PointSymbolizer>
                        <Graphic>
                            <ExternalGraphic>
                                <OnlineResource
                                xlink:type="simple"
                                xlink:href="town.svg"/>
                                <Format>image/svg+xml</Format>
                            </ExternalGraphic>
                            <Size>20</Size>
                        </Graphic>
                    </PointSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

如果想组合不同的符号,可通过Inkscape来设置图形样式,地址:https://inkscape.org/en/

5.线条样式,大自然水渠的样式

想象输入去表达大自然的水渠?在地图中,水渠经常使用虚线和远点来表示。效果如下:

实现样式的Xml如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
    <NamedLayer>
        <Name>DashingAndMarkers</Name>
        <UserStyle>
            <Title>Title>Geoserver Beginners Guide: Aqueducts with dashing and circle</Title>
            <FeatureTypeStyle>
                <Rule>
                    <LineSymbolizer>
                        <Stroke>
                            <CssParameter name="stroke">#ADD8E6</CssParameter>
                            <CssParameter name="stroke-width">2</CssParameter>
                            <CssParameter name="stroke-dasharray">10 10</CssParameter>
                        </Stroke>
                    </LineSymbolizer>
                    <LineSymbolizer>
                        <Stroke>
                            <GraphicStroke>
                                <Graphic>
                                    <Mark>
                                        <WellKnownName>circle</WellKnownName>
                                        <Stroke>
                                            <CssParameter name="stroke">#ADD8E6</CssParameter>
                                            <CssParameter name="stroke-width">1</CssParameter>
                                        </Stroke>
                                    </Mark>
                                    <Size>5</Size>
                                </Graphic>
                            </GraphicStroke>
                            <CssParameter name="stroke-dasharray">5 15</CssParameter>
                            <CssParameter name="stroke-dashoffset">7.5</CssParameter>
                        </Stroke>
                    </LineSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

第一个LineSymbolizer画出了虚线效果,第二个LineSymbolizer画出了圆点的效果。

6.多边形样式,使用阴影填充多边形

一般多边形都是通过边界和单一填充颜色来表示。但多边形也可以使用其他图形来作为阴影。下图给每个国家使用点来填充,效果如下:

实现样式的Xml文件内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
    <NamedLayer>
        <Name>CountriesHatching</Name>
        <UserStyle>
            <Title>Geoserver Beginners Guide: Countries with hatching</Title>
            <FeatureTypeStyle>
                <Rule>
                    <PolygonSymbolizer>
                        <Fill>
                            <GraphicFill>
                                <Graphic>
                                    <Mark>
                                        <WellKnownName>shape://dot</WellKnownName>
                                        <Stroke>
                                            <CssParameter name="stroke">#29A6A6</CssParameter>
                                            <CssParameter name="stroke-width">3</CssParameter>
                                        </Stroke>
                                    </Mark>
                                    <Size>16</Size>
                                </Graphic>
                            </GraphicFill>
                        </Fill>
                        <Stroke>
                            <CssParameter name="stroke">#A52A2A</CssParameter>
                            <CssParameter name="stroke-width">2</CssParameter>
                        </Stroke>
                    </PolygonSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

多边形的标记为PolygonSymbolizer,使用WellKnownName为shape://dot显示点效果。Stroke设置了点的边框颜色和大小。Geoserver为我们提供了很多标记效果。

shape://vertline:垂直线。

shape://horline: 水平线。

shape://slash: 对角线向前倾斜(“/”)。

shape://backslash:对角线向后斜线(“\”)。

shape://dot: 一个小的圆圈,圆圈之间有空隙。

shape://plus: 一个加号,加号之前没有空隙。

shape://times:一个“X”符号,没有空隙。

shape://oarrow:一个向外的箭头。

shape://carrow:一个向内 箭头。

7.在点上显示文字

在显示每个国家的首都时,一般都会在中心坐标显示首都名字,可通过字体标记来显示字体。效果如下:

实现样式的xml文件如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
    <NamedLayer>
        <Name>PopulatedPlacesLabeled</Name>
        <UserStyle>
            <Title>Geoserver Beginners Guide: Populated Places with styled labels</Title>
            <FeatureTypeStyle>
                <Rule>
                    <PointSymbolizer>
                        <Graphic>
                            <Mark>
                                <WellKnownName>circle</WellKnownName>
                                <Fill>
                                    <CssParameter name="fill">#FF0000</CssParameter>
                                </Fill>
                                <Stroke>
                                    <CssParameter name="stroke">#000000</CssParameter>
                                    <CssParameter name="stroke-width">1</CssParameter>
                                </Stroke>
                            </Mark>
                            <Size>8</Size>
                        </Graphic>
                    </PointSymbolizer>
                    <TextSymbolizer>
                        <Label>
                            <ogc:PropertyName>NAME</ogc:PropertyName>
                        </Label>
                        <Font>
                            <CssParameter name="font-family">Arial</CssParameter>
                            <CssParameter name="font-size">12</CssParameter>
                            <CssParameter name="font-style">normal</CssParameter>
                            <CssParameter name="font-weight">italyc</CssParameter>
                        </Font>
                        <LabelPlacement>
                            <PointPlacement>
                                <AnchorPoint>
                                    <AnchorPointX>0</AnchorPointX>
                                    <AnchorPointY>0</AnchorPointY>
                                </AnchorPoint>
                                <Displacement>
                                    <DisplacementX>2</DisplacementX>
                                    <DisplacementY>5</DisplacementY>
                                </Displacement>
                            </PointPlacement>
                        </LabelPlacement>
                        <Fill>
                            <CssParameter name="fill">#000000</CssParameter>
                        </Fill>
                    </TextSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

8.在连线上显示文字

一般某一段线路都会对应有名称,显示效果如下:

实现样式的xml文件如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
    <NamedLayer>
        <Name>RoadsLabeled</Name>
        <UserStyle>
            <Title>Title>Geoserver Beginners Guide: Roads with labels along the line</Title>
            <FeatureTypeStyle>
                <Rule>
                    <LineSymbolizer>
                        <Stroke>
                            <CssParameter name="stroke">#000000</CssParameter>
                            <CssParameter name="stroke-width">4</CssParameter>
                        </Stroke>
                    </LineSymbolizer>
                    <LineSymbolizer>
                        <Stroke>
                            <CssParameter name="stroke">#FF0000</CssParameter>
                            <CssParameter name="stroke-width">2</CssParameter>
                        </Stroke>
                    </LineSymbolizer>
                    <TextSymbolizer>
                        <Label>
                            <ogc:PropertyName>continent</ogc:PropertyName>
                        </Label>
                        <LabelPlacement>
                            <LinePlacement>
                                <PerpendicularOffset>10</PerpendicularOffset>
                            </LinePlacement>
                        </LabelPlacement>
                        <Fill>
                            <CssParameter name="fill">#000000</CssParameter>
                        </Fill>
                        <VendorOption name="followLine">true</VendorOption>
                        <VendorOption name="maxAngleDelta">90</VendorOption>
                        <VendorOption name="maxDisplacement">400</VendorOption>
                        <VendorOption name="repeat">300</VendorOption>
                    </TextSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

VendorOption设置一些文字的渲染参数,repeat表示道路显示文字的间隔距离,followLine设置文字是否颜色线路方向显示。

9.在多边形上显示文字

在每个国家的多边形边界中显示名称,效果如下:

实现效果的xml文件内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
    <NamedLayer>
        <Name>CountriesLabeled</Name>
        <UserStyle>
            <Title>Geoserver Beginners Guide: Countries with labels</Title>
            <FeatureTypeStyle>
                <Rule>
                    <PolygonSymbolizer>
                        <Fill>
                            <CssParameter name="fill">#29A6A6</CssParameter>
                        </Fill>
                        <Stroke>
                            <CssParameter name="stroke">#A52A2A</CssParameter>
                            <CssParameter name="stroke-width">2</CssParameter>
                        </Stroke>
                    </PolygonSymbolizer>
                    <TextSymbolizer>
                        <Label>
                            <ogc:PropertyName>name</ogc:PropertyName>
                        </Label>
                        <Font>
                            <CssParameter name="font-family">Arial</CssParameter>
                            <CssParameter name="font-size">11</CssParameter>
                            <CssParameter name="font-style">normal</CssParameter>
                            <CssParameter name="font-weight">bold</CssParameter>
                        </Font>
                        <LabelPlacement>
                            <PointPlacement>
                                <AnchorPoint>
                                    <AnchorPointX>0.5</AnchorPointX>
                                    <AnchorPointY>0.5</AnchorPointY>
                                </AnchorPoint>
                            </PointPlacement>
                        </LabelPlacement>
                        <Fill>
                            <CssParameter name="fill">#000000</CssParameter>
                        </Fill>
                        <VendorOption name="autoWrap">50</VendorOption>
                        <VendorOption name="maxDisplacement">150</VendorOption>
                        <Halo>
                            <Radius>3</Radius>
                            <Fill>
                                <CssParameter name="fill">#FFFFFF</CssParameter>
                            </Fill>
                        </Halo>
                    </TextSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

Halo节点下设置文字的阴影效果,geoserver校验该字段会失败,但是可以正常使用。

时间: 2024-12-27 17:42:13

geoserver 图层样式的相关文章

第十七课 图层样式

图层控制面板上的按钮: 锁定透明像素:可以直接点击该按钮或者用快捷键“/”——可将透明的区域锁定不被编辑故只填充有像素的部分. 锁定图像的像素:可以改变对象的位置而不能改变对象的颜色. 锁定位置:与第二个按钮相反,不可以改变对象的位置,但可以改变对象的颜色. 锁定全部:具有前面三个按钮的功能. 添加图层样式: 斜面和浮雕:内斜面:沿图像的边缘向内创建斜面 外斜面:沿图像的边缘向外创建斜面. 枕状浮雕:用于创建图像的边缘,陷于下层的图层效果. 投影: 距离:投影与原对象之间产生的距离 扩展:投影的

Photoshop技巧:图层蒙版同步隐藏图层样式

原效果: 添加图层蒙版后,遮住一半,图层样式仍在,如: 进入图层样式,勾选"图层蒙版隐藏效果" 最终效果:

11-5设定图层样式

http://www.missyuan.com/thread-527629-1-1.html 所谓图层样式,就是在不改变图层内容的情况下,为之化妆产生新效果.(别以为是混合模式) 添加方法: 一是在图层调板中双击图层:二是点击图层调板下方的按钮 :三是通过菜单[图层_图层样式]. 修改方法: 如果要更改图层样式的设定,可以直接双击样式项目,就会直接进入图层样式中该项目的设定,如果只是双击图层,则只会开启设定框而不会对应到具体的样式项目上. 投影:如果改变等高线引起阴影锯齿,可以开启消除锯齿选项.

ps: 图层样式;

图层样式是ps的一项图层处理能力,功能强大,能够简单快捷的制作处立体投影,各种质感以及光影效果. 10种图层样式: (1)投影:将为图层上的对象.文本或形状后面添加阴影效果.投影参数由“混合模式”.“不透明度”.“角度”.“距离”.“扩展”和“大小”等各种选项组成,通过对这些选项的设置可以得到需要的效果. (2)内阴影:将在对象.文本或形状的内边缘添加阴影,让图层产生一种凹陷外观,内阴影效果对文本对象效果更佳. (3)外发光:将从图层对象.文本或形状的边缘向外添加发光效果.设施参数可以让对象.文

GeoServer中利用SLD配图之矢量图层配图

1 背景 我们在ArcMap中可以直接通过symbol功能对图层进行定制化配图.但是,如果我们将配好图的shp图层在GeoServer中发布时,会发现图层样式完全丢失了.其实原因很简单,用ArcMap配好的图层,其样式文件并不是保存在shp中,而是保存在mxd或者msd中. 那么如何才能让GeoServer发布的图层也能达到定制化配图的效果呢? 2 SLD简介 SLD是风格化图层描述器(Styled Layer Descriptor)的简称,是2005年OGC提出的一个标准,这个标准在一定条件下

GeoServer中一个shape发布多个图层时出现调用空白的问题及解决办法

最近一个项目要用GeoServer,匆忙上手就用,遇到了很多可能出人意料的问题,"用一个shape文件发布多个图层时出现openlayers调用显示空白的问题"就是其中一个,百思不得其解,到GeoServer中文社区遍查贴子,GeoServer.org中扫完UserManual,花了一天半时间,也没有找到答案,中午趴着眯会儿时忍不住还在想,到处都没有相关资料,肯定不是一个常规问题,于是静下心来想,发布一个图层的几个关键环节和服务渲染的原理,工作区->数据存储->(图层+样式

cesium结合geoserver利用WFS服务实现图层编辑(附源码下载)

前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内容概览 1.cesium结合geoserver利用WFS服务实现图层编辑功能2.源代码demo下载 效果图如下: 本篇主要是在上一篇cesium结合geoserver利用WFS服务实现图层新增(附源码下载)基础上实现的,cesium通过调用geoserver发布的地图服务WFS来达到图层编辑记录的目

[原]导入OpenStreetMap海图数据,并在GeoServer上发布

转载请注明作者think8848和出处(http://think8848.cnblogs.com) 上回我们说到如何<在GeoServer中为OpenStreetMap数据设置OSM样式>,文中本来是要发布海图的,因为时间太晚了,所以今天补上吧. 1. 下载OpenStreetMap海图数据 请打开这个网站下载http://openstreetmapdata.com/data/water-polygons OpenStreetMap海图数据(是否称为水图更好点:)) 这里面有三个文件,本文将用

World Wind Java开发之十三——加载Geoserver发布的WMS服务(转)

这篇是转载的平常心博客,原地址见:http://www.v5cn.cn/?p=171 1.WMSTiledImageLayer类说明 一个WMSTiledImageLayer类对象只能对应一个WMS发布的服务图层,使用WMS服务时需要使用到WMS元数据描述类WMSCapabilities对象,我们使用WMSCapabilites类的静态方法retrieve来获得它的对象.WMSCapabilites对象可以包含WMS服务中所以的图层和图层样式,我们通过把需要显示的图层名称保存到AVList对象中