【GIS】GeoServer:地图服务容器发布与调用
本文介绍了在 Linux(或 Windows 11 搭配 WSL)环境下,利用 Docker 进行 GeoServer 的开发与部署,从而实现本地调试与容器化管理,并使用 Cesium 加载 WMS 地图服务。
容器化部署
在开始之前,确保系统已正确安装 Docker。
1. 创建文件结构
在任意目录下新建一个文件夹,例如:
mkdir geoserver && cd geoserver
创建以下目录结构:
geoserver/
├─ docker-compose.yml
├─ data/ # GeoServer 配置与工作空间(自动生成)
└─ mydatasets/ # 存放 shapefile、tiff 等数据
2. 编写 docker-compose.yml
将以下内容保存为 docker-compose.yml:
services:
geoserver:
image: docker.osgeo.org/geoserver:2.28.x # 使用的镜像,指定 GeoServer 版本
container_name: geoserver # 容器名称,方便管理
ports:
- "8080:8080" # 映射端口,将宿主机 8080 映射到容器 8080
volumes:
- ./data:/opt/geoserver_data # 数据卷挂载,将宿主机 ./data 目录映射到容器配置目录
- ./mydatasets:/mnt/data # 数据卷挂载,将宿主机 ./mydatasets 目录映射到容器数据目录
environment:
- CORS_ENABLED=true # 容器环境变量,开启跨域访问
restart: unless-stopped # 容器重启策略,除非手动停止,否则出错会自动重启
3. 启动 GeoServer
在该目录下执行:
docker compose up -d
启动后,浏览器访问 http://localhost:8080/geoserver,首次运行时 GeoServer 会自动初始化 ./data 目录,默认用户名密码为:admin / geoserver。

地图服务发布
GeoServer 的层级关系可以简明概括如下:
- 工作空间(Workspace):顶层命名空间,用于区分不同项目或主题的数据。
- 数据存储(Data Store):指向具体的数据源,如 Shapefile、PostGIS 等,管理底层数据。
- 图层(Layer):可发布的最小数据单元,对应一个空间数据集,可通过 WMS/WFS 访问。
- 图层组(Layer Group):将多个图层组合发布,便于客户端一次性显示多个图层。
简言之:工作空间 → 数据存储 → 图层 → 图层组,层层组织,便于管理和发布空间数据。
1. 工作空间
点击左侧边栏的 “工作空间”,然后选择 “添加新的工作空间”。
在 GeoServer 中创建工作空间时需填写以下内容:
- Name(名称):工作空间的唯一标识,用于分组图层。建议使用简短的小写英文(如
china、demo)。 - Namespace URI(命名空间 URI):全局唯一标识,格式类似网址,不必能访问(如
http://localhost/geoserver/china)。
建议:
- Name 与 Namespace URI 保持一致性,例如 Name 为
china,对应 URI 为http://example.com/geoserver/china;- Namespace URI 统一加上
/geoserver/前缀以区分来源;- 按项目或专题划分工作空间,便于管理与服务发布。

2. 存储仓库
点击左侧边栏的 “存储仓库”,然后选择 “添加新的存储仓库”。
根据需要新建矢量数据源(如 Shapefile)或其他类型数据源。

填写以下关键项:
- 工作空间:选择已创建的工作空间;
- 数据源名称:为数据源命名;
- Shapefile 文件位置:指定文件路径。
确保 GeoServer 的 /mydatasets 文件夹中有目标数据并已通过 Docker 挂载。
路径填写示例:file:///mnt/data

3. 图层
点击左侧边栏的 “存储仓库”,然后选择 “添加新的资源”。
选择对应的 工作空间:存储仓库 来添加目标图层。

可直接从数据中计算边框(经纬度范围)

添加完成后,点击左侧边栏的 “图层预览”,选择刚添加的图层,并使用 OpenLayers 查看。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
4. 图层组
点击左侧边栏的 “图层组”,然后选择 “添加新图层组”。
为图层组命名,并添加已有图层(上方图层优先显示)。
可点击“生成边界”自动计算范围。

创建完成后,可在“图层预览”中查看结果:

WMS 服务调用
本示例展示了如何在 Cesium 中加载 GeoServer 内置的 WMS 图层(以 ne:countries 为例)。
Cesium 通过 WebMapServiceImageryProvider 连接 GeoServer 提供的 WMS 服务,实现地图影像的动态加载与展示。
- GeoServer 服务地址:
http://localhost:8080/geoserver/ne/wms - 图层名称:
ne:countries(Natural Earth 内置示例数据) - 坐标系:
EPSG:4326
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cesium 加载 GeoServer WMS 示例</title>
<script>
// 设置 Cesium 资源加载的基础路径
window.CESIUM_BASE_URL = 'https://cdn.bootcdn.net/ajax/libs/cesium/1.130.1';
</script>
<!-- 引入 Cesium JS 核心库 -->
<script src="https://cdn.bootcdn.net/ajax/libs/cesium/1.130.1/Cesium.min.js"></script>
<!-- 引入 Cesium 基础样式 -->
<link href="https://cdn.bootcdn.net/ajax/libs/cesium/1.130.1/Widgets/widgets.min.css" rel="stylesheet">
<style>
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
// 配置常量
const GEOSERVER_URL = 'http://localhost:8080/geoserver/ne/wms';
const WMS_LAYER = 'ne:countries';
const WMS_PARAMS = {
service: 'WMS',
version: '1.1.0',
request: 'GetMap',
transparent: true,
format: 'image/png',
srs: 'EPSG:4326'
};
Cesium.Ion.defaultAccessToken = null;
const viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider: false, // 不加载默认影像
terrainProvider: new Cesium.EllipsoidTerrainProvider(), // 使用默认椭球体地形
/* 关闭 Cesium 默认 UI 控件 */
animation: false, // 动画控件
timeline: false, // 时间轴
baseLayerPicker: false, // 图层选择器
homeButton: false, // 首页按钮
geocoder: false, // 地名搜索
sceneModePicker: false, // 2D/3D 切换
navigationHelpButton: false,// 帮助按钮
fullscreenButton: false, // 全屏按钮
vrButton: false, // VR 模式按钮
infoBox: false, // 信息框
selectionIndicator: false, // 选择指示器
// 隐藏 Cesium 默认 logo
creditContainer: document.createElement('div')
});
// 创建 WMS 影像提供器
const wmsProvider = new Cesium.WebMapServiceImageryProvider({
url: `${GEOSERVER_URL}?`,
layers: WMS_LAYER,
parameters: WMS_PARAMS
});
// 添加到影像层
viewer.imageryLayers.addImageryProvider(wmsProvider);
</script>
</body>
</html>

总结
本文通过 Docker 容器化部署 GeoServer,并结合 Cesium 前端加载 WMS 服务,完整展示了从地图数据发布到浏览器端可视化的基本流程。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)