目录
知识地图
一、前言
二、Qgis符号化转变成SLD
1、Qis中符号化生成
2、SLD样式导出
三、GeoServer数据发布
1、矢量图层发布
2、在GeoServer中发布样式
总结
知识地图
序号 | 博文链接 |
1 | 使用LeafLet叠加Geoserver wms图层到已有底图的方法 |
2 | 关于GeoServer发布服务时数据源设置的避坑指南 |
3 | 基于Leaflet的乡镇行政区划在WebGIS中的可视化工具实践 |
4 | 基于QGIS的长株潭城市群边界范围融合实战 |
5 | Qgis中进行Shp和Excel属性连接实现百强县公共预算空间分析 |
6 | Qgis加载在线XYZ瓦片影像服务的实践操作 |
7 | 在Qgis中使用QMetaTiles插件进行XYZ瓦片离线下载方法 |
8 | Qqis中采用栅格工具生成XYZ瓦片(目录)简介 |
9 | GeoServer中地图可视化提升利器之SLD知识简介 |
10 | Qgis基本操作之图层符号化和标注实战 |
一、前言
WebGIS是一种基于互联网的地理信息系统,它可以在Web浏览器上实现地理信息数据的可视化、分析、查询和管理等功能。WebGIS的核心技术是利用Web服务器和Web浏览器来发布和显示地理信息数据和功能,它可以让用户通过浏览器访问地理信息数据和功能,并且可以通过互联网实现空间信息的共享和交互。
WebGIS的应用范围非常广泛,包括地图服务、城市规划与管理、商业分析与决策支持、土地利用与覆盖变化监测、环境监测与保护、灾害预警与应急管理等领域。WebGIS的应用可以为用户提供丰富的地理信息数据和服务,帮助用户更好地了解和分析空间信息,提高决策的准确性和效率。
在之前的博客中,我们讲解了基于桌面端gis软件Qgis进行gis空间可视化的一些博客,博客地址见上面的知识地球索引。从空间数据到能在互联网上进行公开发布,让用户看到精美的地图,那一定会需要用到webgis技术。因此采用GeoServer进行地图服务的发布,使用Qgis辅助SLD样式制作,最后发布成WMS服务供前端LeafLet进行展示。本文将内容贯穿于整个Webgis地图样式制作及可视化配置全过程,详细讲解了如何把Qgis制作的SLD文件发布到Geoserver中,让大家熟悉Webgis的简单制作流程。
二、Qgis符号化转变成SLD
1、Qis中符号化生成
还是以2022年百强县一般公共预算收入数据和省份数据为例,前文说到,已经完成了在Qgis中的符号化制图。制图的效果如下图所示:
图中,我们对两个不同的矢量图层都进行了标注和符号化设置。在Qgis中,我们是可以直接导出SLD文件的,通常来说,可以将SLD文件直接在GeoServer中进行发布。这里,我们先进行SLD样式文件导出。
2、SLD样式导出
SLD样式导出有两种方式(这里演示一种方式),以全国百强县公共预算收入图层为例。第一种方式为,使用鼠标点击目标图层,右键导出,再选择另存为Qgis图层样式文件。
点击菜单后,弹出以下的窗口。
点击保存可以得到当前图层的SLD文件,用文本编辑器打开可以看到如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:se="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1.0">
<NamedLayer>
<se:Name>2022年全国百强县一般公共预算收入榜</se:Name>
<UserStyle>
<se:Name>2022年全国百强县一般公共预算收入榜</se:Name>
<se:FeatureTypeStyle>
<se:Rule>
<se:Name>45 - 100</se:Name>
<se:Description>
<se:Title>45 - 100</se:Title>
</se:Description>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>44.79999999999999716</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>100</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:And>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#f7fcf5</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:Name>100 - 200</se:Name>
<se:Description>
<se:Title>100 - 200</se:Title>
</se:Description>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>100</ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>200</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:And>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#caeac3</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:Name>200 - 300</se:Name>
<se:Description>
<se:Title>200 - 300</se:Title>
</se:Description>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>200</ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>300</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:And>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#7bc87c</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:Name>300 - 400</se:Name>
<se:Description>
<se:Title>300 - 400</se:Title>
</se:Description>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>300</ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>400</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:And>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#2a924a</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:Name>400 - 430</se:Name>
<se:Description>
<se:Title>400 - 430</se:Title>
</se:Description>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>400</ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName> abs("ggys")</ogc:PropertyName>
<ogc:Literal>430.18000000000000682</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:And>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#00441b</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:TextSymbolizer>
<se:Label>
<!--SE Export for NAME + '\n' + ' 预算收入' + ggys + '(亿元)' not implemented yet-->Placeholder</se:Label>
<se:Font>
<se:SvgParameter name="font-family">SimSun</se:SvgParameter>
<se:SvgParameter name="font-size">13</se:SvgParameter>
</se:Font>
<se:LabelPlacement>
<se:PointPlacement>
<se:AnchorPoint>
<se:AnchorPointX>0</se:AnchorPointX>
<se:AnchorPointY>0.5</se:AnchorPointY>
</se:AnchorPoint>
</se:PointPlacement>
</se:LabelPlacement>
<se:Fill>
<se:SvgParameter name="fill">#000000</se:SvgParameter>
</se:Fill>
<se:VendorOption name="maxDisplacement">1</se:VendorOption>
</se:TextSymbolizer>
</se:Rule>
</se:FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
同样的,将省份信息的SLD样式导出来。
三、GeoServer数据发布
1、矢量图层发布
在GeoServer管理器中新建数据源,详细操作如下:
这里根据数据源选择Shapefile,点击继续,新建矢量数据源,选择源文件,添加到GeoServer管理器中。
这里需要注意的是DBF的字符集的设置很重要,最好跟Qgis中的数据集一致就不会出现中文乱码问题。注意,这里只是将图层使用默认样式发布出来,在图层预览时可以看到如下的页面,以公共预算收入为例。
可以看到,服务发布后,并不是按照设想的方式进行展示的。
2、在GeoServer中发布样式
在GeoServer中可以进行图层样式的集中管理。详细操作步骤如下:
在GeoServer左侧菜单中点击样式超链接,在右边的列表中点击新增样式按钮进行样式的添加。将从Qgis中导出的SLD文件导入到当前页面中。
样式文件上传后,点击validate按钮进行格式验证,提示没有错误点击保存。
将当前样式应用在指定的图层数据中,在样式页面的发布页面勾选需要设置的图层复选框。
最后使用GeoServer默认的地图浏览器进行预览,可以看到如下的效果:
能看到以上效果,说明样式导入成功。
总结
以上就是本文的主要内容,本文将内容贯穿于整个Webgis地图样式制作及可视化配置全过程,详细讲解了如何把Qgis制作的SLD文件发布到Geoserver中,让大家熟悉Webgis的简单制作流程。有兴趣的朋友可以自己尝试进行相应的地图服务发布,同时设置图层样式,在发布的过程中测试一下Qgis生成的SLD能否直接使用,如果不能使用,您找到解决办法了吗?后续会进行一些常见问题的解决说明。