摘要:PostGIS为PostgreSQL提供了空间数据库分析能力,是目前业界主流的地理数据库之一,提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符等。在GaussDB 中,目前已支持PostGIS地理数据库扩展,并已广泛应用于国内外公安、农业、安平等政企客户。

本文分享自华为云社区《震惊,PostGIS还可以这样用!!!》,原文作者:秋之语  。

一、地理数据库能做什么

地理数据库属于空间数据库,为地理数据提供了标准的格式和存贮方法,能够方便迅速地进行检索、更新和数据分析,最终达到为多种应用服务的目的。地理数据则包括观测数据、分析测定数据、遥感数据和统计调查数据。地理数据库已广泛的应用于单车、导航,旅游、水利,农业、安平城市等应用场景,渗透到人民生活点点滴滴中。

图1. 地理数据库典型应用场景

二、PostGIS功能介绍

对于如上介绍的使用场景中,地理数据通常存储为点、线或者多边形的集合。在PostgreSQL中,已经提供了点、线、多边形等空间数据类型,但其提供的数据处理方法和性能很难达到GIS的要求,主要表现在:缺乏复杂的空间类型;没有提供空间分析;没有提供投影变换功能。为了使得PostgreSQL更好的提供空间信息服务,PostGIS也就应运而生。

2.1 PostGIS支持数据类型

PostGIS完全遵循OpenGIS规范,支持OpenGIS中所有空间数据类型:

  • a.POINT, LINESTRING, POLYGON, MULTI-POINT,
  • b.MULTI-LINESTRING, MULTI-POLYGON,
  • c.GEOMETRY COLLECTION

除了OpenGIS定义的地理数据类型之外,PostGIS还对数据类型进行了扩展,在WKT和WKB数据类型基础上扩展出EWKT和EWKB数据类型:

  • a.EWKT, EWKB(包含了SRID信息的WKT/WKB)
  • b.SRID(Spatial Referencing System Identifier):每个空间实例都有一个空间引用标识符 (SRID)。SRID 对应于基于特定椭圆体的空间引用系统,可用于平面球体映射或圆球映射。

此外,PostGIS还支持栅格数据raster分析,可以基于已有的影像或者卫星数据,实现影像或者卫星数据不同类别的统计分析。

2.2 PostGIS支持函数类型

PostGIS常见函数大致可以分为以下六类,对于各函数具体用法参考《PostGIS使用手册》

1.    字段处理函数

  • a.AddGeometryColumn为已有的数据表增加一个地理几何数据字段;
  • b.DropGeometryColumn删除一个地理数据字段的;
  • c.ST_SetSRID设置SRID值

2.    几何关系函数

这类函数描述几何对象的距离、包含、范围、相等等几何关系,常见函数如下:ST_Distance、ST_Equals、ST_Disjoint、ST_Intersects、ST_Touches、ST_Within、 ST_Overlaps、ST_Contains。

3.    读写函数

这类函数主要用于各种数据类型之间的转换,尤其是Geometry数据类型与其他字符型等数据类型之间的转换,如ST_AsText、ST_GeomFromText、ST_AsGeoJSON ST_AsHEXEWKB、ST_AsKML、 ST_AsLatLonText。

4.    几何对象创建函数

这类函数用于点、线、多变形等几何对象创建,如ST_GeomFromEWKT、ST_GeomFromEWKB、ST_MakePoint、ST_MakeBox2D、ST_LineFromText、ST_Polygon。

5.    几何对象编辑函数

这类函数提供对几何图像的平移、翻转、旋转、放大等功能,如ST_AddPoint、ST_Reverse、ST_Rotate、ST_Scale、ST_Snap、ST_Transform、ST_Translate、ST_TransScale。

6.    空间关系及测量函数

这类函数实现几何对象最远、最近、长度、面积等计算,如ST_3DClosestPoint、ST_3DDistance、 ST_3DDWithin、ST_3DDFullyWithin、ST_3DIntersects、ST_3DLongestLine、ST_3DMaxDistance、ST_3DShortestLine、ST_Area。

三、PostGIS的安装:

3.1 基础编译环境准备:

GaussDB(DWS)中的PostGIS Extension需使用GCC和G++工具进行编译安装。安装前需确认GCC和G++版本号大于等于4.8.5,且两个工具可正常使用。具体可通过gcc -v和g++ -v查看相关版本。

如上图所示环境gcc和g++版本为4.3.4,不满足版本要求,需使用源码安装方式进行升级。若集群中没有低版本gcc和g++编译器,可以通过挂载操作系统镜像进行安装,这里不做赘述。如需要升级则可从如下网站获取GCC相关安装包:

https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz

https://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.gz

https://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.gz

