PostgreSQL是一个开源数据库,而PostGIS在此基础上增添了空间对象扩展模块。

PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。

虚拟机环境:CentOS 7.8,PostgreSQL 12.4

本地环境:Windows 10,pgadmin 4,qgis

目录

1 安装条件准备

1.1 Postgis安装的必要条件

1.2 Postgis安装的可选条件

1.3 必要库和软件的下载路径

2 本次安装的软件和库

3 安装postgis所依赖的软件和库

3.1 Prj4

3.2 GEOS

3.3 LibXML2

3.4 json-c

3.5 gdal

3.6 SFCGAL(可选)

3.6.1 CMake

3.6.2 boost-devel

3.6.3 gmp-devel

3.6.4 mpfr-devel

3.6.5 CGAL

3.6.6 SFCGAL

4 安装postgis

4.1 动态库路径添加

4.2 编译安装postgis

5 客户端创建postgis扩展与验证

5.1 使用pgadmin创建postgis扩展

5.2 数据验证

参考


 


 


1 安装条件准备

Postgis离线安装需要准备编译环境,相关说明参考地址 http://postgis.net/docs/postgis_installation.html#install_short_version

在安装过程中必然会遇到各种依赖包问题,最直接的方法肯定是使用yum,然而实际部署涉及内网环境,并不能使用此方法。所以只能静下心解决每一个小问题,虽然现在费时间多些,但有益于后续现场环境部署。

1.1 Postgis安装的必要条件

    PostgreSQL:必须,安装postgis的基础

    GNU C 编译器(gcc):gcc是一个Linux中最标准的C语言编译器,需要安装gcc来编译PostGIS和其他软件或函数库的源码。

    GNU Make(gmake或make):这个也是用于编译源码。对于许多系统,GNU make是make的默认版本。通过调用来检查版本make -v

    Proj4:Proj4 重投影库用于在PostGIS中提供坐标重投影支持。

    GEOS:GEOS几何图形库,用于支持PostGIS中的几何信息处理、分析等功能,也可以直接认为GEOS是一个几何算法库。

    LibXML2:当前用于某些导入功能(ST_GeomFromGML和ST_GeomFromKML)。

    JSON-C: 当前用于通过功能ST_GeomFromGeoJson导入GeoJSON。

    GDAL:用于PostGIS对栅格数据的支持。

 

1.2 Postgis安装的可选条件

    GDAL:仅在不需要栅格时才可以将其忽略

    GTK :编译shp2pgsql-gui形状文件加载器

    SFCGAL:用于为PostGIS提供附加的2D和3D高级分析功能。并且还允许将SFCGAL而不是GEOS用于两个后端提供的某些2D函数(例如,例如ST_Intersection或ST_Area),SFCGAL需要CGAL和Boost两个库的支持。

    CUnit:回归测试所必需的

    DocBook:构建文档必须的

    其他

 

1.3 必要库和软件的下载路径

项目

下载链接

Postgis

https://download.osgeo.org/postgis/source/

Proj4

https://download.osgeo.org/proj/

GEOS

https://download.osgeo.org/geos/

LibXML2

ftp://xmlsoft.org/libxml2/

http://xmlsoft.org/sources/

JSON-C

https://github.com/json-c/json-c/releases

GDAL

https://download.osgeo.org/gdal/

SFCGAL(可选)

https://github.com/Oslandia/SFCGAL/releases/

protobuf-c(可选)

https://github.com/protobuf-c/protobuf-c/releases


2 本次安装的软件和库

带基础开发工具版本的CentOS都已经自动安装了gcc和make,PostgreSQL已经安装12.4版本。

PostGIS/PostgreSQL和其他依赖关系矩阵 https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

