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

1 背景

我们在ArcMap中可以直接通过symbol功能对图层进行定制化配图。但是,如果我们将配好图的shp图层在GeoServer中发布时,会发现图层样式完全丢失了。其实原因很简单,用ArcMap配好的图层,其样式文件并不是保存在shp中,而是保存在mxd或者msd中。

那么如何才能让GeoServer发布的图层也能达到定制化配图的效果呢?

2 SLD简介

SLD是风格化图层描述器(Styled Layer Descriptor)的简称,是2005年OGC提出的一个标准,这个标准在一定条件下允许WMS服务器对地图可视化的表现形式进行扩展。在没有SLD之前,只能使用一些已经在服务器上规定好的样式来对地图进行可视化。而当使用了实现了SLD标准之后,它允许我们从客户端来对地图进行定义自己的样式,分级显示等操作,极大的扩展了地图可视化的灵活性。

该SLD-规范是采用XML定义地图显示样式,通过自定义SLD来配置地图图层渲染的可视化风格,可以设置过滤器,自定义图例等。rule是SLD最重要的一个元素,因为她允许根据给定的某个参数(使用过滤器)对数据集进行分类,所有的与分类有关的重要参数都必须在rule元素中设置。

对于使用SLD来进行地图的自定义样式,则必须结合使用SE(Symbology Encoding)这个标准。SE是OGC的另一个标准,这个也是基于XML模式定义的,这个标准允许我们自定义不同的符号样式来表达地图上不同的要素。SLD文件使用这种语言,这样在地图渲染时地图服务可以解释由用户定义的样式。

SLD文档的元素架构如下:

一个SLD样式文档一般包含一个部分,而最重要的如下:

FeatureTypeStyle:这一部分是整个样式文档的根节点,并说明什么是它的样式将被应用的特征类型。FeatureTypeStyle包含一个或者多个Rule元素,Rule元素允许有条件的映射。

RULE(规则):规则是根据属性条件和地图比例尺来对要素进行分组渲染,一般RULE中只允许渲染一种类型的要素,即点,线,面等其中的一种,但是可以和注记同时使用。

Symbolizer(符号):Symbolizer指定数据应该如何可视化,在1.0的标准中包含五忠类型的Symbolizer,分别是PointSymbolizer(点符号)、LineSymbolizer(线符号)、PloygonSymbolizer(面符号)、TextSymbolizer(注记)、RasterSymbolizer(栅格)。

通过SLD可以设置的不仅仅是简单的颜色和厚度。点可以设置成常用的形状,如圆形,方形,星形,甚至可以是自定义的图片图形或文字来指定;线可以渲染成虚线或者点虚线等,多边形可以填充自定义的平铺图像,样式可以基于数据的属性给定,以至于要素能够

被渲染成不同的风格。

常用参数说明:


符号


含义


<Name>


样式名称


<FeatureTypeStyle>


要素样式


<Rule>


规则


<ogc:Filter>


过滤器


<ogc:PropertyIsBetween>


用来定义在两个属性值之间的过滤器


<ogc:PropertyIsLessThan>


用来定义在小于某个属性值的过滤器


<ogc:PropertyIsGreaterThan>


用来定义在大于某个属性值的过滤器


<ogc:PropertyName>


属性字段名


<ogc:Literal>


属性值


<PointSymbolizer>


点标记器


<LineSymbolizer>


线标记器


<PolygonSymbolizer>


面标记器


<CssParameter   name="fill">


填充颜色


<CssParameter   name="font-family">


字体


<CssParameter   name="font-style">


字体样式


<CssParameter   name="font-size">


字体大小

3 以polygon图层为例,详细讲解

3.1基本颜色填充

3.1.1 结构


PolygonSymbolizer


 


……Fill


填充


………CssParameter  name="fill"


颜色


………CssParameter  name="fill-opacity"


透明度


……Stroke


边界


………CssParameter  name="stroke"


颜色


………CssParameter  name="stroke-width"


宽度

3.1.2示例

带有边界透明的多边形

SLD:


<FeatureTypeStyle>
    <Rule>
        <PolygonSymbolizer>
        <Fill>
         <CssParameter   name="fill">#AAAAAA</CssParameter>
         <CssParameter   name="fill-opacity">0.5</CssParameter>
       </Fill>
       <Stroke>
        <CssParameter   name="stroke">#000000</CssParameter>
        <CssParameter   name="stroke-width">1</CssParameter>
      </Stroke>
     </PolygonSymbolizer>
    </Rule>
   </FeatureTypeStyle>

