当前位置: 首页 > article >正文

安装 pgsql 将gis数据入库

​​​​一、根据您提供的系统信息(CentOS 7,内核版本 3.10.0-957.el7.x86_64),以下是 PostgreSQL 的安装指南:

一、安装步骤

  1. 添加 PostgreSQL YUM

安装官方仓库 RPM 包

sudo yum install -y

https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

  1. 安装 PostgreSQL 服务端与客户端

sudo yum install -y postgresql12-server

        2.初始化数据库

使用 PostgreSQL 12 的初始化命令

sudo /usr/pgsql-12/bin/postgresql-12-setup initdb

        3.启动服务并设置开机自启

sudo systemctl enable postgresql-12 sudo systemctl start postgresql-12

二、配置远程访问

  1. 修改监听地址

编辑配置文件:sudo vim /var/lib/pgsql/12/data/postgresql.conf

修改以下参数:

注意!!去掉 #

listen_addresses = '*' # 允许所有IP连接 port = 5432 # 默认端口

1.配置客户端认证

编辑 pg_hba.conf

添加规则允许远程访问(IPv4):

TYPE DATABASE USER ADDRESS METHOD

"local" is for Unix domain socket connections only

local all all peer

IPv4 local connections:

#host all all 127.0.0.1/32 ident

IPv6 local connections:

#host all all ::1/128 ident

原内容(IPv4本地连接):

#host all all 127.0.0.1/32 ident

修改后:

host all all 127.0.0.1/32 md5

原内容(IPv6本地连接):

#host all all ::1/128 ident

修改后:

host all all ::1/128 md5

Allow replication connections from localhost, by a user with the

replication privilege.

local replication all peer

host replication all 127.0.0.1/32 ident

host replication all ::1/128 ident

host all all 0.0.0.0/0 md5 # 允许所有IPv4远程连接

host all all ::/0 md5 # 允许所有IPv6远程连接

2.重启服务生效配置

sudo systemctl restart postgresql-15

3.防火墙放行端口

sudo firewall-cmd --permanent --add-port=5432/tcp

sudo firewall-cmd --reload

三、数据库初始化与用户管理

  1. 设置 postgres 用户密码

切换到 postgres 用户:

sudo su - postgres psql

执行 SQL 命令:

ALTER USER postgres WITH PASSWORD 'your_password'; \q # 退出

     2.创建新数据库和用户(可选)

CREATE DATABASE testdb; CREATE USER testuser WITH PASSWORD 'test123'; GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

四、验证安装

  1. 本地连接测试

psql -U postgres -h 127.0.0.1 -d postgres

SELECT version()

sudo netstat -tulnp | grep 5432

如果没有netstat 请执行该命令安装组件

sudo yum install -y net-tools

远程连接测试 从其他机器执行:

psql -h 192.168.200.146 -U postgres -d postgres -W

以下是安装PostGIS扩展并导入GIS数据的完整流程及操作指南,基于最佳实践和官方文档整合:

、安装PostGIS扩展

1. 确认PostgreSQL版本兼容性
  • PostGIS版本必须与PostgreSQL主版本一致(例如PostgreSQL 12对应PostGIS 3.0_12)。通过命令检查PostgreSQL版本:

  • psql --version

2. 安装PostGIS扩展

添加PostgreSQL官方YUM源

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装PostGIS sudo yum install postgis30_12

  • Windows

    • 使用PostgreSQL安装时的Stack Builder工具,勾选对应版本的PostGIS组件

3. 启用PostGIS扩展
  • 连接到目标数据库,执行以下SQL启用扩展:

  • CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; -- 可选,用于拓扑功能 CREATE EXTENSION fuzzystrmatch; -- 可选,用于地理编码

  • 验证安装:

  • SELECT PostGIS_Full_Version(); -- 查看完整版本信息

三、准备GIS数据导入

1. 数据格式要求
  • 支持格式:Shapefile(.shp)、GeoJSON、KML等。确保文件路径无中文或空格,文件名仅含英文

2. 设置空间参考标识(SRID)
  • 常用SRID:

    • 4326:WGS84地理坐标系(经纬度)

    • 3857:Web Mercator投影坐标系(地图服务常用)

  • 通过SELECT ST_SRID(geom) FROM table; 检查现有数据的SRID。

