开源WebGIS实施方案(五):基于SLD实现图层符号化及其应用
SLD概述
SLD(OpenGIS® Styled Layer Descriptor):图层样式注记。其当前版本是1.1.0。SLD是一种描述地图图层样式的标准,一般用于WMS中的图层符号化。
说白了,SLD就是以xml文件的结构形式,定义了一组图层渲染的规则。一个简单的面状SLD示例如下:
<?xml version="1.0" encoding="UTF-8"?><sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
<sld:UserLayer>
<sld:LayerFeatureConstraints>
<sld:FeatureTypeConstraint/>
</sld:LayerFeatureConstraints>
<sld:UserStyle>
<sld:Name>municipality</sld:Name>
<sld:FeatureTypeStyle>
<sld:Name>group 0</sld:Name>
<sld:Rule>
<sld:Name>New rule</sld:Name>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">#E9E9E9</sld:CssParameter>
<sld:CssParameter name="fill-opacity">0.5</sld:CssParameter>
</sld:Fill>
<sld:Stroke>
<sld:CssParameter name="stroke">#0000FF</sld:CssParameter>
</sld:Stroke>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:UserLayer>
</sld:StyledLayerDescriptor>
如何创建SLD 文件
既然SLD本质上就是一个xml文件,所以我们当然有多种方式来创建SLD了。一般来说,主要有以下几类方式
1、纯手写。
2、利用开源软件对图层进行符号化渲染,再导出对应的SLD文件。
3、先使用ArcGIS配图,再通过某种“黑科技”手段将图层样式导出为SLD。
对于第一种方式,难度不是一般的高,不推荐使用。当然, 如果是一头很大很大的牛,可以考虑这么做。
第二种方式是目前用的最多的一种方式,比较可行的软件有uDig、QGIS等,在桌面软件中进行符号化配置,然后就可以直接导出SLD文件。但这类开源软件使用起来多少都有一些bug,需要小心避坑。
第三种方式,其实也可以算是第二种方式中的一个特例。作为全球领先的GIS软件,ArcGIS在制图表达上有着无可比拟的优势,但作为一个商业公司,与开源免费的精神有着不可调和的价值冲突,所以ArcGIS中并不提供导出图层符号化SLD文件功能。所以这个时候Coder就可以发挥专长来创造某种“黑科技”了——将ArcGIS图层渲染样式导出为SLD文件。
uDig配图并创建SLD
这里选用uDig来创建SLD文件。
对城市点图层进行符号化,在样式编辑器中指定分类渲染,并且分别设置每一个类别的渲染符号、标注内容、标注样式等


效果图如下:

提醒一下,配图是一门技术活,也是一门艺术活,水略深。
导出SLD文件:

按照类似的方式,可以分别制作每一个图层的SLD文件。
在GeoServer中应用SLD
在桌面GIS软件中完成制图,相应的完成了SLD的创建工作。如果想要在WMS中展现出与桌面GIS中相同的渲染效果,就需要在GeoServer中应用SLD了。
在GeoServer管理后台中添加新样式,确保SLD内容符合规则,设置好其它参数后提交。


对GeoServer中,针对相应图层应用该Style。对于未发布的图层,可以在发布设置时候直接选用该Style,图层发布请参考开源WebGIS实施方案(四):GeoServer发布PostGIS数据。对于已发布的图层,可以进行编辑,选用该Style

依照类似的方式,对其它图层应用Style。完成后,使用GeoServer的WMS服务获取地图渲染效果图