https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz

此外PostGIS安装还需要确保zlib、autoconf和automake等工具已正确安装。

3.2 PostGIS依赖库安装:

PostGIS依赖Geos、 Proj、 JSON-C、 Libxml2、 Gdal第三方开源工具。安全前首先需要下载Geos、 Proj、 JSON-C、 Libxml2、 Gdal、 PostGIS源码至$GAUSSHOME目录。

安装时需切换至omm用户,并检查GaussDB环境变量已正确加载,且可正常登录和使用GaussDB环境。具体安装命令可参考产品文档,且确保安装路径与文档中给定路径完全一致,自定义路径会导致最终库文件分发失败。

在整个安装过程中,可使用make -sj和make install -sj命令并行加速编译,-sj命令极低概率性出现安装错误,如果安装失败则请使用make和make install进行串行安装。此外对于ARM物理机,在每个安装包configure时需要增加如下编译参数: --build=aarch64-unknown-linuxgnu,否则会出现安装失败。同时,在三方开源库proj的安装过程中,可能会报错$GAUSSHOME/install/proj/bin目录不存在,可手动创建该目录再执行proj的安装。

安装成功后截图大致如下,其中关于get_PlatForm_str.sh不存在的提示信息可直接忽略。

安装完成后则需要使用PostGIS_install.sh工具完成PostGIS相关动态链接库在集群节点中的分发。执行方式为:

sh $GAUSSHOME/share/postgis/PostGIS_install.sh

如若失败,可打开PostGIS_install.sh文件分别执行分发命令,确定是哪个文件不存在而导致分发失败,并进一步分析该库文件编译失败原因。

四、PostGIS使用:

目前GaussDB对PostGIS中绝大多数函数均已支持下推至DN处理。因此对于绝大多数地理数据运算,都可以充分利用GaussDB的分布式计算优势,带来相比于PostgreSQL近似线性扩展比的性能加速。

4.1 地理数据的导入:

PostGIS支持shape格式地理数据导入。因此对于其它地理数据库平台数据,如Oracle或者ArcGIS中的地理数据,可先将其导出为shape格式文件,然后使用$GAUSSHOME/bin目录下的shp2pgsql工具将shape文件转换为sql文件并进一步导入GaussDB。如果生成sql文件中的地理表定义缺少分布键的话,可以手动增加一个id自增的分布键,使地理数据均匀分布到各个DN,进而充分利用GaussDB的分布式计算优势。

4.2 GIS函数使用demo:

对于GaussDB支持各GIS函数的具体使用方法,请参考《 PostGIS-2.4.2用户手册》。这里给一个简单的使用demo。

示例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;

执行结果为:

示例4:查询query执行计划,发现执行过程中p1表是广播到全部DN节点的,因此对于每个DN,其只需要处理自己节点上的p2数据,通过对比本地p2数据与全局p1数据即可完成整个分析,这也是分布式数据库的优势所在。

五、PostGIS性能介绍

目前市场上的空间数据库包括MySQL的Spatial Extension、PostgreSQL的PostGIS、Oracle Spatial、ArcGIS的ArcSDE及MongoDB等。对于这几款数据库的性能对比,之前有一篇文档《常用地理数据库对比测试》有一个比较详细的对比和介绍。

从图2至图5中的测试数据可以看出,对于点数据,在相同查询条件下,PostGIS数据库的空间查询速度最快。对于线数据,PostGIS则相比于其它数据库要慢一些,这可能与不同地理数据库使用不同索引技术有关。

图2. 第一次点查数据结果

图3. 第二次点查数据结果

图4. 第一次线查数据结果

图5. 第二次线查数据结果

GaussDB作为分布式数据库,对PostGIS做了深度适配。目前GaussDB对PostGIS中绝大多数函数均已支持下推至DN处理。因此对于绝大多数地理数据运算,都可以充分利用GaussDB的分布式计算优势,带来相比于PostgreSQL近似线性扩展比的性能加速,满足客户在大数据场景的地理数据处理和分析需求。

六、总结

本篇博文简单介绍了GaussDB中Postgis的安装和使用,欢迎广大读者收藏和讨论。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料~

点击关注,第一时间了解华为云新鲜技术~

