PostGIS+GeoServer+OpenLayer随笔!

本文介绍如何使用PostGIS+GeoServer+OpenLayers搭建WebGIS应用,包括安装步骤、数据导入方法、配置图层流程及常用地理坐标系。

最近因为项目原因,要深入了解基于PostGIS+GeoServer+OpenLayers的WebGis应用组合,顺手把一些经验心得写下来,以备参考!

 

1:安装:

   PostGIS的安装:必须先安装PostgreSQL,在通过菜单中的“Application Stack Builder”来在线安装PostGis,也可以离线下载安装,但没试过!

   PostGIS安装后,最好不要用默认的postgis库,而是以它为模板创建一个新的库,这样灵活一些。

   Geoserver的安装:下载war包,直接扔Tomcat的webapp目录下就可以用了,也可以解压配置部署。

2:数据导入:

   可以直接使用shp格式的文件(ArcGIS的格式),使用如下命令行:

上面命令中,-W表示采用指定的编码,对于包含中文的shp文件来说,如果不指定的话,可能会出现问题,“regionTable”表示导入到库中的表名,region.sql表示转换后的SQL。

      接下来,就可以用上面生成的sql文件来创建表了,命令如下:

上面命令中,“-U”表示指定用户为postgres mydb表示导入到mydb这个库中。

 

另外,PostGis也提供了一个小工具来可视化导入shp文件,但试用感觉bug还挺多,不是很稳定!

 

如果对shp的格式需要调整的话,可以采用uDig对shp文件先进行编辑,并利用它来导出数据对应的sld文件。

 

3、配置图层:

  PostGIS的数据导入后,就可以在GeoServer中按如下顺序配置它了,具体顺序如下:

       * 名字空间(Workspaces)
    * 存储(Stores)
    * 图层(Layers)
    * 图层组(Layer Groups,如果需要叠加显示的话)
    * 风格样式(Styles,可以将从uDig中导出的sld文件在这里导入,并配置到对应的图层中应用)

 

4、比较常用的地理坐标系为:EPSG:2908  、EPSG:4326

在 Docker 中部署 PostgreSQLPostGIS 并集成 GeoServer 是构建地理信息系统(GIS)应用的常见需求。以下是完整的部署方案,结合了多个配置选项最佳实践。 ### 部署 PostgreSQLPostGIS 首先,需要部署一个包含 PostGIS 扩展的 PostgreSQL 数据库。推荐使用已集成 PostGIS 的镜像,例如 `kartoza/postgis` 或 `beginor/postgis`,以避免手动安装扩展的步骤。 使用 `docker run` 命令部署 PostgreSQLPostGIS: ```bash docker run -d \ --name postgis \ -e POSTGRES_USER=docker \ -e POSTGRES_PASS=docker \ -e POSTGRES_DB=gis \ -e ALLOW_IP_RANGE=0.0.0.0/0 \ -p 5432:5432 \ -v /path/to/data:/var/lib/postgresql \ kartoza/postgis:14-3.1 ``` 该命令将启动一个包含 PostGIS 扩展的 PostgreSQL 容器,并设置数据库用户名、密码、数据库名以及允许连接的 IP 范围[^3]。 ### 部署 GeoServer GeoServer 可以通过 Docker 镜像轻松部署,并与 PostgreSQL/PostGIS 容器连接。使用以下命令启动 GeoServer 容器: ```bash docker run -d \ --name geoserver \ -p 8080:8080 \ -v /path/to/geoserver/data:/opt/geoserver/data_dir \ -e GEOSERVER_ADMIN_PASSWORD=yourpassword \ -e GEOSERVER_ADMIN_USER=admin \ --link postgis:postgis \ kartoza/geoserver:2.20.1 ``` 此命令将启动 GeoServer 容器,并将其链接到之前创建的 PostGIS 容器,以便配置数据源时能够访问空间数据库。 ### 使用 Docker Compose 部署整体环境 更推荐的方式是使用 `docker-compose` 同时管理 PostgreSQL/PostGIS GeoServer 的部署。以下是一个完整的 `docker-compose.yml` 配置示例: ```yaml version: '3.9' volumes: geoserver-data: geo-db-data: services: db: image: kartoza/postgis:14-3.1 volumes: - geo-db-data:/var/lib/postgresql ports: - "5432:5432" environment: - POSTGRES_DB=gis - POSTGRES_USER=docker - POSTGRES_PASS=docker - ALLOW_IP_RANGE=0.0.0.0/0 restart: on-failure healthcheck: test: "exit 0" geoserver: image: kartoza/geoserver:2.20.1 volumes: - geoserver-data:/opt/geoserver/data_dir ports: - "8080:8080" environment: - GEOSERVER_DATA_DIR=/opt/geoserver/data_dir - GEOSERVER_ADMIN_PASSWORD=yourpassword - GEOSERVER_ADMIN_USER=admin restart: on-failure depends_on: db: condition: service_healthy healthcheck: test: curl --fail -s http://localhost:8080/ || exit 1 interval: 1m30s timeout: 10s retries: 3 ``` 该 `docker-compose.yml` 文件定义了两个服务:`db`(PostgreSQL + PostGIS `geoserver`,并配置了健康检查依赖关系,确保 GeoServer 在数据库服务健康后才启动。 ### 配置 GeoServer 数据源连接 PostGIS 进入 GeoServer 管理界面(默认访问地址为 `http://localhost:8080/geoserver`),创建新的数据源: - 数据源类型选择 **PostGIS**。 - 数据库:`gis` - 用户名:`docker` - 密码:`docker` - 主机名:`db`(对应 `docker-compose` 中的服务名) - 端口:`5432` 保存后,即可在 GeoServer 中发布基于 PostGIS 的空间图层[^3]。 ### 数据持久化与备份 建议将 PostgreSQL 数据目录挂载为宿主机目录,以便实现数据持久化备份: ```yaml volumes: - /host/path/to/data:/var/lib/postgresql/data ``` 此外,可定期使用 `pg_dump` 命令对 PostGIS 数据库进行备份: ```bash docker exec -t postgis pg_dump -U docker -Fc gis > gis_backup.dump ``` ### 安全与访问控制 为了增强安全性,建议: - 使用强密码策略。 - 配置防火墙规则限制 5432 端口的访问。 - 在生产环境中使用 HTTPS 代理 GeoServer 的 Web 服务。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值