总结:本文简单介绍了SLD是什么、能够起什么作用,介绍了创建SLD的三种方式,并使用其中一种方式进行实践应用。
开源WebGIS实施方案(五):基于SLD实现图层符号化及其应用的更多相关文章
- 开源WebGIS实施方案(六):空间数据(PostGIS)与GeoServer服务迁移
研发环境的变更,或者研发完成进行项目现场实施.运维的时候,经常就会面临数据及服务的迁移,这其中就包含空间数据以及GeoServer服务的迁移工作. 这里需要提醒的是:如果采用的是类似的开源WebGIS ...
- 开源WebGIS实施方案(四):GeoServer发布PostGIS数据
GeoServer可以支持多种格式的数据源,本文只介绍其中一种,即PostGIS数据源. 新建一个工作区.工作区这个名字也是一变再变,早前叫做目录,后来改为工作空间,如今已变为工作区了. 添加数据存储 ...
- 开源WebGIS实施方案(三):Shapefile数据导入到PostGIS
PostGIS新版中提供了一个可视化的工具,用于Shapefile数据的导入和导出,极大的方便了使用者的操作. 创建空间数据库 以具有创建用户权限的账号登录pgAdminIII,连接到数据库 创建一个 ...
- 面向企业级的开源WebGIS解决方案--MapGuide(对比分析)
在技术特点.功能.架构等方面,MapGuide与其他WebGIS产品有什么区别?本文主要从此角度来介绍MapGuide的特性,以供参考. 本人选择了比较熟悉的几款WebGIS产品:MapServ ...
- 你必须知道的容器日志 (2) 开源日志管理方案 ELK
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<你必须知道的容器日志(1)>中介绍了Docker自带的log ...
- 83 项开源视觉 SLAM 方案够你用了吗?
作者:吴艳敏 来源:83 项开源视觉 SLAM 方案够你用了吗? 前言 1. 本文由知乎作者小吴同学同步发布于https://zhuanlan.zhihu.com/p/115599978/并持续更新. ...
- AMQ学习笔记 - 14. 实践方案:基于ZooKeeper + ActiveMQ + replicatedLevelDB的主从部署
概述 基于ZooKeeper + ActiveMQ + replicatedLevelDB,在Windows平台的主从部署方案. 主从部署可以提供数据备份.容错[1]的功能,但是不能提供负载均衡的功能 ...
- 从零开始学习jQuery (八) 插播:jQuery实施方案
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章属于临时插播, 用于介绍我在本公司的j ...
- 开源的PaaS方案:在OpenStack上部署CloudFoundry (一)简介
目录(?)[-] OpenStack简介 OpenStack是一个美国国家航空航天局和Rackspace合作研发的以Apache许可证授权并且是一个自由软件和开放源代码项目 OpenStack是一个云 ...
随机推荐
- 内存泄漏检测工具VLD在VS2010中的使用举例
Visual LeakDetector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.它的特点有:(1).它是免费开源的,采用LGPL协议:(2).它可以得到内存泄露点的调用堆栈,可 ...
- Spring boot with Apache Hive
5.29.1. Maven <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- http中的Content-Type
要学习content-type,必须事先知道它到底是什么,是干什么用的. HTTP协议(RFC2616)采用了请求/响应模型.客户端向服务器发送一个请求,请求头包含请求的方法.URI.协议版本.以及包 ...
- selenium+python自动化83-pip安装selenium报Read time out HTTPSConnectionPool(host='pypi.python.org' port443)
遇到问题 1.有些小伙伴在用pip安装selenium时候报 Read time out HTTPSConnectionPool(host='pypi.python.org' port443) 2.估 ...
- zmq消息订阅
一个需求,用户预约了手机超时没有使用,要通知到预约的用户“设备超时”. 我本来是自己这一端计时然后超时后推送通知的. 但是上海测说他那边计时,然后释放手机.我这边只要订阅他那边的消息就好了. 外部的应 ...
- 使用打印方法时,要先引用命名空间: Using System.Drawing.Pringing
使用打印方法时,要先引用命名空间: Using System.Drawing.Pringing PrintDocument类的重要属性和方法:属性:DocumentName 设置打印文档时要显示的文 ...
- GridEh排序
添加pas文件 EhLibADO.pas EhLibCDS.pas EhLibFireDAC.pas 支持FireDAC 设置GridEh的属性 DBGridEh1->SortLocal = t ...
- 通过django创建数据库的方法
在models 文件中实现 a. from django.db import models class UserInfo(models.Model): #id列, 自增, 主键 #用户名列, 字符串类 ...
- spring security+cas(cas proxy配置)
什么时候会用到代理proxy模式? 举一个例子:有两个应用App1和App2,它们都是受Cas服务器保护的,即请求它们时都需要通过Cas 服务器的认证.现在需要在App1中通过Http请求访问App2 ...
- go_组合接口
main函数入口 package main import ( "fmt" "learngo/retriever/mock" "learngo/retr ...