效果:

3.2图片填充

3.2.1结构


PolygonSymbolizer


 


……Fill


………GraphicFill


…………Graphic


……………ExternalGraphic


………………OnlineResource


图片来源


………………Format


图片格式


……………Size


大小

3.2.2示例

带有使用图片填充的多边形

SLD:


<FeatureTypeStyle>
    <Rule>
       <PolygonSymbolizer>

            <Fill>

              <GraphicFill>

                <Graphic>

                    <ExternalGraphic>

                     <OnlineResource xlink:type="simple"   xlink:href="20101.gif" />

                   <Format>image/gif</Format>

                    </ExternalGraphic>

                    <Size>20</Size>

                </Graphic>

              </GraphicFill>

            </Fill>

            <Stroke>

              <CssParameter   name="stroke">#000000</CssParameter>

              <CssParameter   name="stroke-width">1</CssParameter>

            </Stroke>

        </PolygonSymbolizer>

  </Rule>
   </FeatureTypeStyle>

效果:

3.3注记显示

3.2.1结构


TextSymbolizer


 


……Label


………ogc:PropertyName


注记的属性字段名称


……Font


字体


………CssParameter  name="font-family"


字体类型


………CssParameter  name="font-size"


字体大小


………CssParameter  name="font-style"


字体样式


………CssParameter  name="font-weight"


字体加粗


……LabelPlacement


注记的位置


………PointPlacement


注记点位置


…………AnchorPoint


……………AnchorPointX


……………AnchorPointY


…………Displacement


……………Displacement X


……………Displacement Y


…………Rotation


设置旋转角度


……Fill


填充


………CssParameter  name="fill"


填充颜色

3.2.2示例

带有注记的填充色透明的多边形

SLD:


<TextSymbolizer>
         <Label>
             <ogc:PropertyName>COMNAME</ogc:PropertyName>
         </Label>
         <Font>
             <CssParameter name="font-family">
微软雅黑</CssParameter>
             <CssParameter name="font-size">15</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">#FF5226</CssParameter>
         </Fill>
         <VendorOption name="followLine">true</VendorOption>
    </TextSymbolizer> 

 

 

效果:

4 注意

4.1 注记渲染时某些注记未显示

初始时,某个要素的注记无法显示:

放大后其又可以出现:

出现这种情况,往往是因为注记显示的地方在另外一个要素下面。

解决方法比较简单,利用LabelPalcement元素调整注记显示的地方便可解决。例如:


 <LabelPlacement>
         <PointPlacement>
           <AnchorPoint>
               <AnchorPointX>0.5</AnchorPointX>
               <AnchorPointY>0.5</AnchorPointY>
           </AnchorPoint>
         </PointPlacement>
       </LabelPlacement>

4.2 中文出现乱码


出现这样的情况,一般是SLD中为进行正确的格式编码赋值。

首先将编码改成GB2312。例如:


<?xml version="1.0" encoding="GB2312"?>

如果发现还是乱码,则很有可能是目前字体不支持中文。

例如当字体是Arial时,不支持中文:


<CssParameter name="font-family">Arial</CssParameter>

将字体改成微软雅黑,则注记不再重现乱码:


<CssParameter name="font-family">微软雅黑</CssParameter>

5 总结

对Point和Line图层的SLD文件编写,其格式和内容与Polygon大体相似,不再累述。GeoServer不仅支持对矢量图层的渲染,还支持对栅格图层的渲染。在以后的章节中我会跟大家继续一起探讨。

--欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

时间: 2024-10-06 05:46:24

GeoServer中利用SLD配图之矢量图层配图的相关文章

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

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

MAPINFO中利用GridMaker工具创建栅格图层

在工作中需要使用栅格地图,以往都是由研发人员来创建,今天偶然发现Mapinfo中有GridMaker这样一个工具,结合网络搜索自己试了一下,居然做成功了,这里把步骤记录下来,方便以后查看. 1.首先在测定需要创建栅格的城市经纬度范围 这个比较简单,分别将鼠标放在地图区域的左下角和右上角,然后通过Mapinfo左下角的CursorLocation得到两个点的经纬度,即为整个区域的经纬度范围. 2.Mapinfo中添加GridMaker工具 在Mapinfo中Tools->Tool Manager中