本次准备软件与依赖包:

  • gdal-3.1.2.tar.gz
  • geos-3.8.1.tar.bz2
  • json-c-json-c-0.13.1-20180305.tar.gz
  • libxml2-2.9.9.tar.gz

    python-rpm-macros-3-32.el7.noarch.rpm

    python2-rpm-macros-3-32.el7.noarch.rpm

    python-devel-2.7.5-88.el7.x86_64.rpm

  • proj-6.2.1.tar.gz

    sqlite-devel-3.7.17-8.el7_7.1.x86_64.rpm

    sqlite-3.7.17-8.el7_7.1.x86_64.rpm

  • SFCGAL-1.3.8.tar.gz(可选)

    cmake-3.18.3-Linux-x86_64.tar.gz

    boost-devel-1.53.0-28.el7.x86_64.rpm

         boost-jam-1.53.0-28.el7.x86_64.rpm

         boost-build-1.53.0-28.el7.noarch.rpm

         boost-atomic-1.53.0-28.el7.x86_64.rpm

         boost-chrono-1.53.0-28.el7.x86_64.rpm

         boost-context-1.53.0-28.el7.x86_64.rpm

         boost-filesystem-1.53.0-28.el7.x86_64.rpm

         boost-regex-1.53.0-28.el7.x86_64.rpm

         boost-graph-1.53.0-28.el7.x86_64.rpm

         boost-locale-1.53.0-28.el7.x86_64.rpm

         boost-math-1.53.0-28.el7.x86_64.rpm

         boost-program-options-1.53.0-28.el7.x86_64.rpm

         boost-python-1.53.0-28.el7.x86_64.rpm

         boost-serialization-1.53.0-28.el7.x86_64.rpm

         boost-signals-1.53.0-28.el7.x86_64.rpm

         boost-test-1.53.0-28.el7.x86_64.rpm

         boost-timer-1.53.0-28.el7.x86_64.rpm

         boost-wave-1.53.0-28.el7.x86_64.rpm

         boost-1.53.0-28.el7.x86_64.rpm

    gmp-devel-6.0.0-15.el7.x86_64.rpm

    mpfr-devel-3.1.1-4.el7.x86_64.rpm

    cgal-4.14.3.tar.gz

  • postgis-3.0.2.tar.gz

拷贝至服务器,使用root开始安装。

所有软件和依赖包可以在1.3提供的链接和 阿里镜像站 去下载,另外也将自己所用到的所有软件和依赖包分享至

链接:https://pan.baidu.com/s/1Av4_575Eald8o-HslXLqQA 
提取码:omub

3 安装postgis所依赖的软件和库

安装顺序尽量按照安装条件准备中的官网介绍来,可能会有存在依赖关系,如gdal安装时就要指定proj4的安装路径。

3.1 Prj4

解压proj-6.2.1.tar.gz

[root@skycloud postgis]# tar -zxvf proj-6.2.1.tar.gz   

进入到proj-6.2.1,运行configure,并设置安装的位置为/usr/local/proj-6.2.1

[root@skycloud postgis]# cd proj-6.2.1/  
[root@skycloud proj-6.2.1]# ./configure --prefix=/usr/local/proj-6.2.1  

提示缺少sqlite3且版本>3.7,手动下载sqlite-devel-3.7.17-8.el7_7.1.x86_64.rpmsqlite-3.7.17-8.el7_7.1.x86_64.rpm

[root@skycloud postgis]# rpm -ivh sqlite-devel-3.7.17-8.el7_7.1.x86_64.rpm  
[root@skycloud postgis]# rpm -ivh sqlite-3.7.17-8.el7_7.1.x86_64.rpm 

重新运行检测通过

[root@skycloud proj-6.2.1]# ./configure --prefix=/usr/local/proj-6.2.1  

编译与安装

[root@skycloud proj-6.2.1]# make clean;make  
[root@skycloud proj-6.2.1]# make check  --可选,编译结果测试
[root@skycloud proj-6.2.1]# make install

在/usr/local查看文件列表

[root@skycloud proj-6.2.1]# ll /usr/local/

 

3.2 GEOS

解压geos-3.8.1.tar.bz2

[root@skycloud postgis]# tar -jxvf geos-3.8.1.tar.bz2  

进入到geos-3.8.1,运行configure,并设置安装的位置为/usr/local/geos-3.8.1,此处无error

[root@skycloud postgis]# cd geos-3.8.1/  
[root@skycloud geos-3.8.1]# ./configure --prefix=/usr/local/geos-3.8.1 

编译与安装

[root@skycloud geos-3.8.1]# make clean;make  
[root@skycloud geos-3.8.1]# make install  

在/usr/local查看文件列表