震惊,PostGIS还可以这样用!!!的更多相关文章

  1. PostGIS(解压版)安装

    1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/windows/ post ...

  2. [原]CentOS7部署PostGis

    转载请注明原作者(think8848)和出处(http://think8848.cnblogs.com) 本文参考了<An almost idiot's guide to install Pos ...

  3. PostgreSql+PostGIS和uDig的安装

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 总体来说,这两款开源软件均是很好安装的,一般按照提示一步一步 ...

  4. 原来css中的border还可以这样玩

    原来css中的border还可以这样玩 前面的话: 在看这篇文章之前你可能会觉得border只是简单的绘制边框,看了这篇文章,我相信你也会跟我一样说一句"我靠,原来css中的border还可 ...

  5. iPhone 6 被盗记录二【写在315前夕:苹果售后福州直信创邺在没有三包的情况下帮小偷翻新、助力小偷换机销赃!无视王法。让人震惊,痛心,憎恨!消费者很受伤很无奈】

    投诉公司: 北京直信创邺数码科技有限公司  标题: 写在315前夕:苹果售后在没有三包的情况下帮小偷翻新.助力小偷换机销赃!无视王法.让人震惊,痛心,憎恨!消费者很受伤很无奈 期望: 还我手机,或者赔 ...

  6. 与你相遇好幸运,Postgresql和postgis安装

    笔者开发环境: windows 7 x86_64 一开始安装的是官网最新版 PostgreSQL 9.6 ,安装成功 之后安装PostGIS Bundle 2.2 for PostgreSQL x64 ...

  7. PostGIS导入导出SHP文件常用命令

    SHP导入POSTGIS数据库 引用 直接导入数据库 shp2pgsql  -I -s 2437 -W GBK shop_point.shp public.ntable | psql -U postg ...

  8. PostGIS ShapeFile 导入数据

    系统环境:WIN10 相关软件:PostgresSQL+PostGIS+QGIS 1.添加postGIS数据扩展 (1).打开PostgresSQL 客户端pgAdmin,在需要导入shp数据的数据库 ...

  9. 将PostGIS转化为GeoJSON

    #!/usr/bin/env python # -*- coding: utf-8 -*- import psycopg2 import json from geojson import loads, ...

  10. Linux 平台PostGIS安装

    1.前提条件: postgresql 9.6.1 已经通过源码方式安装完成并可成功运行. 2. other OS packets OS: CentOS 6.4 X64 X64: libxml2-dev ...

随机推荐

  1. Redis 6 学习笔记 1 —— NoSQL数据库介绍,Redis常用数据类型

    NoSQL数据库介绍(了解) 技术的分类1.解决功能性的问题:Java.Jsp.RDBMS.Tomcat.HTML.Linux.JDBC.SVN,2.进一步地,解决系统功能扩展性的问题:Struts. ...

  2. Mysql面试大全

    说说MySQL索引的底层数据结构 MySQL索引的底层数据结构是B+树数据结构 详细介绍一下B+树的数据结构是什么样子的 B+树有三个特性 B+树是一个平衡多叉树,与平衡二叉树的每一个节点下面最多有两 ...

  3. 一、docker的安装及docker-compose安装

    一. 安装docker 1.1安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # https://get.d ...

  4. sed 原地替换文件时遇到的趣事

    哈喽大家好,我是咸鱼 在文章<三剑客之 sed>中咸鱼向大家介绍了文本三剑客中的 sed sed 全名叫 stream editor,流编辑器,用程序的方式来编辑文本 那么今天咸鱼打算讲一 ...

  5. 前端本地导出文件 导出txt sql (简版版的字符串案例)

    1.首页明确要导出的根据 一般有图片 excel  文字.针对不同的文件类型 配置不同的参数 2.知识点 Blob          URL.createObjectUrl new Blob( arr ...

  6. base64编码的学习

    base64编码是什么 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. Base64编码本质上是一种将二进制数据转成 ...

  7. 在Ubuntu机器上使用war包安装Jenkins

    因为一些需求需要迁移之前使用的Jenkins,原来是按照官方文档使用apt方式安装的,这次搬迁后的机器由于默认不通外网(可以通过代理走外网),因此趁此机会,尝试改用war包方式安装 环境目标 系统Ub ...

  8. 实践篇:1 虚拟机使用rmp方式安装部署GitLab-ce

    01 环境准备 电脑:MAC Air 虚拟机:VMware Fusion 12.2.3 Linux环境:CentOS 7 02 rpm方式安装部署GitLab服务 步骤1:centos 7 安装wge ...

  9. 寻找市场中的Alpha-WorldQuant功能的实现(下)

    导语:本文介绍Alpha的相关基本概念,以及寻找和检验Alpha的主要流程和方法.在上篇中我们梳理了 WorldQuant经典读本FindingAlphas的概要以及WebSim的使用.作为下篇,我们 ...

  10. 一文掌握 Kubernetes 证书

    如果你正在自己的环境中运行 Kubernetes,那么了解证书的工作原理以及如何管理它们以确保集群的安全性和完整性至关重要.在本文中,我们将解释什么是 Kubernetes 证书.其重要性,以及如何检 ...