如何在Geoserver中测试SLD样式文件的正确性

1. 打开Geoserver. 2.登录系统. 3.打开样式功能 4.选择添加样式功能 5.选择上传样式文件 6.上传之后点击验证 7.验证结果: 到页面顶端查看验证结果 会提示错误. 找到错误如下: 如果是绿色表示样式无问题.

ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具

在一个项目中,用户采用GeoServer做为GIS服务器(原因嘛当然是免费能省钱,经过验证可能还会在性能和稳定性等表现力也有优越性),但是手上收集的数据都是ESRI格式的,这倒不打紧,因为GeoServer直接能够支持ESRI的shape file和ArcSDE两种数据格式,要命的是用户的配图也是用ESRI,mxd中40个左右的图层组织和专题图样式都配好了.在网上查了大部分关于在GeoServer中发布服务的样式都是建议在uDig中重新配置,然后导出SLD文件,添加到GeoServer中.由于时

GeoServer中使用样式化图层描述符(sld)加注记

现有一个shp格式的道路注记文件,用点来表示注记的位置,属性表中保存每个点对应的字,在QGIS中打开如下图所示 它的属性表如下 现需要把道路数据和它的注记发布为WMS服务,通过GeoServer直接发布服务的话会显示默认的样式,这个版本中(2.6.2)默认情况下点用红色的方块表示,无法表示注记信息.因此需要使用样式化图层描述符(sld)来设置样式,本质就是个XML文件. 首先可以从这里http://docs.geoserver.org/stable/en/user/styling/sld/coo

(十二) WebGIS中矢量图层的设计

1.前言 在前几章中我们已经了解了什么是矢量查询.屏幕坐标与地理坐标之前的转换以及要素的设计,有了这些知识,这一章里我们终于可以进行矢量图层的设计了. 在Catalog里创建一个FeatureClass时,我们能够选择是创建点图层或者线图层或者面图层等.所谓点图层,即该图层中的要素只能是点,其他几个图层顾名思义,也是如此.那么在WebGIS中,我们同样也可以按照ArcGIS里的这个设计思路来设计我们的矢量图层,虽然这个方法是肯定可行的,但是在实际的业务需求中,如果按照这种点图层等来严格控制的话,

(七)WebGIS中的栅格图层和矢量图层的显示原理

1.何为栅格数据,何为矢量数据? 在GIS中,对于数据格式的分类,我们一般会将其分为栅格数据和矢量数据两种类型.栅格数据是将空间看做离散的像元,由二维数组或者其他数据组织方式来进行表达.矢量数据恰恰相反,它将空间看成是连续的,用要素(点.线.面)来进行表达. 我们把栅格数据和矢量数据的特点归纳如下: (1)栅格数据是离散的,矢量数据是连续的.所以栅格数据多用二维数组(行.列)的方式组织.而矢量数据可以理解为一种向量,它用平面坐标(X.Y)的有序几何来组织. (2)栅格数据的最小单位是像素,矢量数

简析Geoserver中获取图层列表以及各图层描述信息的三种方法

1.背景 实际项目中需要获取到Geoserver中的图层组织以及各图层的描述信息:比如字段列表等.在AGS中,我们可以直接通过其提供的REST服务获取到图层组织情况以及图层详细信息列表,具体如下所示: 那么在Geoserver中是否也有相关用法?各种方法之间有何优劣? 2.REST请求方法 2.1方法描述 该方法与上面讲解的AGS的REST请求方法类似,也是先获取到组织情况然后再进行各个图层的描述信息获取: 获取workspace信息: 获取workspace下的datasource信息:获取w

openlayers3 在地图上叠加WFS查询矢量图层

随着终端设备计算能力的加强,用户在使用地图的时候也需要越来越多的交互效果.比如现在很火的室内导航,为了获得好的用户体验,就需要当用户单击某一商店的时候该商店的颜色能相应的变化,这就需要叠加矢量图层.如何能在瓦片地图之上叠加矢量图层呢,这个就需要用到WFS查询. 我的思路是:基于WFS查询把得到需要矢量显示的图层中数据,然后再显示.具体思路为: 1.通过geoserver的WFS服务查询所需要矢量显示的数据信息 2.设置矢量数据的显示样式 3.openlayers添加矢量图层 4.设置鼠标移上去的