Linux(centos)中使用源码安装PostGIS
本文将介绍在CentOS中使用源码安装PostGIS,由于PostGIS有较多的模块组件,本文将介绍PostGIS主要部分的安装
本文将介绍在centos中使用源码安装PostGIS,由于PostGIS有较多的模块组件,本文将介绍PostGIS主要部分的安装,另外将持续更新,以介绍PostGIS其他模块组件的安装。
另外,由于PostGIS是PostgreSQL数据库的一个插件,即PostGIS构建于PostgreSQL之上。所以安装PostGIS之前必须安装PostgreSQL,建议参考我的这篇文章:Linux(centos)中安装PostgreSQL 。
数据库版本:PostgreSQL 10.7
操作系统版本:CentOS 7.6
一、安装条件
PostGIS需要依赖以下软件或函数库:
1.1、必须安装的软件或函数库
PostgreSQL: PostGIS构建于PostgreSQL之上,所以PostgreSQL必须要安装。
GNU C 编译器(gcc): gcc是一个Linux中最标准的C语言编译器,需要安装gcc来编译PostGIS和其他软件或函数库的源码。
GNU Make(gmake或make):这个也是用于编译源码。
Proj4:Proj4 重投影库用于在PostGIS中提供坐标重投影功能。
GEOS:GEOS几何图形库,用于支持PostGIS中的几何信息处理、分析等功能,也可以直接认为GEOS是一个几何算法库。
LibXML2:LibXML2目前用于PostGIS中的一些导入函数,比如ST_GeomFromGML()和ST_GeomFromKML()。
JSON-C:目前使用JSON-C通过ST_GeomFromGeoJSON()函数导入GeoJSON格式的数据
GDAL:用于PostGIS对栅格数据的支持。
1.2、可选的软件或函数库
SFCGAL:用于提供额外的二维和三维的高级分析功能。允许对一些函数使用基于SFCGAL的实现,而不是使用基于GEOS的实现(例如ST_Intersection()和ST_Area()函数),如果安装了SFCGAL,PostgreSQL的配置变量postgis.backend允许终端用户控制他想使用哪个实现(默认情况下是GEOS的实现)。另外,SFCGAL依赖于CGAL和Boost这两个软件,即如果想安装SFCGAL,就先要安装这两个软件。最后pgrouting插件也依赖于CGAL和Boost
其他。。。待更新
二、本次安装的软件
由于带基础开发工具版本的centos都已经自动安装了gcc和make,相关安装方法本文将不做说明。
本次安装会安装如下软件(包含版本号):
proj-6.2.1
geos-3.8.1
libxml2-2.9.9
json-c-json-c-0.13.1-20180305
gdal-3.1.2
boost-devel.x86_64
cgal-4.14.3
SFCGAL-1.3.8
postgis-3.0.2
这些源码包可以直接去官网下载,可以直接在centos中下载,也可以直接从以下链接获取:
链接:https://pan.baidu.com/s/193lz-x8pO8C5ptEs2dXPlw
提取码:6tvd
源码包版本最好和上面的保持一致,否则可能会安装失败!
下载好源码包后,把相关源码包拷贝到centos中的/soft这个目录里。
另外,推荐使用root用户进行安装,否则可能会权限不够。
三、安装PostGIS依赖的软件和函数库
停止数据库:
cd /usr/pgsql-10/bin
./pg_ctl stop -D /opt/pgsql/10/data/
3.1、安装proj
解压proj-6.2.1.tar.gz:
tar -zxvf proj-6.2.1.tar.gz
进入proj-6.2.1:
cd proj-6.2.1
运行configure程序,并且设置proj安装的位置为/usr/local/proj-6.2.1:
./configure --prefix=/usr/local/proj-6.2.1
报错:
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for SQLITE3... configure: error: Package requirements (sqlite3 >= 3.7) were not met:
No package 'sqlite3' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables SQLITE3_CFLAGS
and SQLITE3_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
报错解决:
出现如上错误是因为缺少sqlite相关库
yum -y install sqlite-devel
运行make命令进行源码包的编译:
make clean
make
使用make check测试刚刚编译的软件:
make check
使用make install安装软件:
make install
设置环境变量:root
vim ~/.bashrc
export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source ~/.bashrc
结果无报错,proj-6.2.1已经安装成功!
3.2、安装geos
解压geos-3.8.1.tar.bz2:
报错:
[root@txxzyzyjpostgre-postgresql-master-1-b5795-0 local]# tar -jxvf geos-3.8.1.tar.bz2
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
解决方法:
yum -y install bzip2
tar -jxvf geos-3.8.1.tar.bz2
进入geos-3.8.1:
cd geos-3.8.1/
新建build文件夹,并进入该文件夹:
mkdir build
cd build/
运行cmake指令,并通过参数CMAKE_INSTALL_PREFIX指定安装目录为/usr/local/geos-3.8.1:
/usr/local/cmake-3.18.3/bin/cmake CMAKE_INSTALL_PREFIX=/usr/local/geos-3.8.1 ..
运行make指令来编译geos-3.8.1的源码:
make
使用make install指令安装geos-3.8.1:
make install
结果无报错,geos-3.7.2已经安装成功!
3.3、安装libxml2
解压libxml2-2.9.8.tar.gz:
tar -zxvf libxml2-2.9.9.tar.gz
进入libxml2-2.9.8:
cd libxml2-2.9.9/
运行configure程序,并且设置libxml2安装的位置为/usr/local/libxml2-2.9.9/:
./configure --prefix=/usr/local/libxml2-2.9.9
运行make命令进行源码包的编译:
make clean
make
使用make install安装软件:
make install
结果无报错,libxml2-2.9.9已经安装成功!
3.4、安装json-c
解压json-c-0.13.1.tar.gz:
tar -zxvf json-c-json-c-0.13.1-20180305.tar.gz
进入json-c-0.13.1:
cd json-c-json-c-0.13.1-20180305/
运行configure程序,并且设置libxml2安装的位置为/usr/local/json-c-0.13.1:
./configure --prefix=/usr/local/json-c-0.13.1
运行make命令进行源码包的编译:
make
使用make check测试刚刚编译的软件:
make check
使用make install安装软件:
make install
结果无报错,json-c-0.13.1已经安装成功!
3.5、安装gdal
解压gdal-3.1.2.tar.gz:
tar -zxvf gdal-3.1.2.tar.gz
进入gdal-3.1.2:
cd gdal-3.1.2/
运行configure程序,并且设置gdal安装的位置为/usr/local/gdal-3.1.2:
./configure --prefix=/usr/local/gdal-3.1.2
报错:
using pre-installed libz
checking for ld used by GCC... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking for shared library run path origin... /bin/sh: ./config.rpath: No such file or directory
done
checking for iconv... yes
checking for working iconv... yes
checking for iconv declaration...
extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
using ICONV_CPP_CONST=""
configure: Bash completions not requested
checking for PROJ >= 6 library... checking for proj_create_from_wkt in -lproj... no
checking for internal_proj_create_from_wkt in -lproj... no
checking for internal_proj_create_from_wkt in -linternalproj... no
configure: error: PROJ 6 symbols not found
解决办法:
检查proj6安装,确保安装成功,并设置环境变量,设置完再进行configure
./configure --prefix=/usr/local/gdal-3.1.2
运行make命令进行源码包的编译:
make clean
make
使用make install安装软件:
make install
结果无报错,gdal-3.1.2已经安装成功!
3.6、安装SFCGAL
由于SFCGAL需要依赖Boost、CGAL、GMP、MPFR这四个软件,所以具体总共需要先安装 以下四个软件:
boost-devel.x86_64
gmp-devel.x86_64
mpfr-devel.x86_64
CGAL-4.13.1
①安装boost-devel.x86_64
可以直接从centos的yum源中取得boost-devel.x86_64进行安装:
yum install boost-devel.x86_64
②安装gmp-devel.x86_64
直接使用yum安装:
yum install gmp-devel
②安装mpfr-devel.x86_64
接下来,由于CGAL和SFCGAL都依赖于mpfr-devel.x86_64,所以使用yum先安装它:
yum install mpfr-devel
③安装cgal-4.14.3.tar.gz
解压/usr/local/src目录下的cgal-4.14.3.tar.gz:
tar -zxvf cgal-4.14.3.tar.gz
进入cgal-4.14.3文件夹中:
cd cgal-4.14.3/
创建一个build文件夹,并进入该文件夹:
mkdir build
cd build
运行cmake指令(如果没有安装该指令,直接通过yum来安装或者使用官网的源码来安装),并通过参数CMAKE_INSTALL_PREFIX指定安装目录为/usr/local/cgal-4.14.3:
yum install cmake
/usr/local/cmake-3.18.3/bin/cmake CMAKE_INSTALL_PREFIX=/usr/local/cgal-4.14.3 ..
使用make编译cgal-4.14.3的源码:
make
使用make install安装cgal-4.14.3:
make install
④安装SFCGAL
由于Boost、GMP和MPFR都是以默认路径安装,所以只需针对CGAL设置关于路径的环境变量:
vi /etc/profile
然后在最后一行添加export CGAL_DIR=/usr/local/cgal-4.14.3
保存退出后,使用source命令让profile文件立即生效:
source /etc/profile
解压SFCGAL-1.3.6.tar.gz:
tar -zxvf SFCGAL-1.3.8.tar.gz
进入SFCGAL-1.3.8文件夹中:
cd SFCGAL-1.3.8/
新建build文件夹,并进入该文件夹:
mkdir build
cd build/
运行cmake指令,并通过参数CMAKE_INSTALL_PREFIX指定安装目录为/usr/local/sfcgal-1.3.8:
/usr/local/cmake-3.18.3/bin/cmake CMAKE_INSTALL_PREFIX=/usr/local/SFCGAL-1.3.8 ..
运行make指令来编译SFCGAL-1.3.8的源码:
make
使用make install指令安装SFCGAL-1.3.8:
make install
结果无报错,sfcgal-1.3.8已经安装成功!
四、安装PostGIS
4.1、添加动态库路径
/etc/ld.so.conf 此文件记录了编译时使用的动态函数库的路径,也就是加载so库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不
指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录>。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。
对于此种情况有2种解决办法:
(1) 在用源码安装时,用--prefix指定安装路径为/usr/lib。这样的话也就不用配置PKG_CONFIG_PATH
(2) 直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib
现在就使用第二种方法来为刚才安装的动态库添加路径,编辑/etc/lo.so.conf配置文件,为其添加如下内容:
include ld.so.conf.d/*.conf
/usr/pgsql-10/lib
/usr/local/geos-3.8.1/lib
/usr/local/lib
/usr/local/libxml2-2.9.9/lib
/usr/local/json-c-0.13.1/lib
/usr/local/cgal-4.14.3/build/lib
/usr/local/lib64
保存退出后,使用ldconfig命令将刚才指定的动态函数库加载到内存中:
ldconfig
4.2、编译并安装PostGIS
先解压/usr/local/src中的postgis-2.5.1.tar.gz:
tar -zxvf postgis-3.0.2.tar.gz
进入postgis-2.5.1文件夹:
cd postgis-3.0.2
接下来需要运行configure程序,需要为configure程序指定以下参数:
--prefix=PREFIX —— PostGIS安装的位置
--with-pgconfig=FILE —— PostgreSQL提供了一个名为pg_config的文件,用于使PostGIS这样的插件能够定位到PostgreSQL的安装目录。
--with-gdalconfig=FILE —— GDAL提供了一个gdal-config文件,使PostGIS能定位到GDAL安装的目录。
--with-geosconfig=FILE —— GEOS提供了一个geos-config文件,使PostGIS能定位到GEOS安装的目录。
--with-xml2config=FILE —— XML2提供了一个xml2-config文件,使PostGIS能定位到XML2安装的目录。
--with-projdir=DIR —— 用于指定Proj4的安装目录
--with-jsondir=DIR —— 用于指定JSON-C的安装目录
--with-sfcgal=PATH —— SFCGAL提供了一个sfcgal-config文件,使PostGIS能定位到SFCGAL安装的目录
现在就运行configure程序,并为其指定上面介绍的参数:
./configure --prefix=/usr/local/postgis-3.0.2 --with-gdalconfig=/usr/local/gdal-3.1.2/bin/gdal-config --with-pgconfig=/usr/pgsql-10/bin/pg_config --with-geosconfig=/usr/local/geos-3.8.1/bin/geos-config --with-projdir=/usr/local/proj-5.1.0 --with-xml2config=/usr/local/libxml2-2.9.8/bin/xml2-config --with-jsondir=/usr/local/proj-6.2.1 --with-sfcgal=/usr/local/SFCGAL-1.3.8/build/sfcgal-config
报错:
checking for iconvctl... no
checking for libiconvctl... no
Using user-specified pg_config file: /usr/pgsql-10/bin/pg_config
configure: error: the PGXS Makefile /usr/pgsql-10/lib/pgxs/src/makefiles/pgxs.mk cannot be found. Please install the PostgreSQL server development packages and re-run configure.
[root@txxzyzyjpostgre-postgresql-master-1-b5795-0 postgis-3.0.2]#
postgres=# show server_version;
server_version
----------------
10.7
(1 row)
解决办法:
安装依赖包:
rpm -ivh postgresql10-devel-10.7-2PGDG.rhel7.x86_64.rpm --nodeps
重新运行configure程序:
./configure --prefix=/usr/local/postgis-3.0.2 --with-gdalconfig=/usr/local/gdal-3.1.2/bin/gdal-config --with-pgconfig=/usr/pgsql-10/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.1 --with-sfcgal=/usr/local/SFCGAL-1.3.8/build/sfcgal-config
运行make命令编译postgis-2.5.1的源代码:
make
使用make install命令安装postgis-2.5.1:
make install
结果无报错,postgis-2.5.1已经安装成功!
4.3、在数据库中创建posgis插件
切换到postgres用户:
su - postgresql
启动PostgreSQL数据库服务:
cd /usr/pgsql-10/bin
./pg_ctl start -D /opt/pgsql/10/data/
运行psql:
-bash-4.2$ psql
psql (10.7)
Type "help" for help.
创建一个数据库test,并连接该数据库:
postgres=# create database test;
CREATE DATABASE
在test数据库中创建postgis插件:
test=# create extension postgis;
CREATE EXTENSION
创建成功!
查看postgis的版本:
test=# select postgis_full_version();
postgis_full_version
-----------------------------------------------------------------------------------------------------------------------
POSTGIS="3.0.2 2fb2a18" [EXTENSION] PGSQL="100" GEOS="3.8.1-CAPI-1.13.3" PROJ="6.2.1" LIBXML="2.9.9" LIBJSON="0.13.1"
(1 row)
列出了postgis和一些相关库的版本。
接下来,在test数据库中创建sfcgal插件:
postgres=# \c test;
You are now connected to database "test" as user "postgres".
test=# create extension postgis;
CREATE EXTENSION
创建成功!
查看test数据库中目前的所有插件:
test=# \dx
List of installed extensions
Name | Version | Schema | Description
----------------+---------+------------+---------------------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 3.0.2 | public | PostGIS geometry, geography, and raster spatial types and functions
postgis_sfcgal | 3.0.2 | public | PostGIS SFCGAL functions
(3 rows)
test=#
至此,postgis安装成功!
更多推荐
所有评论(0)