[root@skycloud geos-3.8.1]# ll /usr/local

 

3.3 LibXML2

解压libxml2-2.9.9.tar.gz

[root@skycloud postgis]# tar -zxvf libxml2-2.9.9.tar.gz   

进入到libxml2-2.9.9,运行configure,并设置安装的位置为/usr/local/ libxml2-2.9.9

[root@skycloud postgis]# cd libxml2-2.9.9/  
[root@skycloud libxml2-2.9.9]# ./configure --prefix=/usr/local/libxml2-2.9.9  

编译

[root@skycloud libxml2-2.9.9]# make clean;make  

编译出现问题,需要安装python-devel,下载 python-rpm-macros-3-32.el7.noarch.rpmpython2-rpm-macros-3-32.el7.noarch.rpmpython-devel-2.7.5-88.el7.x86_64.rpm ,上传并安装。

[root@skycloud postgis]# rpm -ivh python-rpm-macros-3-32.el7.noarch.rpm   
[root@skycloud postgis]# rpm -ivh python2-rpm-macros-3-32.el7.noarch.rpm   
[root@skycloud postgis]# rpm -ivh python-devel-2.7.5-88.el7.x86_64.rpm

重新编译安装,在/usr/local查看文件列表

[root@skycloud libxml2-2.9.9]# make clean;make  
[root@skycloud libxml2-2.9.9]# make install  
[root@skycloud libxml2-2.9.9]# ll /usr/local 

 

3.4 json-c

解压json-c-json-c-0.13.1-20180305.tar.gz

[root@skycloud postgis]# tar -zxvf json-c-json-c-0.13.1-20180305.tar.gz 

进入到json-c-json-c-0.13.1-20180305,运行configure,并设置安装的位置为/usr/local/json-c-0.13

[root@skycloud postgis]# cd json-c-json-c-0.13.1-20180305/  
[root@skycloud json-c-json-c-0.13.1-20180305]# ./configure --prefix=/usr/local/json-c-0.13  

编译与安装

[root@skycloud json-c-json-c-0.13.1-20180305]# make clean;make  
[root@skycloud json-c-json-c-0.13.1-20180305]# make install  
[root@skycloud json-c-json-c-0.13.1-20180305]# make install  

在/usr/local查看文件列表

[root@skycloud json-c-json-c-0.13.1-20180305]# ll /usr/local

 

 

3.5 gdal

解压gdal-3.1.2.tar.gz

[root@skycloud postgis]# tar -zxvf gdal-3.1.2.tar.gz  

进入到gdal-3.1.2,运行configure,并设置安装的位置为/usr/local/gdal-3.1.2

[root@skycloud postgis]# cd gdal-3.1.2/    
# 需指定proj的安装路径,否则  
# ./configure会报错:error: PROJ 6 symbols not found  
[root@skycloud gdal-3.1.2]# ./configure --prefix=/usr/local/gdal-3.1.2 --with-proj=/usr/local/proj-6.2.1  

编译与安装 

[root@skycloud gdal-3.1.2]# make clean;make  
[root@skycloud gdal-3.1.2]# make install  

在/usr/local查看文件列表

[root@skycloud gdal-3.1.2]# ll /usr/local 

 

3.6 SFCGAL(可选)

安装之前,需要检查环境:

  • C ++编译器(已具备)
  • CMake
  • CGAL
  • Boost
  • MPFR
  • GMP

项目

下载链接

CMake

https://cmake.org/download/

CGAL

https://github.com/CGAL/cgal/releases

Boost

http://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/

MPFR

http://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/

GMP

http://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/

SFCGAL

https://github.com/Oslandia/SFCGAL/releases

注: CentOS7.8的gcc和g++是4.8.5版本的,是C++14模式的,而CGAL-5.0要求C++17模式才能编译通过,这里准备的是cgal-4.14.3版。或者下载CGAL-5.0及以上版本,升级gcc和g++到高版本。

3.6.1 CMake

拷贝至CentOS,解压并移动至/usr/local/cmake-3.18.3

[root@skycloud postgis]# tar -zxvf cmake-3.18.3-Linux-x86_64.tar.gz  
[root@skycloud postgis]# mv cmake-3.18.3-Linux-x86_64/ /usr/local/cmake-3.18.3   

