openGauss数据库PostGIS 安装与使用

目录

概述

1.PostGIS 安装

1.1 GCC-7.3编译器安装

1.2PostGIS依赖库安装

1.3.安装Postgis

2.使用Extension

2.1创建PostGIS Extension

2.2使用Extension

2.3删除Extension


概述

PostGIS Extension是PostgreSQL的空间数据库扩展,提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。PostGIS Extension完全遵循OpenGIS规范。openGauss提供PostGIS Extension(版本为PostGIS-2.4.2)需要单独安装插件。

1.PostGIS 安装

环境信息:Centos 7.6 + openGauss 3.1.0 极简版

环境需要联网下载一些依赖包。

1.1 GCC-7.3编译器安装

PostGIS安装依赖GCC-7.3编译器GNU编译器套件若数据库实例中已经安装GCC-7.3编译器,可直接跳过本步骤。我本机环境上是4.8.5,需要升级下。

GCC-7.3编译器推荐使用源码由低版本的gcc和g++编译器进行升级安装。若数据库实例中没有低版本gcc和g++编译器,可以通过挂载操作系统镜像等方法进行安装,这里不做赘述。

 

wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz 

[omm@openGhostxx gcc-7.3.0]$ tar -zxvf gcc-7.3.0.tar.gz

[omm@openGhostxx packages]$ cd gcc-7.3.0

[omm@openGhostxx gcc-7.3.0]$ ./contrib/download_prerequisites

这一步会下载一些依赖,需要确保联网。

./configure --prefix=/usr/local/gcc-7.3.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib  --disable-libsanitizer --disable-libcilkrts

 

然后make,时间会比较长,非常长。

make   

make install

完成后会提示安装目录,后续会用到。

设置下环境变量,不然gcc -v还是旧版本。

在vim编辑器中打开~/.bashrc文档。

vi ~/.bashrc

加入以下内容实际路径根据情况替换为前面make install的路径。

export CC=/usr/local/gcc-7.3.0/bin/gcc

export CXX=/usr/local/gcc-7.3.0/bin/g++

export LD_LIBRARY_PATH=/usr/local/gcc-7.3.0/lib/../lib64:$LD_LIBRARY_PATH

export PATH=/usr/local/gcc-7.3.0/bin:$PATH

然后source生效

source ~/.bashrc

最后查看下

 

1.2PostGIS依赖库安装

  1. 下载postgis插件包并解压重命名。
​
[omm@openGhostxx ~]$ cd $GAUSSHOME/

[omm@openGhostxx openGauss]$ wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/dependency/postgis-xc-master-2020-09-17.tar.gz

[omm@openGhostxx openGauss]$ tar -zxvf postgis-xc-master-2020-09-17.tar.gz

[omm@openGhostxx openGauss]$ mv postgis-xc-master postgis-xc/

​

2.下载补丁文件到$GAUSSHOME/postgis-xc/目录,并打入补丁。

下载路径:gpl_dependency/postgis/postgis_2.4.2-2.patch · openGauss/openGauss-third_party - Gitee.com

cd $GAUSSHOME/postgis-xc/

[omm@openGhostxx postgis-xc]$ patch -p1 < $GAUSSHOME/postgis_2.4.2-2.patch

patching file gdal-1.11.0/frmts/postgisraster/postgisraster.h

patching file gdal-1.11.0/ogr/ogrsf_frmts/pg/ogr_pg.h

patching file gdal-1.11.0/ogr/ogrsf_frmts/pg/ogrpgutility.h

patching file postgis-2.4.2/configure

patching file postgis-2.4.2/postgis--2.4.2.sql

patching file postgis-2.4.2/postgis_svn_revision.h

patching file postgis-2.4.2/raster/rt_pg/rtpostgis.c

patching file postgis-2.4.2/topology/Makefile.in

patching file postgis-2.4.2/topology/postgis_topology.c

patching file postgis-2.4.2/topology/sql/topogeometry/totopogeom.sql.in

patching file postgis-2.4.2/topology/sql/topogeometry/type.sql.in

patching file postgis-2.4.2/topology/topology.sql.in

3.从网站https://gitee.com/opengauss/openGauss-third_party/blob/master/gpl_dependency/postgis/extension_dependency.h下载postgis依赖头文件到$GAUSSHOME/include/postgresql/server/。

4.编译proj

PROJ框架在做投影,坐标系转换时,其操作风格类似于Linux Shell命令。

cd $GAUSSHOME/postgis-xc/proj-4.9.2

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/proj

make -sj

make install -sj

5.编译Geos

GEOS的前身是JTSJTS提供了全功能的,强大的空间操作和空间判断。

cd $GAUSSHOME/postgis-xc/geos-3.6.2

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/geos

make -sj

make install -sj

6.编译libxml

libxml是一个用于解析xml文件的库在各个平台下都能使用也支持多种语言

cd $GAUSSHOME/postgis-xc/libxml2-2.7.1

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/libxml2

make -sj

make install -sj

7.安装JSON-C

JSON-C实现了一个引用计数对象模型,它允许您轻松地使用C语言来构建JSON对象,将它们输出为JSON格式的字符串,并将JSON格式字符串解析回JSON对象的C语言表示形式。

cd $GAUSSHOME/postgis-xc/json-c-json-c-0.12.1-20160607

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/json

make -sj

make install -sj

1.3.安装Postgis

