03-数据管理与发布

第3章 数据管理与发布

3.1 工作区管理

3.1.1 工作区概念

工作区(Workspace)是GeoServer中组织数据的顶级容器,类似于命名空间的概念。每个工作区定义了一个唯一的命名空间URI,用于在XML和GML响应中标识数据来源。

工作区的主要作用包括:

  • 数据组织:将相关的数据源和图层归组在一起
  • 命名空间隔离:避免不同来源数据的名称冲突
  • 权限管理:可以针对工作区设置访问权限
  • 服务发布:支持单独发布某个工作区的服务

3.1.2 创建工作区

通过Web界面创建:

  1. 登录GeoServer管理界面
  2. 点击左侧菜单"数据" > "工作区"
  3. 点击"添加新的工作区"
  4. 填写以下信息:
  5. 可选:勾选"设为默认工作区"
  6. 点击"提交"保存

通过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数据存储:

  1. 进入"数据" > "数据存储"
  2. 点击"添加新的数据存储"
  3. 选择"Shapefile - ESRI(tm) Shapefiles (*.shp)"
  4. 填写配置信息:
    • 工作区:选择目标工作区
    • 数据存储名称:如"roads"
    • 描述:数据的简短说明
    • URL:Shapefile的文件路径,如file:data/roads.shp
    • 字符编码:数据的字符编码,如UTF-8或GBK
  5. 点击"保存"

常用配置参数:

参数 说明
URL Shapefile文件的路径
namespace 命名空间URI(通常自动填充)
create spatial index 是否创建空间索引
charset 字符编码
memory mapped buffer 使用内存映射缓冲区
cache and reuse memory maps 缓存内存映射

3.2.3 创建PostGIS数据存储

PostGIS是PostgreSQL数据库的空间扩展,是GeoServer最推荐的数据库后端。

  1. 进入"数据" > "数据存储"
  2. 点击"添加新的数据存储"
  3. 选择"PostGIS - PostGIS Database"
  4. 填写连接信息:
参数 示例值 说明
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 验证连接有效性
  1. 点击"保存"

高级连接池配置:

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是常用的栅格数据格式,带有嵌入的地理参考信息。

  1. 进入"数据" > "数据存储"
  2. 点击"添加新的数据存储"
  3. 选择"GeoTIFF - Tagged Image File Format with Geographic information"
  4. 填写配置:
    • 工作区:选择目标工作区
    • 数据存储名称:如"dem"
    • URL:GeoTIFF文件路径,如file:data/dem.tif
  5. 点击"保存"

3.2.5 创建Image Mosaic数据存储

当栅格数据由多个文件组成时,可以使用Image Mosaic将它们作为单个图层发布。

准备工作:

  1. 将所有栅格文件放在同一目录
  2. 确保所有文件具有相同的坐标系和像素深度
  3. GeoServer会自动生成索引文件

创建数据存储:

  1. 选择"ImageMosaic - Image mosaicking plugin"
  2. 指定包含栅格文件的目录
  3. 配置镶嵌参数:
    • AllowMultithreading:允许多线程处理
    • USE_JAI_IMAGEREAD:使用JAI图像读取
    • SUGGESTED_TILE_SIZE:建议的瓦片大小

3.3 矢量数据发布

3.3.1 发布图层的基本流程

创建数据存储后,需要发布其中的数据为图层(Layer):

  1. 进入"数据" > "图层"
  2. 点击"添加新的资源"
  3. 从下拉列表中选择数据存储
  4. 点击要发布的数据表/文件旁的"发布"链接

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视图:

  1. 在数据库数据存储下,点击"配置新的SQL视图"
  2. 输入视图名称
  3. 编写SQL查询:
SELECT 
  id, 
  name, 
  type,
  ST_Transform(geom, 4326) as geom
FROM roads
WHERE type = 'highway'
  1. 点击"从SQL猜测参数"
  2. 配置几何字段和SRID
  3. 点击"保存"

参数化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的空间数据支持配置:

  1. 安装SQL Server空间扩展(JSTL驱动)
  2. 将驱动JAR文件复制到GeoServer的lib目录
  3. 重启GeoServer
  4. 创建SQL Server数据存储

连接参数:

host: sqlserver.example.com
port: 1433
database: geodata
schema: dbo
user: geoserver
passwd: password

3.5.3 Oracle Spatial配置

Oracle Spatial数据库的配置:

  1. 下载Oracle JDBC驱动(ojdbc8.jar)
  2. 将驱动文件复制到GeoServer的lib目录
  3. 重启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 创建图层组

  1. 进入"数据" > "图层组"
  2. 点击"添加新的图层组"
  3. 配置基本信息:
    • 名称:图层组名称
    • 标题:显示标题
    • 摘要:描述信息
    • 工作区:所属工作区(可选)
  4. 添加图层:
    • 点击"添加图层"
    • 选择要包含的图层
    • 调整图层顺序(列表顶部的图层在最上层显示)
  5. 配置边界框:
    • 点击"生成边界"自动计算
  6. 点击"保存"

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内置了图层预览功能:

  1. 进入"数据" > "图层预览"
  2. 找到要预览的图层
  3. 选择预览格式:
    • 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:

  1. 打开QGIS
  2. 添加WMS/WMTS图层
  3. 创建新连接,填入GeoServer的WMS地址
  4. 浏览和添加图层

使用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的数据管理和发布流程:

  1. 工作区管理:理解工作区和命名空间的概念,学会创建和配置工作区
  2. 数据存储:掌握各种数据源的连接配置,包括文件、数据库等
  3. 矢量数据发布:学会发布Shapefile、PostGIS等矢量数据
  4. 栅格数据发布:掌握GeoTIFF、Image Mosaic等栅格数据的发布方法
  5. 图层组:理解图层组的作用和配置方式
  6. 数据测试:学会使用各种工具验证发布的数据

数据管理是GeoServer使用的核心技能。良好的数据组织和配置是高效地图服务的基础。

在下一章中,我们将深入学习OGC标准服务,包括WMS、WFS、WCS等服务的详细使用方法。

思考与练习

  1. 创建一个新的工作区,并配置其命名空间URI。
  2. 将本地的Shapefile数据发布为GeoServer图层。
  3. 配置PostGIS数据存储,连接PostgreSQL数据库。
  4. 创建一个SQL视图,实现数据的动态过滤。
  5. 创建包含多个图层的图层组,配置合适的显示顺序。
  6. 使用WMS和WFS请求测试发布的图层。
  7. 使用QGIS连接GeoServer,验证发布的服务。
posted @ 2025-11-29 13:41  我才是银古  阅读(4)  评论(0)    收藏  举报