配置环境变量

[root@skycloud postgis]# vim /etc/profile    
CMAKE_HOME=/usr/local/cmake-3.18.3  
PATH=$CMAKE_HOME/bin:$PATH  
export CMAKE_HOME PATH  

 

使其生效并检查

[root@skycloud postgis]# source /etc/profile
[root@skycloud postgis]# cmake -version 

3.6.2 boost-devel

需要很多依赖包,也要注意安装顺序

[root@skycloud postgis]# rpm -ivh boost-jam-1.53.0-28.el7.x86_64.rpm boost-build-1.53.0-28.el7.noarch.rpm boost-atomic-1.53.0-28.el7.x86_64.rpm boost-chrono-1.53.0-28.el7.x86_64.rpm boost-context-1.53.0-28.el7.x86_64.rpm boost-filesystem-1.53.0-28.el7.x86_64.rpm boost-regex-1.53.0-28.el7.x86_64.rpm boost-graph-1.53.0-28.el7.x86_64.rpm boost-locale-1.53.0-28.el7.x86_64.rpm boost-math-1.53.0-28.el7.x86_64.rpm boost-program-options-1.53.0-28.el7.x86_64.rpm boost-python-1.53.0-28.el7.x86_64.rpm boost-serialization-1.53.0-28.el7.x86_64.rpm boost-signals-1.53.0-28.el7.x86_64.rpm boost-test-1.53.0-28.el7.x86_64.rpm boost-timer-1.53.0-28.el7.x86_64.rpm boost-wave-1.53.0-28.el7.x86_64.rpm   
[root@skycloud postgis]# rpm -ivh boost-1.53.0-28.el7.x86_64.rpm   
[root@skycloud postgis]# rpm -ivh boost-devel-1.53.0-28.el7.x86_64.rpm

3.6.3 gmp-devel

[root@skycloud postgis]# rpm -ivh gmp-devel-6.0.0-15.el7.x86_64.rpm

3.6.4 mpfr-devel

[root@skycloud postgis]# rpm -ivh mpfr-devel-3.1.1-4.el7.x86_64.rpm

3.6.5 CGAL

解压cgal-4.14.3.tar.gz,并进入新建build目录

[root@skycloud postgis]# tar -Jxf cgal-4.14.3.tar.gz
[root@skycloud postgis]# cd cgal-4.14.3/
[root@skycloud cgal-4.14.3]# mkdir build
[root@skycloud cgal-4.14.3]# cd build

运行cmake指令,通过参数 DCMAKE_INSTALL_PREFIX 指定安装目录为 /usr/local/CGAL-cgal-4.14.3,运行无误。

[root@skycloud build]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/cgal-4.14.3 .. 

编译与安装

[root@skycloud build]# make&&make install
[root@skycloud build]# ll /usr/local

3.6.6 SFCGAL

配置CGAL的环境变量

[root@skycloud build]# vim /etc/profile  
CGAL_DIR=/usr/local/cgal-4.14.3  
export CGAL_DIR  
[root@skycloud build]# source /etc/profile

 

解压SFCGAL-1.3.8.tar.gz,并进入新建build目录, 运行cmake,并设置安装的位置为/usr/local/SFCGAL-1.3.8 ..

[root@skycloud postgis]# tar -zxvf SFCGAL-1.3.8.tar.gz  
[root@skycloud postgis]# cd SFCGAL-1.3.8/  
[root@skycloud SFCGAL-1.3.8]# mkdir build  
[root@skycloud SFCGAL-1.3.8]# cd build  
[root@skycloud build]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/SFCGAL-1.3.8 ..  

编译安装

[root@skycloud build]# make && make install   # 编译时间较长  
[root@skycloud build]# ll /usr/local  


4 安装postgis

4.1 动态库路径添加

添加动态库路径/etc/ld.so.conf,此文件记录了编译时使用的动态函数库的路径,即加载so库的路径。

默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不指定—prefix,会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。

对于此种情况有两种解决办法:

(1)在用源码安装时,用--prefix指定安装路径为/usr/lib。这样的话也就不用配置PKG_CONFIG_PATH