cd $GAUSSHOME/postgis-xc/postgis-2.4.2

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/postgis2.4.2 --with-pgconfig=$GAUSSHOME/bin/pg_config --with-projdir=$GAUSSHOME/install/proj --with-geosconfig=$GAUSSHOME/install/geos/bin/geos-config --with-jsondir=$GAUSSHOME/install/json  --with-xml2config=$GAUSSHOME/install/libxml2/bin/xml2-config   --without-raster --without-topology CFLAGS='-O2 -fpermissive -DPGXC  -pthread -D_THREAD_SAFE -D__STDC_FORMAT_MACROS -DMEMORY_CONTEXT_CHECKING -w'  CC=g++

make -sj

make install -sj

 

如果编译出现类似/home/carrot/data/openGauss-server/third_party/buildtools/gcc/res/lib64/libstdc++.la 找不到,可以自建目录,将libstdc++.la拷贝进去,然后再make -sj(如果libstdc++.so出现类似问题,按同样方法处理)。

omm用户执行下面的语句,完成PostGIS相关动态链接库在数据库实例节点中的分发。因为我的openGauss是单机极简版,所以使用cp 复制到节点路径。如果是企业版需要使用tranfer.py,具体参考openGauss产品文档PostGIS安装章节。

mv $GAUSSHOME/lib/postgresql/postgis-2.4.so $GAUSSHOME/install/postgis-2.4.so


cp $GAUSSHOME/install/postgis-2.4.so $GAUSSHOME/lib/postgresql/postgis-2.4.so

cp $GAUSSHOME/install/json/lib/libjson-c.so.2 $GAUSSHOME/lib/libjson-c.so.2

cp $GAUSSHOME/install/geos/lib/libgeos_c.so.1 $GAUSSHOME/lib/libgeos_c.so.1

cp $GAUSSHOME/install/proj/lib/libproj.so.9 $GAUSSHOME/lib/libproj.so.9

cp $GAUSSHOME/install/geos/lib/libgeos-3.6.2.so $GAUSSHOME/lib/libgeos-3.6.2.so

cp $GAUSSHOME/install/postgis2.4.2/lib/liblwgeom-2.4.so.0 $GAUSSHOME/lib/liblwgeom-2.4.so.0

cp $GAUSSHOME/postgis-xc/postgis-2.4.2/postgis--2.4.2.sql $GAUSSHOME/share/postgresql/extension/postgis--2.4.2.sql

cp $GAUSSHOME/postgis-xc/postgis-2.4.2/postgis.control $GAUSSHOME/share/postgresql/extension/postgis.control

最后重启数据库实例。

gs_ctl stop -D /opt/software/openGauss/data/single_node/

gs_ctl start -D /opt/software/openGauss/data/single_node/

2.使用Extension

下列SQL语句展示PostGIS的简单使用,对于各函数的具体使用,请参考《PostGIS-2.4.2用户手册》。

2.1创建PostGIS Extension

可直接使用CREATE EXTENSION命令进行创建:

openGauss=# CREATE EXTENSION postgis;

2.2使用Extension

示例1:几何表的创建。

CREATE TABLE cities ( id integer, city_name varchar(50) );

SELECT AddGeometryColumn('cities', 'position', 4326, 'POINT', 2);

示例2:几何数据的插入。

INSERT INTO cities (id, position, city_name) VALUES (1,ST_GeomFromText('POINT(-9.5 23)',4326),'CityA');

INSERT INTO cities (id, position, city_name) VALUES (2,ST_GeomFromText('POINT(-10.6 40.3)',4326),'CityB');

INSERT INTO cities (id, position, city_name) VALUES (3,ST_GeomFromText('POINT(20.8 30.3)',4326), 'CityC');

示例3:计算三个城市间任意两个城市距离。

SELECT p1.city_name,p2.city_name,ST_Distance(p1.position,p2.position) FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id;v

 

2.3删除Extension

在openGauss中删除PostGIS Extension的方法如下所示:

DROP EXTENSION postgis CASCADE;

 说明: 如果Extension被其它对象依赖(如创建的几何表),需要加入CASCADE(级联)关键字,删除所有依赖对象。

确认执行OK后,可执行下列命令删除$GAUSSHOME/postgis安装目录。

rm -rf $GAUSSHOME/postgis-xc

最后:除了上面这种安装插件支持空间数据,还有基于openGauss的Yukon 数据库扩展地理空间数据的存储和管理能力, 提供专业的GIS功能,管理地理空间数据。Yukon 目前共提供 postgis、postgis_raster、postgis_sfcgal、yukon_geomodel、yukon_geogridcoder五个扩展,感兴趣的同学可以了解。

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
回答: 要安装PostGIS并创建空间数据库,可以按照以下步骤进行操作。首先,使用Stack Builder下载PostGIS 2.3的安装程序。安装程序下载完成后,选择"Create spatial database"作为安装组件的设置,这样在创建数据库时可以以此作为模板。对于其他设置,可以选择默认值即可。\[1\]\[2\]接下来,可以使用PostgreSQL提供的命令行或图形化管理工具pgAdmin来创建和管理PostGIS空间数据库。另外,一些GIS客户端软件如QGIS也提供了管理插件。如果选择使用pgAdmin 4,可以打开该工具并按照其提供的界面进行操作,以创建空间数据库并导入空间数据。\[3\] #### 引用[.reference_title] - *1* [PostGIS教程二:PostGIS安装](https://blog.csdn.net/qq_35732147/article/details/86299060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [PostGIS安装与初步使用](https://blog.csdn.net/qq_35732147/article/details/81169961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gauss松鼠会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值