GeoServer学习笔记
GeoServer学习笔记
学习时间:2025年3月30日
文档地址:https://docs.geoserver.org/2.21.x/en/user/
1 基本概念
1.1 介绍
GeoServer 是一个开源的 Web GIS 服务器,用于发布、管理和共享地理数据。它支持多种 GIS 格式,如 Shapefile、PostGIS、GeoTIFF、KML、GML、GeoJSON、WMS/WFS 等,并能够将这些数据以 Web 服务的形式提供给地图应用(如 Mapbox、OpenLayers、Leaflet、QGIS)。
GeoServer 是用 Java 语言开发的,基于 Spring 框架 构建,并使用 GeoTools 作为核心 GIS 处理库。它是一个标准的 Java Web 应用,通常运行在 Tomcat、Jetty 等 Servlet 容器中。
1.2 核心功能
功能 | 描述 |
---|---|
数据发布 | 支持矢量(Shapefile、PostGIS、GeoJSON)和栅格(GeoTIFF、NetCDF) |
Web 地图服务 | 提供 WMS(地图)、WFS(矢量数据)、WCS(栅格数据)、WMTS(瓦片地图) |
数据存储 | 兼容 PostGIS、Oracle Spatial、MySQL、SQL Server |
投影转换 | 支持 CRS 坐标转换(EPSG:4326、EPSG:3857 等) |
权限管理 | 用户认证,基于角色的访问控制(LDAP、OAuth) |
性能优化 | 结合 GeoWebCache 进行瓦片缓存 |
扩展插件 | 可扩展 WPS(Web 处理服务)、3D 建模、时间序列数据 |
GeoServer 是 OGC(开放地理空间联盟)标准的实现,广泛用于企业 GIS、政府机构、科研单位等。
1.3 支持的数据格式
支持矢量数据和栅格数据。
在 GIS(地理信息系统)中,数据主要分为 矢量数据(Vector Data) 和 栅格数据(Raster Data)。不同的数据格式适用于不同的应用场景,如 Web 地图、遥感影像分析、空间数据库等。
Shapefile(.shp)
PostGIS(PostgreSQL GIS 扩展)
GeoJSON
GML / KML
CSV / Excel
GeoTIFF(遥感影像)
NetCDF(气象数据)
JPEG2000
1.3.1 矢量数据
矢量数据用 点(Point)、线(Line)、面(Polygon) 来表示地理对象,例如道路、建筑物、河流、行政边界等。
① Shapefile
Shapefile是ESRI(环境系统研究所)开发的一种矢量数据格式,广泛用于 GIS 软件(如 ArcGIS、QGIS)。
- 文件结构:Shapefile 实际上由多个文件组成:
.shp
(几何数据).shx
(索引).dbf
(属性表,类似 Excel).prj
(坐标系信息,可选)
② PostGIS
略
③ GeoJSON
GeoJSON(Geographic JSON)是一种基于 JSON(JavaScript Object Notation) 的地理数据格式,主要用于存储和交换 矢量数据(点、线、面、多边形)。
它广泛应用于 Web GIS 开发,例如 Mapbox、Leaflet、OpenLayers、GeoServer 等都支持 GeoJSON 作为数据格式。
GeoJSON 主要包含以下几种几何类型(geometry
):
- Point(点)
- MultiPoint(多点)
- LineString(线)
- MultiLineString(多条线)
- Polygon(多边形)
- MultiPolygon(多个多边形)
- GeometryCollection(几何集合)
此外,GeoJSON 还支持 Feature
(地理要素)和 FeatureCollection
(要素集合)。
基本格式:type-geometry-properties
1 | { |
示例
Point
1 | { |
LineString
1 | { |
Polygon
1 | { |
FeatureCollection
1 | // 表示多个城市的点数据 |
1 | // 包含不同地理类型 |
④ GML
全称Geography Markup Language
,XML 格式的矢量数据,用于数据交换(如 WFS 服务)。比 GeoJSON 复杂,适合大规模 GIS 数据存储。
1 | <gml:Point> |
⑤ KML
全称Keyhole Markup Language
,是Google Earth / Google Maps 使用的 XML 格式,可用于存储点、线、面、图标、样式等。
1 | <Placemark> |
1.3.2 栅格数据
栅格数据(Raster Data
)使用 像素(Pixel) 存储地理信息,适用于遥感影像、高度数据等。
① GeoTIFF
TIFF 格式的地理数据,存储卫星影像、高程数据。
② NetCDF
专门用于存储时间序列数据(如气象、海洋数据)。
③ JPEG2000
压缩比的 栅格数据格式,适用于 网络地图。
1.3.3 总结
数据类型 | 适用场景 | 推荐使用 |
---|---|---|
Shapefile | 本地 GIS 分析 | ArcGIS、QGIS |
PostGIS | 大规模 GIS 数据 | Web GIS、数据库 |
GeoJSON | Web GIS | Mapbox、Leaflet |
KML | Google Earth | 3D 可视化 |
GeoTIFF | 遥感影像 | QGIS、GIS 计算 |
NetCDF | 气象、海洋 | Python、科学计算 |
1.4 提供的Web服务
GeoServer 支持 OGC 标准,主要提供以下Web服务:
服务 | 标准 | 功能 | URL 示例 |
---|---|---|---|
Web Map Service(WMS) | OGC WMS |
渲染地图图层(PNG/JPEG) | http://localhost:8080/geoserver/ows[wms]?service=WMS |
Web Feature Service(WFS) | OGC WFS |
获取矢量数据(GeoJSON / GML) | http://localhost:8080/geoserver/ows[wfs]?service=WFS |
Web Coverage Service(WCS) | OGC WCS |
获取栅格数据(GeoTIFF) | http://localhost:8080/geoserver/ows[wcs]?service=WCS |
Web Map Tile Service(WMTS) | OGC WMTS |
提供地图瓦片(TMS 格式) | http://localhost:8080/geoserver/gwc/service/wmts |
注:
/ows
:通用 OGC 服务入口(WMS/WFS/WCS),需要通过service=
参数来指定使用的是 WMS、WFS 还是 WCS。/gwc
:GeoServer 内嵌的 GeoWebCache(GWC)服务接口,用于提供 瓦片缓存服务,核心用于高性能地图渲染,用于WMTS
和TMS
1.4.1 WMS
WMS 提供地图渲染服务,将地理数据以 栅格图像(PNG、JPEG 等) 返回给客户端。适用于展示静态地图,不支持矢量数据查询或交互。
获取 WMS 服务的能力描述:
1 | http://localhost/geoserver/{workspace}/wms?service=WMS&request=GetCapabilities |
一个URL示例:
1 | http://localhost/geoserver/{workspace}/wms? |
在 Mapbox 中,可以使用 raster
栅格数据源加载 WMS 服务:
1 | map.addSource('wms-source', { |
1.4.2 WFS
WFS 提供 矢量数据服务(GeoJSON、GML),支持空间查询和交互。适用于动态交互,如点击获取要素信息、编辑地理数据。
获取 WFS 服务的能力描述:
1 | http://localhost/geoserver/{workspace}/wfs?service=WFS&request=GetCapabilities |
Mapbox 支持 geojson
作为数据源,可以通过 WFS 获取矢量数据并添加到 geojson
数据源中。
1 | map.value.addSource('parking-stand-location-source', { |
注:url中ows
可以替换成wfs
1.4.3 WCS
WCS 提供 栅格数据服务(DEM、高程数据、遥感影像),可以下载或处理数据。适用于分析高程、气象数据等。
Mapbox 不支持 WCS。
1.4.4 WMTS
WMTS 提供 瓦片地图(Tile Map) 服务,将地图切片为多个小块,提高加载速度。适用于高效地图渲染,尤其是大范围地图数据。
Mapbox 支持 raster
图层来加载栅格瓦片,以及支持vector
图层加载矢量瓦片。
1 | map.addSource('wmts-source', { |
1.4.5 总结
服务 | 数据类型 | 主要用途 | Mapbox 加载方式 |
---|---|---|---|
WMS | 栅格图像(PNG/JPEG) | 静态地图展示 | raster 图层 |
WMTS | 预渲染瓦片(Tail) | 高效地图渲染 | raster 图层 |
WFS | 矢量数据(GeoJSON/GML) | 交互式地图 | geojson 图层 |
WCS | 栅格数据(DEM/遥感) | 数据分析 | 不支持 |
1.5 部署
这里讲解Linux的部署,将二进制包解压后,运行:
1 | nohup /path/to/geoserver/bin/startup.sh > /dev/null 2>&1 & |
此外需要添加跨域配置:在/webapps/geoserver/WEB-INF/web.xml
添加以下内容:
1 | <filter> |
修改默认的端口:在根目录下的start.ini
1 | ## Connector port to listen on |
2 Data
注:这里以发布shapefile为例。
2.1 工作区 Workspaces
工作区是一种逻辑上的分组,用于组织不同的数据集,避免命名冲突。每个工作区都有一个唯一的 Namespace URI。
一个 Workspaces 可以包含多个 Stores(数据存储)。
示例:创建一个工作区
2.1.1 命名空间 Namespace URI
Namespace URI(命名空间 URI) 是用于唯一标识一个 工作区(Workspace) 的名称空间。它不是一个实际的网址,而是一个标识符,通常采用 URI(统一资源标识符)的格式,例如 http://www.opengeospatial.net/cite
。
作用:
- 避免名称冲突:在 GeoServer 中,不同的数据存储可能会有相同的图层名称。Namespace URI 确保这些图层不会因为重名而产生冲突。
- WMS/WFS 服务中的 XML 命名空间:当通过 WMS或 WFS请求数据时,返回的 XML会包含这个命名空间,以确保数据的唯一性。
- 组织数据:Namespace URI 使得 GeoServer 可以在不同工作区之间区分图层和服务。
2.1.2 默认工作区 Default Workspace
该选项表示是否将此工作区设置为 GeoServer 的 默认工作区。
- 如果启用,则在 WMS/WFS 请求中,未指定命名空间的图层会默认使用此工作区中的图层。例如:
1 | http://localhost/geoserver/wms?service=WMS&request=GetMap&layers=your_layer |
如果 your_layer
存在于默认工作区,则可以省略 workspace:layer
形式的引用。
- 如果不启用,则需要指定工作区
cite
1 | http://localhost/geoserver/cite/wms?service=WMS&request=GetMap&layers=cite:your_layer |
2.1.3 隔离工作区 Isolated Workspace
启用该选项后,该工作区将被隔离,无法访问其他工作区的数据。
适用于多租户(multi-tenant)环境,比如不同的用户或组织使用各自的工作区,不希望它们相互访问数据。
2.1.4 设置 Settings
这个复选框控制是否 启用 该工作区。
如果取消勾选,该工作区中的所有数据存储、图层和服务都会被禁用,无法通过 WMS/WFS/WMTS 访问。
2.1.5 服务控制 Services
这里列出了可以为该工作区启用的 OGC 标准服务。
详见:
2.2 数据存储 Stores
数据存储是 GeoServer 访问数据的方式,可以是文件(如 Shapefile)、数据库(如 PostGIS)、远程 WFS 服务等。
支持的数据源:
- 一个 Store 可以包含多个 Layers(一对多);
- 一个 Store 只能属于一个 Workspace(一对一)
创建数据存储示例
2.3 图层 Layers
图层是地理数据的具体表示,如矢量数据(点、线、面)或栅格数据(遥感影像、DEM)。
- 一个 Store 可以包含多个 Layers(一对多)。
- 一个 Layer 只能来源于一个 Store(一对一)。
- 一个 Layer 可以属于多个 Layer Groups(多对多)。
创建图层
创建图层的时候,从数据存储中选择一个进行创建:
下面只介绍两个非常重要的设置。
2.3.1 CRS
GeoServer 支持多个坐标参考系(Coordinate Reference Systems, CRS/Spatial Reference System, SRS
),需要在发布图层时告诉它数据用的是什么坐标系,并声明希望客户端看到的坐标系是什么。
① Native SRS 原生SRS
上传到 GeoServer 的原始数据本身使用的坐标系。这个坐标系通常来自数据文件,比如:
- Shapefile 的
.prj
文件 - GeoTIFF 的坐标信息
- PostGIS 表的 SRID
注意:GeoServer 不会自动转换坐标系,它默认原始数据就是用的 Native SRS。
② Declared SRS 声明SRS
表示希望在发布时告诉客户端,这个图层的坐标系是哪个。它可以和 Native SRS 不同。
GeoServer 在服务输出时,会使用 Declared SRS 告诉客户端:“这图层是这个坐标系的”,哪怕实际上不是,这就涉及下面的核心内容。
③ SRS handling 坐标系处理
这是核心配置项,它控制 GeoServer 在 Native SRS ≠ Declared SRS
时的行为。
选项 | 含义 | 推荐使用情况 |
---|---|---|
Force declared | 强制使用声明 SRS(Declared SRS),不做任何坐标转换 | 数据和声明一致时使用(最常用 ) |
Reproject to declared | 将原始数据从 Native SRS 转换为 Declared SRS | 数据坐标系和声明不一致时使用 |
Keep native | 不处理,保留原生坐标系,客户端自己搞定坐标投影逻辑 | 高级应用,慎用 |
2.3.2 Bounding Boxes
Bounding Boxes
(边界框) 配置,是 GeoServer 图层发布时用来描述图层地理范围的(图层包含的最小矩形区域)。它们对客户端地图裁剪、图层预览、坐标转换、性能优化等都很重要。
定义为:
1 | [Min X, Min Y, Max X, Max Y] |
- 在地理坐标系中:X = 经度(Longitude),Y = 纬度(Latitude)
- 在投影坐标系中:单位可能是米(比如 EPSG:3857)
① Native Bouding Box
这是指根据数据原始坐标系(Native SRS)计算出的边界框。
按钮1:
Compute from data
:让 GeoServer 扫描实际数据(矢量或栅格),自动计算出真实的空间范围。按钮2:
Compute from SRS bounds
:忽略实际数据,直接使用这个 SRS(比如 EPSG:4326)在 EPSG 注册表里的“标准范围”作为 BBOX。
比如 EPSG:4326 标准范围就是:
1 | [-180, -90, 180, 90] |
这个值可能会比数据大,导致范围不准确,不建议直接使用,除非真的不知道数据范围。
② Lat/Lon Bounding Box
这是以 EPSG:4326(WGS84,经纬度) 表达的图层范围,无论数据原始坐标系是什么。
- GeoServer 需要这个值用于 OGC 服务中的
GetCapabilities
文档。 - 所有客户端都能理解这个范围,适合用于地图定位等用途。
按钮:Compute from native bounds
:使用 Native Bounding Box 进行坐标转换(投影)成 EPSG:4326,然后作为 Lat/Lon 边界框。这是推荐的做法,因为这样客户端拿到的经纬度范围才是正确的。
③ 可能存在的问题
Bounding Box 设错会导致一些实际问题,比如:
错误类型 | 影响 | 可能原因 |
---|---|---|
范围过大 | 不能正确 zoom 到图层,初始视图太大 | 只用了默认 [-180, -90, 180, 90] |
范围过小 | 数据显示不全,部分要素丢失 | 手动填的范围太小 |
坐标系不匹配 | 数据偏移,加载后不在预期位置 | Native SRS 和 Declared SRS 处理错误 |
地图无法加载 | 服务器返回错误 | 没有计算 BBOX,导致 GetCapabilities 无效 |
2.4 图层组 Layer Groups
图层组是多个图层的集合,允许在地图服务(WMS/WFS)中一次性加载多个图层。
- 一个 Layer Group 可以包含多个 Layers(一对多)。
- 一个 Layer 可以属于多个 Layer Groups(多对多)。
2.5 样式 Styles
样式(SLD)用于控制图层的渲染方式,如颜色、符号、线型等。
SLD(Styled Layer Descriptor) 是一种基于 XML 的标准,用于定义地图图层的样式。它是 OGC制定的标准,主要用于 WMS 服务,控制地图上要素的渲染方式。
SLD 是基于 XML 的,一般包含以下部分:
1 |
|
又如,线条(line)的SLD样式:
1 |
|
2.6 发布示例
2.6.1 WMS发布示例
前提:一个工作区airport
,包含一个Layer Group
,名称为airport-region
,其中有Point
、Polygon
和Line
等要素的图层。各图层的原生SRS和声明SRS均为EPSG:4326
。边界框根据图层实际的显示范围进行计算。其中有一个“世界图层”(范围为-180,-90,180,90
),作为背景。
- 使用
WMS
服务发布这个图层组,然后基于Mapbox
客户端进行请求。
1 | map.value.addSource('airport-source', { |
其中参数:
参数名 | 说明 |
---|---|
http://localhost:8888/geoserver/airport/wms |
GeoServer 的 WMS 接口地址。请求的是 airport 工作区下的 WMS 服务。wms 可以替换为ows |
service=WMS |
告诉 GeoServer 这是一个 Web Map Service(WMS) 请求。 |
version=1.1.0 |
使用的 WMS 版本,这里是 1.1.0(也常见 1.3.0)。 |
request=GetMap |
请求类型是获取地图图像(也可以是 GetCapabilities、GetFeatureInfo 等)。 |
layers=airport:airport-region |
指定图层名,格式是 工作区:图层名称 。这里是 airport 工作区下的 airport-region 图层。 |
bbox={bbox-epsg-3857} |
指定地图要显示的区域范围(边界框)。这是个 Mapbox 会自动替换的占位符,使用的是 EPSG:3857 投影。实际请求时会变成类似:bbox=12600000,2600000,12700000,2700000 这样的格式。 |
width=256&height=256 |
输出图像的像素宽度和高度。常用于瓦片图层,表示一张图像大小是 256x256 像素。 |
srs=EPSG:3857 |
指定坐标参考系统,这里是 Web 地图常用的墨卡托投影(Web Mercator)。 |
format=image/png; mode=8bit |
输出图像的格式为 PNG,附带参数 mode=8bit ,代表用 8 位颜色图像(对性能和带宽更友好)。 |
注意:Mapbox 默认只会使用 EPSG:3857 投影坐标系来进行瓦片请求,EPSG:4326 协议的 bbox
(经纬度坐标)并不是自动支持的,因此 {bbox-epsg-4326}
不会自动替换。
WMS提供的形式还有:
2.6.2 WFS发布示例
前提:一个工作区airport
,包含一个Layer
,名称为ParkingStandLocation_point
,其中有一个属性RESOURCE_C
,表示一个编号,现在使用symbol
图层将这些编号按位置渲染出来。
代码示例:
1 | map.value.addSource('parking-stand-location-source', { |
其中参数为:
参数 | 含义 |
---|---|
http://localhost:8888/geoserver/airport/ows |
GeoServer 的通用 OWS(OGC Web Services)入口地址,适用于 WMS、WFS、WCS 等服务。可以替换为wfs |
service=WFS |
指定服务类型为 WFS。WFS 用于获取矢量数据(要素,如点、线、面等),而非地图图像。 |
version=1.0.0 |
使用的 WFS 协议版本,这里是 1.0.0。常见还有 1.1.0 和 2.0.0。 |
request=GetFeature |
请求的是“获取要素”操作,这是 WFS 最核心的功能。 |
typeName=airport:ParkingStandLocation_points |
要获取的图层,格式为 工作区:图层名称 。这里是 airport 工作区下的 ParkingStandLocation_points 图层。 |
outputFormat=application/json |
输出格式为 GeoJSON,这是一种常用的矢量数据格式,可以直接在前端(如 Mapbox)中使用。 |
此外输出格式还有:
3 Tile Caching
瓦片缓存(Tile Caching) 相关的一组菜单项属于 GeoWebCache(GWC) 的管理部分。这些内容主要是为了提高地图服务性能,通过提前渲染和缓存“瓦片”地图图像。
3.0 瓦片(Tile)、栅格(Raster)和矢量(Vector)
3.0.1 基本概念
Raster和 Vector 是一种数据格式,Tile 是一种切片机制。较小的栅格缓存之后,就变成了瓦片。
Raster(矢量略)
栅格是一种数据格式,表示地图或图像为一个像素网格(类似照片)。每个像素有一个值:颜色、温度、高程、NDVI 等。
- 常见格式:GeoTIFF、JPEG、PNG、GRID 等。
- 特点:
- 整体加载,可能是大尺寸图像。
- 分辨率固定,通常包含空间参考信息(投影、坐标系)。
Tile
瓦片是一种 地图发布机制:把地图数据切成很多小块(瓦片),通常是 256×256 像素。每个瓦片就是一个小图像,常是 PNG/JPEG(或者Geojson/pbf等)。按照 zoom/x/y
三维方式组织(瓦片编号)。栅格和矢量数据都可以使用瓦片进行发布。
- 特点:
- 按需加载,快速显示。
- 专门用于 WebGIS,配合前端库如 Mapbox、Leaflet 等。
- 支持缓存,可预生成(seeding)。
在2.6
节中使用WMS获取的256*256
的图片并不是瓦片,而是栅格,下面是详细的区别:
项目 | WMS 256×256 栅格 | WMTS / XYZ Tile 瓦片 |
---|---|---|
协议 | WMS |
WMTS / XYZ |
是否瓦片协议 | ❌ 否(没有标准化 tile grid) | ✅ 是 |
是否按 zoom/x/y 编号组织 | ❌ 否,需要手动指定 bbox (Mapbox可自动计算EPSG:3857的bbox) | ✅ 是 |
是否可直接用于 Mapbox/Leaflet 瓦片源 | ⚠️ 需要手动转换 bbox 协议 | ✅ 原生支持 |
是否支持自动缓存 | ❌ 通常不缓存 | ✅ 可预缓存 |
地图服务器负载 | 高(每次都动态渲染) | 低(瓦片可缓存) |
3.0.2 栅格瓦片和矢量瓦片区别
项目 | 栅格瓦片(Raster Tile) | 矢量瓦片(Vector Tile) |
---|---|---|
格式 | .png / .jpeg |
.pbf (Protobuf) |
数据类型 | 图片(已渲染) | 原始几何 + 属性 |
渲染位置 | 服务器端 渲染后返回图片 | 客户端 渲染,数据灵活 |
样式修改 | 固定样式,必须在服务器改样式重新渲染 | 样式可动态调整(在客户端通过 JS 控制颜色、线宽等) |
文件大小 | 通常较大 | 通常较小(压缩过) |
加载速度 | 快速加载但放大模糊 | 加载略慢但放大不失真 |
交互性 | 不支持数据交互(比如点击某区域获取属性) | 支持点击、悬停、筛选、tooltip 等 |
层级控制 | 每级瓦片固定样式 | 样式、可见性随 zoom 动态控制 |
浏览器支持 | 所有 | 现代浏览器 |
对设备要求 | 低(图片) | 高(渲染和内存消耗) |
地图精度 | 低(不可缩放过多) | 高(平滑、可无限缩放) |
3.1 Tile Layers
3.1.1 基本设置
编辑图层时,有一个Tile Caching
选项,启用后,可以开启瓦片缓存。
设置中,最重要的一项是Gridsets 配置区域:设置这个图层支持哪些瓦片投影(Gridset
),以及这些投影下使用的 缩放层级(zoom levels) 和切片区域(Grid subset bounds
)信息。
① Gridset 网格集
字段 | 含义 |
---|---|
EPSG:4326 |
表示使用 WGS84(经纬度) 作为瓦片投影 |
EPSG:900913 |
实际上是 EPSG:3857 的别名,也就是 Web Mercator(用在 Mapbox、Google Maps、Leaflet 等),这里的”900913” 看起来像 “Google” 的拼音数字(g00g1e) |
② Published zoom levels 发布的缩放层级
设置这个图层在该投影下支持的 最小和最大缩放级别(zoom)。例如:Min = 0,Max = 18,表示这个图层在 zoom 0 到 18 之间都可以提供瓦片。
这里的zoom和Mapbox的zoom是对应的,前提是使用的是同一套投影坐标系。
③ Cached zoom levels 已缓存的缩放层级
设置这个图层在该投影下哪些 zoom 层级的瓦片可以进行缓存(实际生成缓存需要通过 GeoServer 的“瓦片预生成工具”seed 进行缓存)。
④ Grid subset bounds 切片区域范围
定义在哪一块地理范围内生成瓦片,避免生成全球瓦片浪费空间。通常只选图层覆盖区域的 bounding box。
3.1.2 Seed/Truncate
要真正生成瓦片缓存,需要执行 Seed(预生成)操作,如下图:
点击进入后:
① 顶部说明
- 这个界面不会检查参数正确性 → 你必须自己确保输入是正确的,GeoServer 不会自动校验。
- 不建议生成大于 Zoom Level 20 的瓦片 → Zoom 级别越高,瓦片数量指数增长,占用磁盘空间大,影响性能。
- 截断 KML 也会同时截断 KMZ 存档 → 如果你删除 KML 瓦片缓存,相关的 KMZ 文件也会一起被删除。
- 检查日志查看错误信息 → 如果生成失败,查看 GeoServer 或 GeoWebCache 日志排查问题。
② 边界范围
系统提供了两个坐标参考系(CRS)的最大边界,该最大边界来自于该图层的边界。如果不填写下面的 Bounding Box,GeoServer 会使用这些默认值。
③ 任务配置
Number of tasks to use
:设置并行任务数,决定同时生成多少个瓦片任务。Type of operation
:操作类型Seed - generate missing tiles
:生成缺失的瓦片Truncate - remove tiles
:删除已有的瓦片Reseed - regenerate all tiles
:删除并重新生成瓦片
Grid Set
:网格集,这里的网格集来自图层配置里设置好的网格集Format
:输出格式Zoom start
和Zoom stop
:起始和结束缩放级别Modifiable Parameters
:可选参数Bounding box
:边界框,留空则使用图层默认的配置Tile failure retries
:失败重试次数Pause before retry
:重试前等待时间Total failures before aborting
:最大失败数
3.2 Caching Defaults
瓦片缓存默认设置页面(Caching Defaults)用来配置瓦片缓存的全局行为,包括支持的服务、瓦片格式、样式是否缓存、元瓦片大小等。
3.2.1 Provided Services
选项 | 说明 |
---|---|
Enable direct integration with GeoServer WMS | 启用 GeoServer WMS 与缓存集成,使 GeoWebCache 可拦截并缓存 WMS 请求,提高性能。 |
Explicitly require TILED Parameter | 要求 WMS 请求中必须明确带 TILED=true 参数,避免普通 WMS 请求被缓存。建议启用。 |
Enable WMS-C Service | 启用 OGC WMS-C(瓦片版WMS服务),向支持该标准的客户端提供瓦片。 |
Enable TMS Service | 启用 TMS(Tile Map Service),供如 OpenLayers、Leaflet 等客户端使用。URL格式:http://GEOSERVER/URL/gwc/service/tms/1.0.0 ,详见3.7.2节 |
Enable Data Security | 启用缓存层的数据访问控制,需结合 GeoServer 权限设置。默认关闭。 |
3.2.2 Default Tile Image Formats
可以为不同类型的图层分别设置默认的输出格式:
注意:“矢量图层”是指原始数据是矢量数据,而“输出格式”决定了是否还能交互 —— 想交互,选 GeoJSON 或 矢量瓦片(PBF),不要用图片格式。
3.3 Gridsets
暂略
3.4 Disk Quota
磁盘配额设置界面(Disk Quota),用于控制 瓦片缓存的磁盘空间使用上限。
项目 | 说明 |
---|---|
Enable disk quota | 是否启用磁盘配额控制,启用后会限制缓存所使用的总空间。 |
Disk quota check frequency | 每隔多少秒检查一次磁盘配额状态(单位:秒)。 |
Maximum tile cache size | 设置缓存所能占用的最大磁盘空间。 |
使用情况条 | 显示当前缓存使用情况。例如这里是“使用了 35.45 MB / 最大 500.0 MB”。 |
When enforcing disk quota limits, remove tiles that are: | 超出限制时删除哪些瓦片: Least frequently used(默认):删除最少被请求的瓦片(LRU 策略) ;Least recently used:删除最久没有被访问的瓦片 |
Disk quota store type | 存储配额数据的数据库类型,默认是:In process database (H2) 。这是嵌入式数据库,适合轻量级使用。如果是生产环境可切换为 PostgreSQL。 |
3.5 BlobStores
暂略
3.6 GeoWebCache
页面地址:http://ip:port/geoserver/gwc/home
下面对Runtime Statistics
部分进行讲解:
项目 | 说明 |
---|---|
Started | Sat, 05 Apr 2025 04:06:50 GMT (2 hours) ,GWC 启动时间,是统计的起始时间。表示 GeoWebCache 已运行了 2 小时。 |
Total number of requests | 366 (0/s) ,总共接收到 366 个瓦片请求(包括缓存命中和未命中的)。括号中是当前实时请求速率,0/s 表示当前时刻没有活动请求。 |
Total number of untiled WMS requests | 0 (0/s) ,没有非切片的 WMS 请求。说明客户端(如 Mapbox 或 WebGIS)使用的是瓦片服务而非传统 WMS 图层。 |
Total number of bytes | 4606433 字节(约 4.4 Mbps),所有瓦片请求加起来总共传输了约 4.4MB 的数据。 |
Cache hit ratio | 96.25% ,表示有 96.25% 的请求直接从缓存中命中返回瓦片,而不是重新生成。命中率越高,GeoServer 压力越小,响应速度越快。 |
实时窗口统计:这部分显示近几秒的瓦片请求速率:
时间窗口 | 请求数 | 平均速率 | 数据量 | 带宽 |
---|---|---|---|---|
3 秒 | 4 | 1.3/s | 12492 字节 | 33.3 kbps |
15 秒 | 5 | 0.3/s | 15608 字节 | 8.3 kbps |
60 秒 | 7 | 0.1/s | 21838 字节 | 2.9 kbps |
说明当前系统处于比较空闲的状态。
Storage Locations
:瓦片文件保存位置
Config file: gwc/geowebcache.xml
- 配置文件路径,记录缓存服务设置、图层绑定等信息。
Local Storage:D:/projects/geoserver-2.21.5-bin/data_dir/gwc
- 瓦片缓存实际保存在此目录(本地磁盘)。
- 每个图层一个文件夹,内含瓦片图像,通常按
{z}/{x}/{y}.png
结构组织。
例如:
3.7 发布示例
3.7.1 栅格瓦片发布
前提说明:一个工作区airport
,包含一个Layer Group
,名称为airport-region
,其中有Point
、Polygon
和Line
等要素的图层。各图层的原生SRS和声明SRS均为EPSG:4326
。边界框根据图层实际的显示范围进行计算。其中有一个“世界图层”(范围为-180,-90,180,90
),作为背景。
该图层组开启Tile Caching
,前端mapbox的zoom级别设置为14-20
,因此图层的tile caching
设置里的zoom级别同样设置,注意使用90013
:
预生成瓦片(可选):由于有一个世界背景,因此为了避免生成大量的背景瓦片,需要填写除世界背景外的图层所包含的边界。
也可以不用预生成瓦片,而是让客户端请求某个瓦片时,GeoServer 在 首次请求时动态生成并缓存该瓦片(此时等同于普通的WMS请求),这是 GeoWebCache 的默认行为(惰性缓存或按需瓦片缓存)。
mapbox代码:
1 | map.value.addSource('airport-source', { |
关键参数解释:
参数名 | 含义 |
---|---|
tilematrixset=EPSG:900913 |
使用的瓦片矩阵集 |
tilematrix=EPSG:900913:{z} |
请求的缩放级别(z)在该坐标系下的标识 |
TileCol={x} |
请求的瓦片列号(X) |
TileRow={y} |
请求的瓦片行号(Y) |
验证:在Network 面板中查看单个瓦片请求的响应头:
3.7.2 WMS结合栅格瓦片发布
WMS请求的“瓦片”(其实是缓存后的栅格)也可以进行缓存,首先开启3.2.1
节中的Enable direct integration with GeoServer WMS
选项,然后在请求URL后加上TILED=true
参数即可。
- WMS没有开启瓦片缓存前:
1 | http://localhost:8888/geoserver/airport/ows?service=WMS&version=1.1.0&request=GetMap&layers=airport:airport-region&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png; mode=8bit |
只是普通的WMS响应标头:
- WMS开启瓦片缓存后:
1 | http://localhost:8888/geoserver/airport/ows?service=WMS&version=1.1.0&request=GetMap&layers=airport:airport-region&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png; mode=8bit&TILED=true |
3.7.2 矢量瓦片发布
① WMTS和TMS
WMTS 和 TMS 都是地图服务中的“瓦片地图协议”,用于切片地图的传输,但它们在标准、格式和使用方式上有一些关键区别。
协议名 | 全称 | 说明 |
---|---|---|
TMS | Tile Map Service | 由 OSGeo 下的 TileCache 定义的早期瓦片服务标准,简单、URL 模板式 |
WMTS | Web Map Tile Service | 由 OGC(开放地理空间联盟)发布的正式标准,支持 RESTful 和 KVP(Key-Value Pairs) 请求 |
下面是核心的区别:
对比项 | TMS | WMTS |
---|---|---|
发布者 | OSGeo | OGC(国际标准) |
标准化程度 | 非正式标准(实际被广泛采用) | 国际标准,正式规范 |
URL 风格 | RESTful URL,通常是:/z/x/y.format |
支持 REST 和 KVP,例如:?SERVICE=WMTS&REQUEST=GetTile&LAYER=... |
Y轴方向 | Y 从 下往上(TMS 是反着的) | 默认从 上往下(Google-style XYZ) |
灵活性 | URL 简单,方便嵌入 JS | 支持多种输出格式、样式、坐标系,适合企业系统 |
兼容 Mapbox GL JS | ✅(需要加 scheme: 'tms' ) |
复杂一点,需要构造 URL 模板 |
GeoServer 支持 | 默认开启 | 默认支持,有 REST 和 KVP 两种模式 |
元数据支持 | 无标准的 GetCapabilities | 支持 OGC GetCapabilities 元数据接口 |
3.2.1小节中Enable TMS Service
的选项是默认开启的。
② Vector Tiles插件
地址:https://geoserver.org/release/stable/
将其geoserver-2.xx.x-vectortiles-plugin
解压后,放置于geoserver-2.xx.x-bin/webapps/geoserver/WEB-INF/lib
中,然后重启GeoServer即可。
③ 开启矢量瓦片输出格式
进入图层或图层组的配置页面,将下面的输出格式勾选:
这是 Mapbox Vector Tile(.pbf)格式,专门为地图客户端(比如 Mapbox GL JS、deck.gl、Cesium)设计的。
特点:
项目 | 描述 |
---|---|
格式 | 二进制 .pbf |
编码方式 | Protobuf |
数据单位 | 按瓦片分块(z/x/y)切片 |
空间参考 | 屏幕内部坐标(0~4096),不是经纬度 |
优化目标 | 地图客户端渲染 |
支持样式渲染 | 图层样式可配 |
是否可读/调试 | 不可直接查看,需要工具解析 |
④ 代码实现
WMTS
服务
1 | map.value.addSource('airport-source', { |
请求结果:
服务器缓存的.pbf
矢量瓦片:
TMS
服务
1 | map.value.addSource('airport-source', { |