(2)直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib

现在就使用第二种方法来为刚才安装的动态库添加路径,编辑/etc/ld.so.conf配置文件,为其添加如下内容:

[root@skycloud skycity]# vim /etc/ld.so.conf  
/usr/local/pgsql/lib  
/usr/local/geos-3.8.1/lib  
/usr/local/proj-6.2.1/lib  
/usr/local/json-c-0.13/lib  
/usr/local/libxml2-2.9.9/lib  
/usr/local/gdal-3.1.2/lib

使用ldconfig命令将指定的动态函数库加载到内存中

[root@skycloud skycity]# ldconfig  

4.2 编译安装postgis

解压postgis-3.0.2.tar.gz

[root@skycloud postgis]# tar -zxvf postgis-3.0.2.tar.gz  

进入到postgis-3.0.2,运行configure,需要指定相关参数,说明如下:

--prefix=PREFIX

PostGIS的安装位置。

注:该参数当前已被破坏,因为该软件包将仅安装到PostgreSQL安装目录中

--with-pgconfig=FILE

PostgreSQL提供了一个名为pg_config的实用程序, 以使诸如PostGIS之类的扩展程序能够找到PostgreSQL安装目录

--with-gdalconfig=FILE

GDAL提供了一个gdal-config文件,使PostGIS能定位到GDAL安装的目录

--with-geosconfig=FILE

GEOS是必需的几何图形库,提供了一个名为geos-config的实用程序,以使软件安装能够找到GEOS安装目录

--with-xml2config=FILE

LibXML是执行GeomFromKML / GML流程所需的库。将PostGIS指向特定的 xml2-configconfi文件,以使软件安装可以找到LibXML安装目录

--with-projdir=DIR

指定Proj4安装目录

--with-libiconv=DIR

安装iconv的目录

--with-jsondir=DIR

JSON-C是PostGIS ST_GeomFromJSON支持所需的MIT许可的JSON库,指定PostGIS将针对其构建的特定JSON-C安装目录

--with-pcredir=DIR

PCRE是address_standardizer扩展所需的BSD许可的Perl兼容正则表达式库,指定PostGIS将针对其建立的特定PCRE安装目录

--with-gui

编译数据导入GUI(需要GTK + 2.0)。为shp2pgsql创建shp2pgsql-gui图形界面

--without-raster

无需栅格支持即可编译

--without-topology

禁用拓扑支持

--with-gettext=no

默认情况下,PostGIS会尝试检测gettext支持并对其进行编译,但是,如果遇到导致加载程序损坏的不兼容问题,则可以使用此命令完全禁用它

--with-sfcgal=PATH

默认情况下,没有此开关,PostGIS将不会安装sfcgal支持。 PATH是一个可选参数,它允许为sfcgal-config指定备用PATH。

--without-wagyu

可以禁用该库,将改用GEOS

指定参数,运行configure,

[root@skycloud postgis]# cd postgis-3.0.2/  
[root@skycloud postgis-3.0.2]# ./configure --prefix=/usr/local/postgis-3.0.2 --with-gdalconfig=/usr/local/gdal-3.1.2/bin/gdal-config --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-geosconfig=/usr/local/geos-3.8.1/bin/geos-config --with-projdir=/usr/local/proj-6.2.1 --with-xml2config=/usr/local/libxml2-2.9.9/bin/xml2-config --with-jsondir=/usr/local/json-c-0.13 --with-sfcgal=/usr/local/SFCGAL-1.3.8/bin/sfcgal-config

有警告,但没有错

编译与安装

[root@skycloud postgis-3.0.2]# make clean;make  
[root@skycloud postgis-3.0.2]# make install  

在/usr/local查看文件列表,并没有找到postgis相关的安装路径,只是存在 /usr/local/pgsql/share/contrib/postgis-3


5 客户端创建postgis扩展与验证

5.1 使用pgadmin创建postgis扩展

5.2 数据验证

可以使用客户端软件(如arcgis、qgis、udig等)连接postgres库,导入矢量数据进行验证。这里使用qgis进行。

导入成功


参考

http://postgis.net/docs/postgis_installation.html#install_short_version

https://zhuanlan.zhihu.com/p/82098919

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