你想在 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)
填写连接信息:
参数 | 示例 |
---|---|
host | localhost 或你的服务器 IP |
port | 5432 |
database | gis |
schema | public |
user | geoserver_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 等项目中。