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 数据验证
参考
Postgis离线安装需要准备编译环境,相关说明参考地址 http://postgis.net/docs/postgis_installation.html#install_short_version
在安装过程中必然会遇到各种依赖包问题,最直接的方法肯定是使用yum,然而实际部署涉及内网环境,并不能使用此方法。所以只能静下心解决每一个小问题,虽然现在费时间多些,但有益于后续现场环境部署。
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对栅格数据的支持。
GDAL:仅在不需要栅格时才可以将其忽略
GTK :编译shp2pgsql-gui形状文件加载器
SFCGAL:用于为PostGIS提供附加的2D和3D高级分析功能。并且还允许将SFCGAL而不是GEOS用于两个后端提供的某些2D函数(例如,例如ST_Intersection或ST_Area),SFCGAL需要CGAL和Boost两个库的支持。
CUnit:回归测试所必需的
DocBook:构建文档必须的
其他
项目 |
下载链接 |
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 |
带基础开发工具版本的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
安装顺序尽量按照安装条件准备中的官网介绍来,可能会有存在依赖关系,如gdal安装时就要指定proj4的安装路径。
解压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.rpm、sqlite-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/
解压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
解压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.rpm、python2-rpm-macros-3-32.el7.noarch.rpm、python-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
解压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
解压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
安装之前,需要检查环境:
项目 |
下载链接 |
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++到高版本。
拷贝至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
需要很多依赖包,也要注意安装顺序
[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
[root@skycloud postgis]# rpm -ivh gmp-devel-6.0.0-15.el7.x86_64.rpm
[root@skycloud postgis]# rpm -ivh mpfr-devel-3.1.1-4.el7.x86_64.rpm
解压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
配置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
添加动态库路径/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
解压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
可以使用客户端软件(如arcgis、qgis、udig等)连接postgres库,导入矢量数据进行验证。这里使用qgis进行。
导入成功
http://postgis.net/docs/postgis_installation.html#install_short_version
https://zhuanlan.zhihu.com/p/82098919