GeoServer 中使用 PostgreSQL 来存储和加载地图数据

你想在 GeoServer 中使用 PostgreSQL 来存储和加载地图数据,这是非常专业也非常推荐的 GIS 解决方案,尤其适合:

  • 大体量空间数据(如 OSM)
  • 多人协作编辑
  • 动态查询、发布 WebGIS 接口(WMS/WFS/WCS)

下面是完整流程 ✅

✅ 总体步骤

步骤内容
✅ 1安装 PostgreSQL + PostGIS
✅ 2-1下载开源地图数据(如 OpenStreetMap)
✅ 2-2准备数据格式(Shapefile、GeoTIFF、GeoPackage 或 PostGIS)
✅ 2-3导入数据(Shapefile、OSM、GeoJSON 等)到 PostGIS
✅ 3配置 GeoServer 连接 PostgreSQL 数据源
✅ 4发布图层,提供 WMS/WFS 服务
✅ 5前端调用或嵌入地图展示

🛠️ 1. 安装 PostgreSQL + PostGIS

ubuntu

sudo apt update
sudo apt install postgresql postgis -y

archlinux

pacman -S postgresql postgis -y

修改数据库存储路径

mkdir /srv/postgres
chown -R postgresql:postgresql /srv/postgres
chown -R postgres:postgres /srv/postgres

nano -w /usr/lib/systemd/system/postgresql.service

#Environment=PGROOT=/var/lib/postgres
Environment=PGROOT=/srv/postgres
systemctl start postgresql


创建数据库并启用 PostGIS:

sudo -u postgres createdb gis
sudo -u postgres psql -d gis -c "CREATE EXTENSION postgis;"

创建用户

sudo -u postgres createuser -P ovsea
sudo -u postgres psql
ALTER USER ovsea WITH SUPERUSER;  -- 或给 SELECT 权限

📦 2. 导入空间数据到 PostGIS

一、获取开源地图数据(OSM / Natural Earth / 海图)

下载 OpenStreetMap(.pbf)数据

你可以从 https://download.geofabrik.de/ 按区域下载 OSM 数据(.osm.pbf 格式)

例如:

wget https://download.geofabrik.de/asia/china-latest.osm.pbf
wget https://download.geofabrik.de/asia/singapore-latest.osm.pbf

使用 Natural Earth 提供的基础地图

它提供:

  • 国家边界、行政区划(Shapefile)
  • 地形、高程(GeoTIFF)
  • 城市、河流、道路等

示例下载:

wget https://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_0_countries.zip
unzip ne_10m_admin_0_countries.zip

二、将数据导入 GeoServer 可识别格式

GeoServer 支持多种格式:

数据格式推荐工具
Shapefile(.shp)直接上传
GeoTIFF(栅格图)可直接读取
PostGIS(最强大)推荐大数据量场景
GeoPackage (.gpkg)单文件数据库格式,轻量灵活

三、如果你下载的是 .osm.pbf → 转换成 PostGIS 或 .shp

使用 osm2pgsql 导入 PostgreSQL + PostGIS:

apt install osm2pgsql
pacman -S osm2pgsql
osm2pgsql -d gis --create --slim -C 1024 --hstore china-latest.osm.pbf

导入 Shapefile 示例(使用 shp2pgsql工具):

shp2pgsql -I -s 4326 your_shapefile.shp public.your_layer > your_layer.sql
psql -U postgres -d gis -f your_layer.sql

-I:自动建索引

-s 4326:设置坐标系(WGS84)

你也可以使用 QGIS 图形界面直接导入 shapefile/geojson/等数据进数据库(推荐)

🌍 3. 在 GeoServer 中连接 PostgreSQL 数据源

打开 GeoServer 管理后台(默认:http://localhost:8080/geoserver)

点击左侧【Stores】 → 【Add new Store】

选择 PostGIS(PostgreSQL)

填写连接信息:

参数示例
hostlocalhost 或你的服务器 IP
port5432
databasegis
schemapublic
usergeoserver_user
password你的密码
validate connection✅ 勾选
namespace通常为你的 workspace 地址,如 http://example.com/gis

点击 Save,GeoServer 会自动列出这个数据库下的所有空间表

🧩 4. 发布图层

进入【Layers】 → 【Add a new layer】

选择刚才创建的数据源

点击你想发布的图层(如 your_layer),配置样式(可以选默认)

点击【Publish】

检查:

CRS 是否为 EPSG:4326(WGS84)

Bounding Box 是否已填

点击【Save】

现在你的图层已经通过 WMS/WFS/WCS 等服务发布出来

🌐 5. 测试访问服务

你可以通过以下地址访问:

http://localhost:8080/geoserver/your_workspace/wms?service=WMS&version=1.1.0&request=GetMap&layers=your_layer&styles=&bbox=...&width=800&height=600&format=image/png&srs=EPSG:4326

也可以将图层添加到前端 Leaflet、OpenLayers 等项目中。

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在Postgres分类目录。将固定链接加入收藏夹。