






















工作区(Workspace)是GeoServer中组织数据的顶级容器,类似于命名空间的概念。每个工作区定义了一个唯一的命名空间URI,用于在XML和GML响应中标识数据来源。
工作区的主要作用包括:
通过Web界面创建:
通过REST API创建:
curl -u admin:geoserver -X POST \
-H "Content-Type: application/json" \
-d '{
"workspace": {
"name": "myworkspace"
}
}' \
http://localhost:8080/geoserver/rest/workspaces
工作区创建后,可以配置以下高级选项:
服务设置:
点击工作区名称进入编辑页面,可以配置:
隔离工作区(Isolated Workspace):
隔离工作区是GeoServer的高级功能,启用后:
每个工作区都关联一个命名空间(Namespace),命名空间是工作区的XML标识符。
命名空间的作用:
最佳实践:
数据存储(Data Store)是GeoServer连接到地理数据源的配置。它定义了如何访问和读取地理数据。GeoServer支持多种类型的数据存储:
矢量数据存储:
栅格数据存储:
Shapefile是最常用的矢量数据格式,下面演示如何添加Shapefile数据存储:
file:data/roads.shp常用配置参数:
| 参数 | 说明 |
|---|---|
| URL | Shapefile文件的路径 |
| namespace | 命名空间URI(通常自动填充) |
| create spatial index | 是否创建空间索引 |
| charset | 字符编码 |
| memory mapped buffer | 使用内存映射缓冲区 |
| cache and reuse memory maps | 缓存内存映射 |
PostGIS是PostgreSQL数据库的空间扩展,是GeoServer最推荐的数据库后端。
| 参数 | 示例值 | 说明 |
|---|---|---|
| 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 # 清理周期
GeoTIFF是常用的栅格数据格式,带有嵌入的地理参考信息。
file:data/dem.tif当栅格数据由多个文件组成时,可以使用Image Mosaic将它们作为单个图层发布。
准备工作:
创建数据存储:
创建数据存储后,需要发布其中的数据为图层(Layer):
发布图层时需要配置以下信息:
基本信息:
坐标参考系统(CRS):
边界框:
点击"从数据计算"和"从原生边界计算"可以自动计算边界框。
对于矢量图层,还需要配置属性信息:
属性列表:
GeoServer会自动读取数据的属性字段,可以配置:
要素类型限制:
GeoServer支持通过SQL查询创建虚拟图层,这是一个非常强大的功能:
创建SQL视图:
SELECT
id,
name,
type,
ST_Transform(geom, 4326) as geom
FROM roads
WHERE type = 'highway'
参数化SQL视图:
可以创建带参数的SQL视图,参数在请求时动态传入:
SELECT * FROM roads
WHERE type = '%type%'
AND year >= %start_year%
在请求中传入参数:
.../wfs?...&viewparams=type:highway;start_year:2020
栅格图层的配置与矢量图层类似,但有一些特殊选项:
波段设置:
覆盖范围设置:
显示设置:
对于大型栅格数据,建议预先生成金字塔(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
栅格数据的样式配置包括:
颜色映射:
<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>
PostGIS是GeoServer最推荐的数据库后端,以下是使用建议:
空间索引:
确保所有几何字段都有空间索引:
CREATE INDEX idx_roads_geom ON roads USING GIST (geom);
表统计信息:
定期更新表的统计信息:
ANALYZE roads;
几何字段注册:
确保几何字段正确注册到geometry_columns表:
SELECT Populate_Geometry_Columns();
SQL Server的空间数据支持配置:
连接参数:
host: sqlserver.example.com
port: 1433
database: geodata
schema: dbo
user: geoserver
passwd: password
Oracle Spatial数据库的配置:
连接参数:
host: oracle.example.com
port: 1521
database: ORCL
schema: GEO_DATA
user: geoserver
passwd: password
数据库连接池的配置对性能有重要影响:
| 参数 | 建议值 | 说明 |
|---|---|---|
| min connections | 1-5 | 根据访问频率设置 |
| max connections | 20-50 | 根据并发量和数据库容量设置 |
| fetch size | 1000-5000 | 批量获取可减少往返次数 |
| Connection timeout | 20-30 | 避免长时间等待 |
| validate connections | true | 确保获取到有效连接 |
| Prepared statements | true | 提升重复查询性能 |
图层组(Layer Group)将多个图层组合在一起,作为单个WMS图层发布。图层组的好处包括:
GeoServer支持多种图层组模式:
Single(单一):
Named Tree(命名树):
Container Tree(容器树):
Earth Observation Tree(对地观测树):
图层组可以包含其他图层组,形成层级结构:
BaseMap (图层组)
├── Background (图层组)
│ ├── dem
│ └── hillshade
├── roads
├── boundaries
└── Labels (图层组)
├── place_names
└── road_labels
这种结构便于管理复杂的地图配置。
GeoServer内置了图层预览功能:
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
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'
发布数据后,应进行以下检查:
坐标系验证:
属性验证:
性能测试:
使用QGIS连接GeoServer:
使用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的数据管理和发布流程:
数据管理是GeoServer使用的核心技能。良好的数据组织和配置是高效地图服务的基础。
在下一章中,我们将深入学习OGC标准服务,包括WMS、WFS、WCS等服务的详细使用方法。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。