Linux 安装PostGIS 3.1

本文详细介绍了在Linux系统上安装PostgreSQL,配置防火墙、pg_hba.conf文件以允许特定IP访问,以及安装和测试PostGIS扩展的过程,包括创建数据库、启用扩展和使用SQL操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装postgis前先安装PostgreSQL,可参照之前博客的具体安装过程

Linux 安装 PostgreSQL详细过程

PostgreSQL 安装情况查看

切换postgres系统账号,输入psql,进行数据库用户postgres的密码修改

执行psql,默认进入postgres用户的postgres数据库
使用\du查看用户

 使用\l 查看用户的数据库列表(以下库为PostgreSQL默认装上,不建议删除)

 使用\c 查看路径

使用\d查看数据表,没有数据表显示为(没有找到任何关系

配置PostgreSQL

之前博客已讲过一种配置方式,现在看下另一种配置方式

配置Linux防火墙端口

执行vi /usr/lib/firewalld/services/ssh.xml, 由于PostgreSQL服务默认是5432端口,所以添加5432端口。

 执行 systemctl restart firewalld 重启防火墙服务,使配置生效。

配置远程访问(之前有讲解过,不在赘述)

补充一下其他内容:

在修改pg_hba.conf文件
执行vi /var/lib/pgsql/13/data/pg_hba.conf,设置为允许192.168.11.0上的所有主机通过用户名验证的方式访问数据库

表示允许网段192.168.11.0
192.168.11.0/24中,数字24是子网掩码,表示允许192.168.1.0--192.168.1.255的计算机访问
192.168.0.0/16,数字16是一个网络,表示允许192.168.0.0--192.168.255.255的计算机访问
192.168.0.0/32,则表示仅允许192.168.0.0单一主机的计算机访问
0.0.0.0/0,表示允许任意IP访问数据库

重启postgresql服务
执行systemctl restart postgresql-13

安装PostGIS 

yum安装PostGIS扩展

PostGIS从2.0之后,要安装很多依赖组件,为了便于依赖组件的安装,先安装epel (Extra Packages for Enterprise Linux)
执行 yum install epel-release 

执行 yum list postgis*,查看可用的postgis的包,选择和postgresql-13对应的所有版本,建议安装:postgis32_13.x86_64  

  执行 yum install postgis32_13.x86_64 ,安装postgis组件

执行以上步骤后完成postgis安装  

安装成功后可以利用命令查看安装信息

        rpm -qi postgis32_13

测试PostGIS扩展

1、切换到postgres用户
   su postgres

2、建立数据库

        建立名为 postgis_test,所属用户为postgres的数据库

        bash-4.2$ createdb postgis_test -O postgres   

3、连接数据库

        bash-4.2$ psql -d postgis_test

         

4、开启PostGIS扩展

        postgis_test=# create extension postgis;

         

5、验证PostGIS扩展

        postgis_test=# select postgis_version();

使用pgAdmin登录后验证PostGIS扩展

postgis_test=# select ST_SetSRID(ST_Point(-108,30.741),4326),ST_GeomFromText('POINT(-106.51 29.741)',4326);

# 新建数据库,安装 PostGIS 插件,每个新建的数据库,如果想用 PostGIS 插件,必须执行以下步骤创建 PostGIS 扩展
[root@proxy ~]# su - postgres
-bash-4.2$ createdb postgis
-bash-4.2$ psql
postgres=# CREATE EXTENSION postgis;
postgres=# CREATE EXTENSION postgis_raster;
postgres=# CREATE EXTENSION postgis_topology;
postgres=# CREATE EXTENSION address_standardizer;
postgres=# CREATE EXTENSION postgis_sfcgal;
postgres=# CREATE EXTENSION fuzzystrmatch;
postgres=# CREATE EXTENSION postgis_tiger_geocoder;
postgres=# CREATE EXTENSION address_standardizer_data_us;

或者使用pgadmin进行添加扩展


    
  1. 部分SQL语句创建及查询
  2. --给PostGIS添加扩展及扩展解释
  3. CREATE EXTENSION postgis; --postgis的基本核心功能,仅支持地理图形(矢量要素),在其他Extension前启用
  4. CREATE EXTENSION postgis_raster; --对栅格数据的支持
  5. CREATE EXTENSION postgis_topology; --拓扑功能的支持
  6. CREATE EXTENSION postgis_sfcgal; --这个Extension主要是集成了CGAL( Computational Geometry Algorithms Library,计算几何算法库),来进行三维空间数据的空间运算,例如:ST_ 3DDifference、ST_ 3DUnion 等,可见是通常空间运算在三维空间上的拓展
  7. CREATE EXTENSION address_standardizer_ data_us;
  8. CREATE EXTENSION address_standardizer;
  9. CREATE EXTENSION fuzzystrmatch;
  10. CREATE EXTENSION postgis_tiger_geocoder; --TIGER指的是(拓扑集成地理编码和参考),这个是美国人口普查局的GIS数据,提供了美国全国的行政区划、交通道路、水系等空间数据。这个Extension提供了TIGER数据的地理编码支持,需要注意的是这个Extension启用前,需要先启用fuzzystrmatch(字符串模糊查询)Extension,以及可选的 address_standardizer(TIGER数据地址规则化) address_standardizer_ data_us(地址规则化示例数据集)Extension
  11. -- --二维空间数据创建
  12. -- -- 创建含有单点的几何表
  13. -- CREATE TABLE point (name varchar, geom geometry);
  14. -- INSERT INTO point VALUES ( 'Point', 'POINT(0 0)');
  15. -- -- 创建含有单线的几何表
  16. -- CREATE TABLE line (name varchar, geom geometry);
  17. -- INSERT INTO line VALUES ( 'road', 'LINESTRING(0 0, 1 1, 2 1, 2 2)');
  18. -- -- 创建含有单面的几何表
  19. -- CREATE TABLE polygon (name varchar, geom geometry);
  20. -- INSERT INTO polygon VALUES ( 'boundary', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))');
  21. -- --三维空间数据创建
  22. -- -- 创建含有三棱柱的表
  23. -- CREATE TABLE triangularPyramid (name varchar, geom geometry);
  24. -- INSERT INTO triangularPyramid (name, geom) VALUES ( 'beam', ST_Extrude(ST_GeomFromText( 'POLYGON((0 0,1 3,2 0, 0 0))'), 0,0,10));
  25. -- -- 创建含有立方体的表
  26. -- CREATE TABLE cubeBox (name varchar, geom geometry);
  27. -- INSERT INTO cubeBox (name, geom) VALUES ( 'box', ST_Extrude(ST_GeomFromText( 'POLYGON((0 0,2 0,2 2,0 2,0 0))'), 0,0,2));
  28. -- --查询预览
  29. -- -- 查询含有三棱柱的表
  30. -- SELECT name, ST_AsText(geom) AS ewkt FROM triangularPyramid;
  31. -- -- 查询含有立方体的表
  32. -- SELECT name, ST_AsText(geom) AS ewkt FROM cubeBox;
  33. -- -- 查看三棱柱的X 3D格式文本
  34. -- SELECT ST_AsX 3D(geom) AS x 3d FROM triangularPyramid;
  35. -- -- 查看立方体的X 3D格式文本
  36. -- SELECT ST_AsX 3D(geom) AS x 3d FROM cubeBox;

 \dx 查询显示以下数据

  简洁安装参考


    
  1. 从 PostgreSQL RPM repository 中预编译安装 PostGIS 软件,版本 3.2.0
  2. 同样这种方式也只适用于创建新环境或者现有数据库的扩展插件位置在 /usr /pgsql- 13 /share /extension,如果系统里没有通过 YUM 方式安装 PostgreSQL,yum install postgis 的同时会安装 PostgreSQL 13.5
  3. 从这里能查看到 PostgreSQL 提供的RPM存储库中有哪些最新的软件包: https: / /yum.postgresql.org / 13 /redhat /rhel- 7-x 86_ 64 /repoview /
  4. # 对于可以直接连接互联网的主机,直接下载 pgdg-redhat-repo-latest.noarch.rpm 再 yum install postgis 32_ 13 即可完成安装
  5. # 一般安装操作系统会默认安装 PostgreSQL 9.2,建议先将其卸载掉,再安装新版本
  6. [root@proxy ~]# yum remove postgresql *
  7. [root@proxy ~]# yum -y install https: / /download.postgresql.org /pub /repos /yum /reporpms /EL- 7-x 86_ 64 /pgdg-redhat-repo-latest.noarch.rpm
  8. [root@proxy ~]# yum -y install postgis 32_ 13
  9. # 对于内网环境又没有YUM源,同样可以用老方法,在外网主机上下载制作YUM源传到内网主机上进行安装
  10. # 对于没有外网的小伙伴,可以直接使用我打包好的进行测试,链接:https: / /pan.baidu.com /s / 1OEmZM 1eAiwFLNQbAYQtaxA 提取码:kqlf
  11. [root@proxy ~]# yum remove postgresql *
  12. [root@proxy ~]# yum -y install https: / /download.postgresql.org /pub /repos /yum /reporpms /EL- 7-x 86_ 64 /pgdg-redhat-repo-latest.noarch.rpm
  13. [root@proxy ~]# yum -y install postgis 32_ 13 --downloadonly --downloaddir = /root /postgis 32_ 13
  14. [root@proxy ~]# yum install http: / /createrepo.baseurl.org /download /createrepo- 0.4.4- 1.noarch.rpm -y
  15. [root@proxy ~]# cd /root /postgis 32_ 13
  16. # 创建YUM源
  17. [root@proxy postgis 32_ 13]# createrepo -v . /
  18. # 打包
  19. [root@proxy postgis 32_ 13]# cd ..
  20. [root@proxy ~]# tar -zcvf /root /postgis 32_ 13-rpm.tar.gz postgis 32_ 13
  21. # 将打好的包传输到内网主机配置YUM安装,这里我直接使用外网主机测试
  22. [root@proxy ~]# cd /enmo /soft
  23. [root@proxy soft]# tar -zxvf postgis 32_ 13-rpm.tar.gz
  24. # 配置yum源,加入以下内容
  25. [root@proxy soft]# vi /etc /yum.repos.d /enmo.repo
  26. [postgis- 32]
  27. name =postgis
  28. baseurl = file: / / /enmo /soft /postgis 32_ 13
  29. enabled =yes
  30. gpgcheck = 0
  31. # 执行yum安装
  32. [root@proxy ~]# yum clean all
  33. [root@proxy ~]# yum -y install postgis 32_ 13
  34. # 初始化数据库,对于已经存在 PostgreSQL 数据库的环境,可以选择忽略此步骤
  35. [root@proxy ~]# /usr /pgsql- 13 /bin /postgresql- 13-setup initdb
  36. Initializing database ... OK
  37. [root@proxy ~]# systemctl enable postgresql- 13
  38. Created symlink from /etc /systemd /system /multi-user.target.wants /postgresql- 13.service to /usr /lib /systemd /system /postgresql- 13.service.
  39. [root@proxy ~]# systemctl start postgresql- 13
  40. # 新建数据库,安装 PostGIS 插件,每个新建的数据库,如果想用 PostGIS 插件,必须执行以下步骤创建 PostGIS 扩展
  41. [root@proxy ~]# su - postgres
  42. Last login: Sat Nov 20 20: 40: 56 CST 2021 on pts / 0
  43. -bash- 4.2$ createdb postgis
  44. -bash- 4.2$ psql
  45. postgres =# CREATE EXTENSION postgis;
  46. postgres =# CREATE EXTENSION postgis_raster;
  47. postgres =# CREATE EXTENSION postgis_topology;
  48. postgres =# CREATE EXTENSION address_standardizer;
  49. postgres =# CREATE EXTENSION postgis_sfcgal;
  50. postgres =# CREATE EXTENSION fuzzystrmatch;
  51. postgres =# CREATE EXTENSION postgis_tiger_geocoder;
  52. postgres =# CREATE EXTENSION address_standardizer_ data_us;
  53. postgis =# \dx
  54. List of installed extensions
  55. Name | Version | Schema | Description
  56. ------------------------------ +------------ +------------ +---------------------------------------------------------------------------------------------------------------------
  57. address_standardizer | 3.2.0beta 1 | public | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.
  58. address_standardizer_ data_us | 3.2.0beta 1 | public | Address Standardizer US dataset example
  59. fuzzystrmatch | 1.1 | public | determine similarities and distance between strings
  60. plpgsql | 1.0 | pg_catalog | PL /pgSQL procedural language
  61. postgis | 3.2.0beta 1 | public | PostGIS geometry and geography spatial types and functions
  62. postgis_raster | 3.2.0beta 1 | public | PostGIS raster types and functions
  63. postgis_sfcgal | 3.2.0beta 1 | public | PostGIS SFCGAL functions
  64. postgis_tiger_geocoder | 3.2.0beta 1 | tiger | PostGIS tiger geocoder and reverse geocoder
  65. postgis_topology | 3.2.0beta 1 | topology | PostGIS topology spatial types and functions
  66. ( 9 rows)
  67. # postgis 32_ 13提供以下软件版本
  68. PostGIS 3.2.0
  69. PostgreSQL 13.5
  70. GEOS 3.10.0
  71. SFCGAL 1.3.1
  72. GDAL 3.3.3
  73. PROJ 7.2.1
  74. json-c 0.11

