前言
在实际项目中,我们经常会遇到这样的场景:手头已经有一套由 ArcGIS Server 生成的切片缓存(松散型),现在需要迁移到 GeoServer 平台上进行发布。很多人的第一反应是去配准、合并图片,其实完全没必要。
标准的 ArcGIS Server 切片缓存(松散型)目录中包含 conf.xml、conf.cdi 和 _alllayers 目录,这些都是 ArcGIS 切片的标志性文件。正确的方法是利用 GeoServer 内置的 GeoWebCache 来直接"复用"这套切片,无需任何图片处理。
本文记录了我在 GeoServer 2.22.5 上复用 ArcGIS 切片缓存的完整过程,包括踩过的坑和最终解决方案,供大家参考。

一、准备工作:整理文件位置
首先,把整个包含 _alllayers、conf.cdi、conf.xml 的文件夹,放到 GeoServer 能够访问到的路径下。
注意事项:
- 建议路径全英文,避免中文路径带来的权限问题和编码问题
- 确保 GeoServer 运行用户对该目录有读取权限
目录结构大致如下:
/your_path/
├── conf.cdi
├── conf.xml
└── _alllayers/
├── L00/
├── L01/
└── …
二、核心思路:移植 ArcGIS 功能到 GeoServer
GeoServer 内置的 GeoWebCache 默认并不包含 ArcGIS 切片的支持模块,需要手动"移植"。整体流程分为三步:
2.1 获取匹配版本的 JAR 包
由于 GeoServer 2.22.5 内置的 GeoWebCache 版本通常是 1.22.x,建议优先寻找对应版本的包,例如: 
gwc-arcgiscache-1.22.x.jar
如果找不到完全一致的版本,可以尝试使用 GeoWebCache 独立版(WAR 包)里的:
WEB-INF/lib/gwc-arcgiscache-*.jar
去 GeoWebCache 官网 下载一个独立 WAR 包,版本尽量与你的 GeoServer 内置 GWC 版本接近。
2.2 放入 GeoServer 的库目录
将找到的 gwc-arcgiscache-*.jar 文件,复制到你的 GeoServer 部署目录下的 WEB-INF/lib 文件夹中,例如:
tomcat/webapps/geoserver/WEB-INF/lib/
2.3 修改 GeoServer 内部的配置文件(关键步骤)
这是最容易卡住的地方。 因为 GeoServer 的 GWC 模块被打包在 gs-gwc-2.22.5.jar 里,你需要用压缩软件(如 7-Zip)打开这个 JAR 包,进行两处修改:
第一处:复制配置文件
从 GeoWebCache 独立版中,找到 geowebcache-arcgiscache-context.xml,把它复制到 gs-gwc-2.22.5.jar 的根目录(或者与 geowebcache-servlet.xml 同级的目录)。
第二处:添加引用
在 gs-gwc-2.22.5.jar 内的 geowebcache-servlet.xml 文件中,加入一行:
<import resource="geowebcache-arcgiscache-context.xml"/>
让主服务能加载到 ArcGIS 的配置。
2.4 Bean 注册(极易遗漏)
之前可能只加了 context.xml 的引用,但如果没有在 geowebcache-core-context.xml 里注册 ArcGISCacheGridsetConfiguration 这个 Bean,启动时就会找不到配置类,直接报错。
检查方法:打开你修改过的 gs-gwc-2.22.5.jar 里的 geowebcache-core-context.xml,确认里面是否有这一行:
<bean id="gwcArcGISGridsetConfiguration"
class="org.geowebcache.arcgis.layer.ArcGISCacheGridsetConfiguration"/>
如果没有,请手动加上。
⚠️ 提示:修改完 JAR 包后记得保存,并重启 GeoServer 使改动生效。
三、配置 geowebcache.xml
找到你 GeoServer 数据目录下的 gwc/geowebcache.xml 文件。在 <layers> 标签内,添加一个 <arcgisLayer> 配置。
根据你的目录结构,配置大概长这样(路径请替换为你实际存放的位置):
<arcgisLayer>
<name>你的图层名</name>
<tilingScheme>/你的路径/conf.xml</tilingScheme>
<tileCachePath>/你的路径/_alllayers</tileCachePath>
<hexZoom>false</hexZoom>
</arcgisLayer>
参数说明:
| name | 图层名称,自定义,后续在 GWC 页面中会显示这个名字 |
| tilingScheme | 指向 conf.xml 的完整路径 |
| tileCachePath | 指向 _alllayers 目录的完整路径 |
| hexZoom | 缩放级别是否使用十六进制命名(ArcGIS 默认是 hex,但新版有时用十进制,根据实际情况设置) |
四、验证:GWC 是否"看见"了图层
配置写好后,有两种方式可以验证:
方式一:直接查看 GWC 页面
访问:
http://你的地址:端口/geoserver/gwc/
在图层列表(A list of all the layers and automatic demos)中,看看有没有你配置的图层(例如 ZHYZT_2024_FT)。如果出现了,点击后面的 png 链接应该就能预览。
方式二:直接访问 WMS 服务
也可以通过标准 WMS 请求进行验证:
http://你的地址:端口/geoserver/gwc/service/wms?service=WMS&version=1.1.1&request=GetMap&layers=你的图层名&…
五、常见问题与排查
Q1:启动报错找不到 ArcGISCacheGridsetConfiguration
原因:忘记在 geowebcache-core-context.xml 中注册 Bean。
解决:按照 2.4 节的步骤,检查并补上 Bean 注册配置。
Q2:GWC 页面能看到图层,但预览是空白
排查方向:
- 检查 tilingScheme 和 tileCachePath 路径是否正确
- 检查 hexZoom 参数是否与实际切片目录命名一致(L00、L01 是十六进制;L0、L1 是十进制)
- 确认 conf.cdi 文件是否完整(它定义了切片的地理范围)
Q3:版本不匹配导致启动异常
原因:gwc-arcgiscache-*.jar 版本与 GeoServer 内置的 GWC 版本差异过大。
解决:尽量使用与 GeoServer 内置 GWC 版本一致的 JAR 包。可以在 GeoServer 的"关于"页面查看 GWC 版本号。
Q4:修改 JAR 包后 GeoServer 无法启动
原因:JAR 包被破坏,或者 XML 配置文件格式错误。
解决:用 7-Zip 打开 JAR 包,逐一检查修改过的 XML 文件是否格式正确;必要时从备份恢复。
六、总结
复用 ArcGIS Server 切片缓存到 GeoServer,核心步骤可以概括为:
整个过程最关键的坑点在于 Bean 注册(geowebcache-core-context.xml)和 hexZoom 参数设置,这两处是绝大多数人卡住的地方。只要这两步处理正确,其他都是常规配置。
相比配准、合并图片的方式,利用 GeoWebCache 复用切片不仅效率高,而且完全保留了原始切片的质量和层级,是推荐的最佳实践。
参考环境:GeoServer 2.22.5 + GeoWebCache 1.22.x + Tomcat 9
如有问题欢迎在评论区交流,看到会尽量回复。
标签:GeoServer GeoWebCache ArcGIS 切片缓存 GIS# GeoServer 复用 ArcGIS Server 切片缓存完整实践指南
前言
在实际项目中,我们经常会遇到这样的场景:手头已经有一套由 ArcGIS Server 生成的切片缓存(松散型),现在需要迁移到 GeoServer 平台上进行发布。很多人的第一反应是去配准、合并图片,其实完全没必要。
标准的 ArcGIS Server 切片缓存(松散型)目录中包含 conf.xml、conf.cdi 和 _alllayers 目录,这些都是 ArcGIS 切片的标志性文件。正确的方法是利用 GeoServer 内置的 GeoWebCache 来直接"复用"这套切片,无需任何图片处理。
本文记录了我在 GeoServer 2.22.5 上复用 ArcGIS 切片缓存的完整过程,包括踩过的坑和最终解决方案,供大家参考。
一、准备工作:整理文件位置
首先,把整个包含 _alllayers、conf.cdi、conf.xml 的文件夹,放到 GeoServer 能够访问到的路径下。
注意事项:
- 建议路径全英文,避免中文路径带来的权限问题和编码问题
- 确保 GeoServer 运行用户对该目录有读取权限
目录结构大致如下:
/your_path/
├── conf.cdi
├── conf.xml
└── _alllayers/
├── L00/
├── L01/
└── …
二、核心思路:移植 ArcGIS 功能到 GeoServer
GeoServer 内置的 GeoWebCache 默认并不包含 ArcGIS 切片的支持模块,需要手动"移植"。整体流程分为三步:
2.1 获取匹配版本的 JAR 包
由于 GeoServer 2.22.5 内置的 GeoWebCache 版本通常是 1.22.x,建议优先寻找对应版本的包,例如:
gwc-arcgiscache-1.22.x.jar
如果找不到完全一致的版本,可以尝试使用 GeoWebCache 独立版(WAR 包)里的:
WEB-INF/lib/gwc-arcgiscache-*.jar
去 GeoWebCache 官网 下载一个独立 WAR 包,版本尽量与你的 GeoServer 内置 GWC 版本接近。
2.2 放入 GeoServer 的库目录
将找到的 gwc-arcgiscache-*.jar 文件,复制到你的 GeoServer 部署目录下的 WEB-INF/lib 文件夹中,例如:
tomcat/webapps/geoserver/WEB-INF/lib/
2.3 修改 GeoServer 内部的配置文件(关键步骤)
这是最容易卡住的地方。 因为 GeoServer 的 GWC 模块被打包在 gs-gwc-2.22.5.jar 里,你需要用压缩软件(如 7-Zip)打开这个 JAR 包,进行两处修改:
第一处:复制配置文件
从 GeoWebCache 独立版中,找到 geowebcache-arcgiscache-context.xml,把它复制到 gs-gwc-2.22.5.jar 的根目录(或者与 geowebcache-servlet.xml 同级的目录)。
第二处:添加引用
在 gs-gwc-2.22.5.jar 内的 geowebcache-servlet.xml 文件中,加入一行:
<import resource="geowebcache-arcgiscache-context.xml"/>
让主服务能加载到 ArcGIS 的配置。
2.4 Bean 注册(极易遗漏)
之前可能只加了 context.xml 的引用,但如果没有在 geowebcache-core-context.xml 里注册 ArcGISCacheGridsetConfiguration 这个 Bean,启动时就会找不到配置类,直接报错。
检查方法:打开你修改过的 gs-gwc-2.22.5.jar 里的 geowebcache-core-context.xml,确认里面是否有这一行:
<bean id="gwcArcGISGridsetConfiguration"
class="org.geowebcache.arcgis.layer.ArcGISCacheGridsetConfiguration"/>
如果没有,请手动加上。
⚠️ 提示:修改完 JAR 包后记得保存,并重启 GeoServer 使改动生效。
三、配置 geowebcache.xml
找到你 GeoServer 数据目录下的 gwc/geowebcache.xml 文件。在 <layers> 标签内,添加一个 <arcgisLayer> 配置。
根据你的目录结构,配置大概长这样(路径请替换为你实际存放的位置):
<arcgisLayer>
<name>你的图层名</name>
<tilingScheme>/你的路径/conf.xml</tilingScheme>
<tileCachePath>/你的路径/_alllayers</tileCachePath>
<hexZoom>false</hexZoom>
</arcgisLayer>
参数说明:
| name | 图层名称,自定义,后续在 GWC 页面中会显示这个名字 |
| tilingScheme | 指向 conf.xml 的完整路径 |
| tileCachePath | 指向 _alllayers 目录的完整路径 |
| hexZoom | 缩放级别是否使用十六进制命名(ArcGIS 默认是 hex,但新版有时用十进制,根据实际情况设置) |
四、验证:GWC 是否"看见"了图层
配置写好后,有两种方式可以验证:
方式一:直接查看 GWC 页面
访问:
http://你的地址:端口/geoserver/gwc/
在图层列表(A list of all the layers and automatic demos)中,看看有没有你配置的图层(例如 ZHYZT_2024_FT)。如果出现了,点击后面的 png 链接应该就能预览。
方式二:直接访问 WMS 服务
也可以通过标准 WMS 请求进行验证:
http://你的地址:端口/geoserver/gwc/service/wms?service=WMS&version=1.1.1&request=GetMap&layers=你的图层名&…
五、常见问题与排查
Q1:启动报错找不到 ArcGISCacheGridsetConfiguration
原因:忘记在 geowebcache-core-context.xml 中注册 Bean。
解决:按照 2.4 节的步骤,检查并补上 Bean 注册配置。
Q2:GWC 页面能看到图层,但预览是空白
排查方向:
- 检查 tilingScheme 和 tileCachePath 路径是否正确
- 检查 hexZoom 参数是否与实际切片目录命名一致(L00、L01 是十六进制;L0、L1 是十进制)
- 确认 conf.cdi 文件是否完整(它定义了切片的地理范围)
Q3:版本不匹配导致启动异常
原因:gwc-arcgiscache-*.jar 版本与 GeoServer 内置的 GWC 版本差异过大。
解决:尽量使用与 GeoServer 内置 GWC 版本一致的 JAR 包。可以在 GeoServer 的"关于"页面查看 GWC 版本号。
Q4:修改 JAR 包后 GeoServer 无法启动
原因:JAR 包被破坏,或者 XML 配置文件格式错误。
解决:用 7-Zip 打开 JAR 包,逐一检查修改过的 XML 文件是否格式正确;必要时从备份恢复。
六、总结
复用 ArcGIS Server 切片缓存到 GeoServer,核心步骤可以概括为:
整个过程最关键的坑点在于 Bean 注册(geowebcache-core-context.xml)和 hexZoom 参数设置,这两处是绝大多数人卡住的地方。只要这两步处理正确,其他都是常规配置。
相比配准、合并图片的方式,利用 GeoWebCache 复用切片不仅效率高,而且完全保留了原始切片的质量和层级,是推荐的最佳实践。
参考环境:GeoServer 2.22.5 + GeoWebCache 1.22.x + Tomcat 9





