03-数据管理与发布
第3章 数据管理与发布
3.1 工作区管理
3.1.1 工作区概念
工作区(Workspace)是GeoServer中组织数据的顶级容器,类似于命名空间的概念。每个工作区定义了一个唯一的命名空间URI,用于在XML和GML响应中标识数据来源。
工作区的主要作用包括:
- 数据组织:将相关的数据源和图层归组在一起
- 命名空间隔离:避免不同来源数据的名称冲突
- 权限管理:可以针对工作区设置访问权限
- 服务发布:支持单独发布某个工作区的服务
3.1.2 创建工作区
通过Web界面创建:
- 登录GeoServer管理界面
- 点击左侧菜单"数据" > "工作区"
- 点击"添加新的工作区"
- 填写以下信息:
- 名称:工作区的短名称,如"topp"
- 命名空间URI:唯一标识符,如"http://www.example.com/topp"
- 可选:勾选"设为默认工作区"
- 点击"提交"保存
通过REST API创建:
curl -u admin:geoserver -X POST \
-H "Content-Type: application/json" \
-d '{
"workspace": {
"name": "myworkspace"
}
}' \
http://localhost:8080/geoserver/rest/workspaces
3.1.3 工作区设置
工作区创建后,可以配置以下高级选项:
服务设置:
点击工作区名称进入编辑页面,可以配置:
- 启用服务:为该工作区单独启用/禁用OGC服务
- 默认服务配置:覆盖全局服务配置
隔离工作区(Isolated Workspace):
隔离工作区是GeoServer的高级功能,启用后:
- 工作区内的图层只能通过该工作区的虚拟服务访问
- 不会出现在全局服务的GetCapabilities响应中
- 适用于多租户场景
3.1.4 命名空间
每个工作区都关联一个命名空间(Namespace),命名空间是工作区的XML标识符。
命名空间的作用:
- 在WFS响应中标识要素类型的来源
- 在SLD样式中引用图层
- 在GML文档中作为命名空间前缀
最佳实践:
- 使用有意义的、稳定的URI作为命名空间
- 建议使用组织的域名作为命名空间的一部分
- 保持命名空间URI的长期稳定性
3.2 数据存储配置
3.2.1 数据存储概念
数据存储(Data Store)是GeoServer连接到地理数据源的配置。它定义了如何访问和读取地理数据。GeoServer支持多种类型的数据存储:
矢量数据存储:
- Shapefile
- Directory of Shapefiles
- PostGIS
- Oracle Spatial
- SQL Server
- MySQL
- GeoPackage
- GML
- CSV
- 等等
栅格数据存储:
- GeoTIFF
- World Image
- Image Mosaic
- ArcGrid
- GDAL Formats
- 等等
3.2.2 创建Shapefile数据存储
Shapefile是最常用的矢量数据格式,下面演示如何添加Shapefile数据存储:
- 进入"数据" > "数据存储"
- 点击"添加新的数据存储"
- 选择"Shapefile - ESRI(tm) Shapefiles (*.shp)"
- 填写配置信息:
- 工作区:选择目标工作区
- 数据存储名称:如"roads"
- 描述:数据的简短说明
- URL:Shapefile的文件路径,如
file:data/roads.shp - 字符编码:数据的字符编码,如UTF-8或GBK
- 点击"保存"
常用配置参数:
| 参数 | 说明 |
|---|---|
| URL | Shapefile文件的路径 |
| namespace | 命名空间URI(通常自动填充) |
| create spatial index | 是否创建空间索引 |
| charset | 字符编码 |
| memory mapped buffer | 使用内存映射缓冲区 |
| cache and reuse memory maps | 缓存内存映射 |
3.2.3 创建PostGIS数据存储
PostGIS是PostgreSQL数据库的空间扩展,是GeoServer最推荐的数据库后端。
- 进入"数据" > "数据存储"
- 点击"添加新的数据存储"
- 选择"PostGIS - PostGIS Database"
- 填写连接信息:
| 参数 | 示例值 | 说明 |
|---|---|---|
| host | localhost | 数据库主机 |
| port | 5432 | 数据库端口 |
| database | geodata | 数据库名称 |
| schema | public | 数据库模式 |
| user | geoserver | 数据库用户 |
| passwd | password | 数据库密码 |
| max connections | 10 | 最大连接数 |
| min connections | 1 | 最小连接数 |
| fetch size | 1000 | 每次获取的记录数 |
| Connection timeout | 20 | 连接超时(秒) |
| validate connections | true | 验证连接有效性 |
- 点击"保存"
高级连接池配置:
PostGIS数据存储使用连接池管理数据库连接,合理配置可以显著提升性能:
min connections: 1 # 最小空闲连接
max connections: 20 # 最大连接数
fetch size: 1000 # 批量获取大小
Connection timeout: 20 # 连接超时
Max connection idle time: 300 # 最大空闲时间
Evictor run periodicity: 300 # 清理周期
3.2.4 创建GeoTIFF数据存储
GeoTIFF是常用的栅格数据格式,带有嵌入的地理参考信息。
- 进入"数据" > "数据存储"
- 点击"添加新的数据存储"
- 选择"GeoTIFF - Tagged Image File Format with Geographic information"
- 填写配置:
- 工作区:选择目标工作区
- 数据存储名称:如"dem"
- URL:GeoTIFF文件路径,如
file:data/dem.tif
- 点击"保存"
3.2.5 创建Image Mosaic数据存储
当栅格数据由多个文件组成时,可以使用Image Mosaic将它们作为单个图层发布。
准备工作:
- 将所有栅格文件放在同一目录
- 确保所有文件具有相同的坐标系和像素深度
- GeoServer会自动生成索引文件
创建数据存储:
- 选择"ImageMosaic - Image mosaicking plugin"
- 指定包含栅格文件的目录
- 配置镶嵌参数:
- AllowMultithreading:允许多线程处理
- USE_JAI_IMAGEREAD:使用JAI图像读取
- SUGGESTED_TILE_SIZE:建议的瓦片大小
3.3 矢量数据发布
3.3.1 发布图层的基本流程
创建数据存储后,需要发布其中的数据为图层(Layer):
- 进入"数据" > "图层"
- 点击"添加新的资源"
- 从下拉列表中选择数据存储
- 点击要发布的数据表/文件旁的"发布"链接
3.3.2 图层配置
发布图层时需要配置以下信息:
基本信息:
- 名称:图层在GeoServer中的名称
- 标题:图层的显示标题(可以包含空格和中文)
- 摘要:图层的描述信息
- 关键字:便于搜索的关键字
坐标参考系统(CRS):
- 原生CRS:数据的原始坐标系
- 声明的CRS:对外发布的坐标系
- SRS处理:当两者不同时的处理方式
- Force declared:强制使用声明的坐标系
- Reproject native to declared:动态重投影
- Keep native:保持原生坐标系
边界框:
- 原生边界框:数据的实际范围
- 经纬度边界框:WGS84坐标系下的范围
点击"从数据计算"和"从原生边界计算"可以自动计算边界框。
3.3.3 属性配置
对于矢量图层,还需要配置属性信息:
属性列表:
GeoServer会自动读取数据的属性字段,可以配置:
- 是否为空:属性值是否允许为空
- 最小/最大出现次数:属性的基数约束
要素类型限制:
- 最大要素数:限制单次请求返回的最大要素数
- 每次请求最大要素数:限制WFS请求的要素数量
3.3.4 SQL视图
GeoServer支持通过SQL查询创建虚拟图层,这是一个非常强大的功能:
创建SQL视图:
- 在数据库数据存储下,点击"配置新的SQL视图"
- 输入视图名称
- 编写SQL查询:
SELECT
id,
name,
type,
ST_Transform(geom, 4326) as geom
FROM roads
WHERE type = 'highway'
- 点击"从SQL猜测参数"
- 配置几何字段和SRID
- 点击"保存"
参数化SQL视图:
可以创建带参数的SQL视图,参数在请求时动态传入:
SELECT * FROM roads
WHERE type = '%type%'
AND year >= %start_year%
在请求中传入参数:
.../wfs?...&viewparams=type:highway;start_year:2020
3.4 栅格数据发布
3.4.1 栅格图层配置
栅格图层的配置与矢量图层类似,但有一些特殊选项:
波段设置:
- 选择要发布的波段
- 配置波段的显示名称和描述
覆盖范围设置:
- 原生分辨率:数据的原始分辨率
- 请求的SRS列表:支持的坐标系
- 插值方法:重采样时使用的插值算法
显示设置:
- 默认样式:初始渲染样式
- 附加样式:可选的其他样式
3.4.2 栅格金字塔
对于大型栅格数据,建议预先生成金字塔(Overview)以提升性能:
使用GDAL生成金字塔:
# 为GeoTIFF添加内部金字塔
gdaladdo -r average input.tif 2 4 8 16 32
# 生成外部金字塔文件
gdaladdo -r average -ro input.tif 2 4 8 16 32
使用GeoServer的ImageMosaic:
ImageMosaic数据存储支持自动管理金字塔,通过配置文件控制:
# indexer.properties
Levels=2,4,8,16
LevelsNum=4
ResolutionLevels=0.001,0.002,0.004,0.008
3.4.3 栅格样式
栅格数据的样式配置包括:
颜色映射:
<RasterSymbolizer>
<ColorMap type="intervals">
<ColorMapEntry color="#00FF00" quantity="0" label="Low"/>
<ColorMapEntry color="#FFFF00" quantity="50" label="Medium"/>
<ColorMapEntry color="#FF0000" quantity="100" label="High"/>
</ColorMap>
</RasterSymbolizer>
对比度增强:
<RasterSymbolizer>
<ContrastEnhancement>
<Normalize/>
</ContrastEnhancement>
</RasterSymbolizer>
3.5 数据库连接与发布
3.5.1 PostGIS最佳实践
PostGIS是GeoServer最推荐的数据库后端,以下是使用建议:
空间索引:
确保所有几何字段都有空间索引:
CREATE INDEX idx_roads_geom ON roads USING GIST (geom);
表统计信息:
定期更新表的统计信息:
ANALYZE roads;
几何字段注册:
确保几何字段正确注册到geometry_columns表:
SELECT Populate_Geometry_Columns();
3.5.2 SQL Server配置
SQL Server的空间数据支持配置:
- 安装SQL Server空间扩展(JSTL驱动)
- 将驱动JAR文件复制到GeoServer的lib目录
- 重启GeoServer
- 创建SQL Server数据存储
连接参数:
host: sqlserver.example.com
port: 1433
database: geodata
schema: dbo
user: geoserver
passwd: password
3.5.3 Oracle Spatial配置
Oracle Spatial数据库的配置:
- 下载Oracle JDBC驱动(ojdbc8.jar)
- 将驱动文件复制到GeoServer的lib目录
- 重启GeoServer
连接参数:
host: oracle.example.com
port: 1521
database: ORCL
schema: GEO_DATA
user: geoserver
passwd: password
3.5.4 连接池优化
数据库连接池的配置对性能有重要影响:
| 参数 | 建议值 | 说明 |
|---|---|---|
| min connections | 1-5 | 根据访问频率设置 |
| max connections | 20-50 | 根据并发量和数据库容量设置 |
| fetch size | 1000-5000 | 批量获取可减少往返次数 |
| Connection timeout | 20-30 | 避免长时间等待 |
| validate connections | true | 确保获取到有效连接 |
| Prepared statements | true | 提升重复查询性能 |
3.6 图层组管理
3.6.1 图层组概念
图层组(Layer Group)将多个图层组合在一起,作为单个WMS图层发布。图层组的好处包括:
- 简化客户端的图层管理
- 提供预定义的图层组合
- 支持图层之间的叠加显示
- 可以设置组内图层的样式和顺序
3.6.2 创建图层组
- 进入"数据" > "图层组"
- 点击"添加新的图层组"
- 配置基本信息:
- 名称:图层组名称
- 标题:显示标题
- 摘要:描述信息
- 工作区:所属工作区(可选)
- 添加图层:
- 点击"添加图层"
- 选择要包含的图层
- 调整图层顺序(列表顶部的图层在最上层显示)
- 配置边界框:
- 点击"生成边界"自动计算
- 点击"保存"
3.6.3 图层组模式
GeoServer支持多种图层组模式:
Single(单一):
- 图层组作为一个整体发布
- GetCapabilities中只显示图层组名称
- 不能单独请求组内图层
Named Tree(命名树):
- 图层组和子图层都作为独立图层发布
- 在GetCapabilities中显示层级结构
- 可以请求图层组或单个图层
Container Tree(容器树):
- 在GetCapabilities中显示层级结构
- 但图层组本身不能被请求
- 只能请求组内的单个图层
Earth Observation Tree(对地观测树):
- 专门为对地观测数据设计的模式
- 支持WMS-EO规范
3.6.4 嵌套图层组
图层组可以包含其他图层组,形成层级结构:
BaseMap (图层组)
├── Background (图层组)
│ ├── dem
│ └── hillshade
├── roads
├── boundaries
└── Labels (图层组)
├── place_names
└── road_labels
这种结构便于管理复杂的地图配置。
3.7 数据预览与测试
3.7.1 图层预览
GeoServer内置了图层预览功能:
- 进入"数据" > "图层预览"
- 找到要预览的图层
- 选择预览格式:
- OpenLayers:交互式地图预览
- KML:Google Earth格式
- GML:地理标记语言
- GeoJSON:JSON格式的地理数据
- 其他格式...
3.7.2 WMS请求测试
GetCapabilities请求:
http://localhost:8080/geoserver/wms?
service=WMS&
version=1.1.1&
request=GetCapabilities
GetMap请求:
http://localhost:8080/geoserver/wms?
service=WMS&
version=1.1.1&
request=GetMap&
layers=workspace:layer&
styles=&
bbox=-180,-90,180,90&
width=800&
height=400&
srs=EPSG:4326&
format=image/png
3.7.3 WFS请求测试
GetCapabilities请求:
http://localhost:8080/geoserver/wfs?
service=WFS&
version=2.0.0&
request=GetCapabilities
GetFeature请求:
http://localhost:8080/geoserver/wfs?
service=WFS&
version=2.0.0&
request=GetFeature&
typeNames=workspace:layer&
count=10&
outputFormat=application/json
带过滤条件的请求:
http://localhost:8080/geoserver/wfs?
service=WFS&
version=2.0.0&
request=GetFeature&
typeNames=workspace:roads&
CQL_FILTER=type='highway'
3.7.4 数据质量检查
发布数据后,应进行以下检查:
坐标系验证:
- 确认数据在正确的位置显示
- 检查边界框是否正确
属性验证:
- 检查属性字段是否正确读取
- 验证字符编码是否正确(特别是中文)
性能测试:
- 测试大范围请求的响应时间
- 检查复杂查询的性能
3.7.5 使用外部工具测试
使用QGIS连接GeoServer:
- 打开QGIS
- 添加WMS/WMTS图层
- 创建新连接,填入GeoServer的WMS地址
- 浏览和添加图层
使用curl测试REST API:
# 列出所有工作区
curl -u admin:geoserver \
http://localhost:8080/geoserver/rest/workspaces.json
# 列出某个工作区的图层
curl -u admin:geoserver \
http://localhost:8080/geoserver/rest/workspaces/ws/layers.json
# 获取图层详情
curl -u admin:geoserver \
http://localhost:8080/geoserver/rest/layers/layer.json
本章小结
本章详细介绍了GeoServer的数据管理和发布流程:
- 工作区管理:理解工作区和命名空间的概念,学会创建和配置工作区
- 数据存储:掌握各种数据源的连接配置,包括文件、数据库等
- 矢量数据发布:学会发布Shapefile、PostGIS等矢量数据
- 栅格数据发布:掌握GeoTIFF、Image Mosaic等栅格数据的发布方法
- 图层组:理解图层组的作用和配置方式
- 数据测试:学会使用各种工具验证发布的数据
数据管理是GeoServer使用的核心技能。良好的数据组织和配置是高效地图服务的基础。
在下一章中,我们将深入学习OGC标准服务,包括WMS、WFS、WCS等服务的详细使用方法。
思考与练习
- 创建一个新的工作区,并配置其命名空间URI。
- 将本地的Shapefile数据发布为GeoServer图层。
- 配置PostGIS数据存储,连接PostgreSQL数据库。
- 创建一个SQL视图,实现数据的动态过滤。
- 创建包含多个图层的图层组,配置合适的显示顺序。
- 使用WMS和WFS请求测试发布的图层。
- 使用QGIS连接GeoServer,验证发布的服务。

浙公网安备 33010602011771号