部分内容来自博客PostGIS插件,包括YUM和编译安装PostGIS

<think>好的,我现在需要帮助用户安装PostGIS 2.4。首先,我应该确认用户的操作系统环境,因为安装步骤会根据不同的Linux发行版有所不同。用户之前的问题是关于CentOS的,所以可能他们现在也在使用CentOS或者类似的RHEL系系统。不过,也有可能用户切换到了其他系统,比如Ubuntu,所以我需要先确认这一点。 接下来,PostGIS 2.4是一个比较旧的版本,可能不在默认的软件仓库中。尤其是在较新的操作系统版本上,官方可能已经不再维护旧版的PostGIS。因此,用户可能需要添加第三方仓库或者从源代码编译安装。我需要考虑这两种可能性,并为用户提供相应的步骤。 首先,我应该检查PostGIS 2.4支持的PostgreSQL版本。PostGISPostgreSQL版本之间有兼容性要求,如果用户安装PostgreSQL版本太新,可能无法兼容PostGIS 2.4。需要提醒用户确认他们的PostgreSQL版本是否匹配。 然后,对于CentOS/RHEL系统,可能需要使用EPEL仓库或者PostgreSQL官方仓库来获取旧版本的软件包。如果用户使用的是Ubuntu,可能需要添加UbuntuGIS仓库或者其他第三方PPA。但需要注意,旧版本的仓库可能存在安全隐患,或者已经不可用,这时候可能需要手动下载deb或rpm包进行安装。 另外,用户可能对编译安装不熟悉,所以需要给出详细的步骤,包括安装依赖项、下载源码、配置、编译和安装。同时,要提醒用户编译安装可能需要较长时间,并且需要解决可能的依赖问题。 还需要考虑用户是否已经安装PostgreSQL,如果没有,可能需要先安装合适版本的PostgreSQL。如果用户已经安装PostgreSQL,需要确认版本是否兼容,并指导如何启用PostGIS扩展。 此外,安装完成后,用户可能需要创建空间数据库,或者为现有数据库添加PostGIS扩展。这时候需要提供相应的SQL命令示例,比如CREATE EXTENSION postgis;。 最后,应该提醒用户PostGIS 2.4已经较旧,可能存在未修复的安全漏洞或功能限制,建议升级到更新的版本,如果可能的话。如果用户确实需要旧版本,也要说明潜在的风险。 总结一下,我的回答需要包括以下几个部分: 1. 确认操作系统和PostgreSQL版本。 2. 添加必要的软件仓库(如EPEL、PGDG等)。 3. 安装PostGIS及其依赖项。 4. 创建或启用PostGIS扩展。 5. 验证安装。 6. 注意事项和升级建议。 同时,需要注意用户可能遇到的常见问题,比如依赖冲突、仓库不可用、权限问题等,并提供相应的解决方案。确保步骤清晰,命令准确,避免用户执行时出错。</think>--- ### **PostGIS 2.4 安装指南(CentOS/Ubuntu 系统)** #### **1. 确认系统环境** ```bash # CentOS/RHEL 查看版本 cat /etc/centos-release # Ubuntu 查看版本 lsb_release -a # 确认 PostgreSQL 版本(必须与 PostGIS 2.4 兼容) # PostGIS 2.4 需要 PostgreSQL 9.4~10.x psql --version ``` --- #### **2. CentOS/RHEL 系统安装** ##### **2.1 添加 PostgreSQL 官方仓库** ```bash # 安装基础工具 sudo yum install -y epel-release # 添加 PostgreSQL 9.6 仓库(兼容 PostGIS 2.4) sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 清理缓存 sudo yum clean all ``` ##### **2.2 安装 PostGIS 2.4** ```bash # 安装 PostgreSQL 9.6 + PostGIS 2.4 sudo yum install -y postgresql96-server postgresql96-contrib sudo yum install -y postgis24_96 # 初始化数据库 sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb # 启动服务 sudo systemctl enable postgresql-9.6 sudo systemctl start postgresql-9.6 ``` --- #### **3. Ubuntu 系统安装** ##### **3.1 添加 PostgreSQL 官方仓库** ```bash # 添加 PostgreSQL 9.6 仓库 sudo sh -c &#39;echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list&#39; wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update ``` ##### **3.2 安装 PostGIS 2.4** ```bash # 安装 PostgreSQL 9.6 + PostGIS 2.4 sudo apt install -y postgresql-9.6 postgresql-9.6-postgis-2.4 # 启动服务 sudo systemctl enable postgresql sudo systemctl start postgresql ``` --- #### **4. 启用 PostGIS 扩展** ```bash # 切换到 postgres 用户 sudo -u postgres psql # 创建测试数据库 CREATE DATABASE gisdb; \c gisdb # 启用 PostGIS 扩展 CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; # 验证安装 SELECT PostGIS_Version(); ``` --- #### **5. 验证安装结果** ```bash # 检查已安装PostGIS 版本 psql -d gisdb -c "SELECT PostGIS_Version();" # 输出应类似: # postgis_version # ---------------------------------------- # 2.4.4 r16526 (PROJ 4.9.3, GDAL 2.2.3) ``` --- ### **常见问题处理** | **问题** | **解决方案** | |--------------------------|----------------------------------------------------------------------------| | **依赖冲突** | 使用 `--skip-broken` 参数跳过冲突包:`yum install --skip-broken postgis24_96` | | **无法找到软件包** | 确认仓库配置:CentOS 检查 `/etc/yum.repos.d/pgdg-*.repo`,Ubuntu 检查 `apt update` 日志 | | **扩展创建失败** | 确保数据库用户有 `CREATE EXTENSION` 权限:`ALTER ROLE username SUPERUSER;` | --- ### **重要提醒** 1. **版本过旧风险**:PostGIS 2.4 已于 **2020年停止维护**,存在安全漏洞风险,建议升级至 PostGIS 3.x 2. **兼容性要求**: - PostgreSQL 9.4~10.x - GDAL ≥ 2.2 - PROJ ≥ 4.9 3. **生产环境建议**:使用 **PostgreSQL 12 + PostGIS 3.1** 组合(通过 `yum install postgis31_12` 或 `apt install postgresql-12-postgis-3`) --- ### **备选安装方案(源码编译)** ```bash # 下载源码(需匹配 PostgreSQL 版本) wget https://download.osgeo.org/postgis/source/postgis-2.4.4.tar.gz tar xvf postgis-2.4.4.tar.gz cd postgis-2.4.4 # 安装编译依赖 sudo yum install -y gdal-devel proj-devel libxml2-devel # 编译安装 ./configure --with-pgconfig=/usr/pgsql-9.6/bin/pg_config make sudo make install ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值