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

Linux(centos)中使用源码安装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安装成功!

相关文章:

  • SQL Server Always ON 数据同步原理
  • RFS(一)就从这里开始吧
  • 谈谈安装MYSQL ODBC遇到的报错(Error 1918)
  • RFS( 二 )----一些常用的快捷键
  • RFS(三)----解决x64机器上IE11版本使用IEDriverServer在输入英文/数字很慢的问题
  • RFS(四)${EMPTY}参数
  • RFS(五)AutoItLibrary库RUN关键字的用法及附加的其他关键字
  • LoadRunner(一)LR文件整个读取和计算长度
  • LoadRunner(二)LR参数文件多列的使用和局部变量超长的问题解决方法
  • 文件批量Base64编码工具
  • Windows下批处理方式压缩文件夹为tar.gz的方法
  • RFS(六)Open Browser后,页面显示This is the initial start page for the WebDriver server.的解决办法
  • 解决在Windows server 2012R2上无法安装Intel I219-V,I211,I217-V,I218-V网卡驱动的问题
  • 谈谈在Windows7 x86上,H170芯片组和H150芯片组可用内存只有2.1G的问题
  • 解决在H170/B150主板不接显示器无法正常开机的问题
  • JS 中的深拷贝与浅拷贝
  • 2019.2.20 c++ 知识梳理
  • 30天自制操作系统-2
  • Consul Config 使用Git做版本控制的实现
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • golang中接口赋值与方法集
  • Laravel Telescope:优雅的应用调试工具
  • leetcode386. Lexicographical Numbers
  • mac修复ab及siege安装
  • React系列之 Redux 架构模式
  • Terraform入门 - 1. 安装Terraform
  • Terraform入门 - 3. 变更基础设施
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • WebSocket使用
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 当SetTimeout遇到了字符串
  • 深入浅出webpack学习(1)--核心概念
  • 事件委托的小应用
  • 云大使推广中的常见热门问题
  • HanLP分词命名实体提取详解
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​io --- 处理流的核心工具​
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (4.10~4.16)
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (三)终结任务
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)UDP基本编程步骤
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET Core 中的路径问题
  • .NET 发展历程
  • .Net程序帮助文档制作
  • .NET企业级应用架构设计系列之结尾篇
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @ConditionalOnProperty注解使用说明
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [AIGC 大数据基础]hive浅谈
  • [Android]如何调试Native memory crash issue