、导入GIS数据

方法一:使用PostGIS Shapefile导入工具

  1. 启动工具

    1. Windows:开始菜单搜索 PostGIS Shapefile Import/Export Manager

    2. Linux:命令行运行 shp2pgsql-gui(需安装postgis-gui包)

  2. 操作步骤

    1. 连接数据库:输入主机、端口、数据库名、用户名、密码。

    2. 添加Shapefile:点击 Add File 选择.shp文件。

    3. 配置选项

      • SRID:设为数据的坐标系代码(如4326)。

      • 表名:自定义目标表名。

      • 编码:选择 GBKUTF-8(中文数据需选GBK)

    4. 执行导入:点击 Import,日志显示成功即完成。

方法二:命令行工具shp2pgsql

生成SQL文件并导入

shp2pgsql -s 4326 -W GBK /path/to/data.shp public.table_name | psql -h localhost -U postgres -d your_database

  • 参数说明

    • -s 4326:设置SRID。

    • -W GBK:指定文件编码(中文必选)。

    • -I:自动创建空间索引

方法三:GDAL ogr2ogr工具

ogr2ogr -f PostgreSQL PG:"host=localhost dbname=your_db user=postgres password=your_pwd" input.geojson -nln target_table -lco GEOMETRY_NAME=geom

  • 支持GeoJSON、KML等格式,需提前安装GDAL

五、验证数据导入

1.查看数据表结构

\d+ table_name -- 显示表结构,确认包含几何字段(如geom)

2.空间查询示例

-- 查询所有点的坐标 SELECT name, ST_AsText(geom) FROM table_name; -- 查找半径1公里内的点 SELECT * FROM table_name WHERE ST_DWithin(geom, ST_GeomFromText('POINT(经度 纬度)', 4326), 1000);

3.可视化检查

        使用 pgAdmin 的几何查看器,执行

SELECT geom FROM table_name LIMIT 1; 查看图形

、性能优化

1. 创建空间索引

CREATE INDEX idx_table_geom ON table_name USING GIST (geom);

2. 更新统计信息

VACUUM ANALYZE table_name; -- 优化查询计划

七、常见问题解决

  1. 导入失败:缺少扩展

    1. 错误:ERROR: type "geometry" does not exist

    2. 解决:确保执行了 CREATE EXTENSION postgis;

  2. 中文乱码

    1. 解决:导入时添加 -W GBK 参数,或修改数据库编码为 UTF8

  3. SRID不匹配

    1. 错误:ERROR: Operation on mixed SRID geometries

    2. 解决:统一数据SRID,或使用 ST_Transform 转换坐标系

八、高级操作

1. 批量导入多个Shapefile

Bash

for shp in *.shp; do shp2pgsql -s 4326 -I $shp public.${shp%.*} | psql -d your_db done

2. 导出数据为GeoJSON

SQL

COPY ( SELECT jsonb_build_object( 'type', 'FeatureCollection', 'features', jsonb_agg(feature) ) FROM ( SELECT jsonb_build_object( 'type', 'Feature', 'geometry', ST_AsGeoJSON(geom)::jsonb, 'properties', to_jsonb(row) - 'geom' ) AS feature FROM table_name ) AS features ) TO '/path/to/output.geojson';

通过以上步骤,将GIS数据导入PostgreSQL数据库,并可通过空间查询实现高效分析。如需进一步优化或处理复杂空间操作,可参考PostGIS官方文档或结合QGIS等GIS工具进行可视化操作

报错解决

root@localhost data]# psql --version psql (PostgreSQL) 12.22

[root@localhost data]# sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

已加载插件:fastestmirror pgdg-redhat-repo-latest.noarch.rpm | 10 kB 00:00:00

正在检查 /var/tmp/yum-root-MQ1XQJ/pgdg-redhat-repo-latest.noarch.rpm: pgdg-redhat-repo-42.0-38PGDG.noarch

/var/tmp/yum-root-MQ1XQJ/pgdg-redhat-repo-latest.noarch.rpm:不更新已安装的软件包。

在 CentOS/RHEL 7 上安装 PostGIS 3.0 for PostgreSQL 12 时,您遇到的依赖问题通常是由于缺少基础库或未启用必要的软件仓库导致的。以下是分步解决方案:

  1. 启用 EPEL 和 PowerTools 仓库

PostGIS 的依赖项(如 hdf5libfreexl 等)通常位于 EPELPowerTools 仓库中:

安装 EPEL 仓库

sudo yum install -y epel-release

# 启用 PowerTools 仓库

sudo yum-config-manager --enable powertools

  1. 安装基础依赖库

手动安装缺失的依赖项:

sudo yum install -y \ hdf5 \ libfreexl \ libdap \ libgta \ zstd \ netcdf \ cfitsio \ gpsbabel \ CharLS

  1. 安装 PostGIS 3.0 for PostgreSQL 12

确保已正确配置 PostgreSQL 12 的官方仓库(pgdg-redhat-repo),然后安装 PostGIS:

sudo yum install -y postgis30_12

  1. 验证安装

在 PostgreSQL 中启用 PostGIS 扩展:

sudo -u postgres psql -c "CREATE EXTENSION postgis;" sudo -u postgres psql -c "SELECT PostGIS_Version();"

如果输出显示版本信息(如 3.0.7),则表示安装成功。

常见问题处理

问题1:仍然提示依赖错误

如果步骤 2 中的依赖项无法通过 yum 安装,尝试从源码编译安装:

示例:手动编译 libfreexl wget https://www.gaia-gis.it/gaia-sins/freexl-sources/libfreexl-1.0.6.tar.gz tar xvf libfreexl-1.0.6.tar.gz cd libfreexl-1.0.6 ./configure && make && sudo make install

问题2:GPSBabel 未找到

如果 gpsbabel 无法通过仓库安装,可以直接从 GPSBabel 官网 下载 RPM 包手动安装。

最终安装命令(整合版)

1. 启用仓库 sudo yum install -y epel-release sudo yum-config-manager --enable powertools # 2. 安装基础依赖 sudo yum install -y hdf5 libfreexl libdap libgta zstd netcdf cfitsio gpsbabel CharLS # 3. 安装 PostGIS sudo yum install -y postgis30_12 # 4. 重启 PostgreSQL sudo systemctl restart postgresql-12

验证 PostGIS 功能

在 PostgreSQL 中执行以下命令:

CREATE EXTENSION postgis; SELECT ST_AsText(ST_Point(1, 2)); -- 应输出 POINT(1 2)

如果成功返回地理信息数据,说明 PostGIS 已正常工作。

根据你的操作记录,PostGIS 3.0 扩展已成功在 PostgreSQL 12 中安装并启用。以下是关键信息总结及后续建议:

安装结果验证

  1. 扩展创建成功

CREATE EXTENSION

表示 postgis 扩展已正确加载到数据库中

  1. 版本信息确认 执行

  2. SELECT PostGIS_Version()

  3. 显示版本为 3.0,且依赖项(GEOS、PROJ)已启用,表明核心功能正常

postgis_version: 3.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1


http://www.kler.cn/a/610903.html

相关文章:

  • Unity脚本编程:C#脚本中的常用组件详解
  • AI搜索的终极预测:从技术颠覆到生态重构
  • 【多学科稳定EI会议大合集】计算机应用、通信信号、电气能源工程、社科经管教育、光学光电、遥感测绘、生物医学等多学科征稿!
  • Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
  • AIDD-人工智能药物设计-深度学习驱动的酶动力学参数预测模型CataPro助力高效酶挖掘与改造
  • 使用Python爬虫按图搜索1688商品(拍立淘)
  • 架构思维:如何设计一个支持海量数据存储的高扩展性架构_数据分片、存储、复制与一致性的原理性问题
  • Unity3D 动态遮挡剔除(Occlusion Culling)
  • 3个版本的Unity项目的异同
  • DeepSeek助力文案,智能音箱如何改变你的生活?
  • 有额外限制的 bellman_ford 算法
  • 【django】1-1 django构建web程序的基础知识
  • 【含文档+PPT+源码】基于SpringBoot+Vue旅游管理网站
  • Unity粒子系统
  • Graphpad Prism for Mac医学绘图
  • 深度学习论文: Image Segmentation Using Text and Image Prompts
  • ArkUI之常见基本布局(下)
  • DeepSeek、Grok 与 ChatGPT 4.5:新一代大模型架构与推理能力深度解析
  • springboot中logback日志配置
  • 【单元测试】