首页 > 其他分享 >认识PostGIS

认识PostGIS

时间:2022-09-06 14:11:48浏览次数:94  
标签:GIS 认识 数据库 PostGIS 空间数据 SQL SFSQL

1、什么是PostGIS

  PostGIS是在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力的开源空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象

  它是PostgreSQL的扩展插件,在PostgreSQL的core(存储、检索、事务等)层之上实现GIS层的功能,它不能独立于PostgreSQL运行。

2、PostGIS解决什么问题?

  产生的原因是什么?发展轨迹是什么?

  空间数据库是为了存储和管理空间数据而存在的,在Postgis之前,是如何对空间数据进行存储和管理的呢?

  在第一代地理信息系统(GIS)实现中,所有的空间数据都存储在平面文件(例如shp)中,用专门的GIS软件(即空间数据引擎)来解释和操作这些数据。它们是专为处理空间数据而构建的专有的、独立的系统,即应用程序和平面文件之间的耦合性非常高,平面文件里的空间数据没有数据独立性。

  

 

  在第二代地理信息系统(GIS)实现中,将空间数据存储在关系数据库(RDBMS)中(以子表或LOB的方式来存储图形),此时关系型数据库仅仅是存放空间数据的容器,但仍然需要空间数据引擎为空间数据进出该容器提供通道,数据库中的空间数据仍然没有数据独立性。这个时候虽然有了“空间数据库”的概念,但并不彻底。

  其优点是:支持通用的关系数据库管理系统,空间数据按BLOB存取,可跨数据库平台,与特定GIS平台结合紧密,应用灵活。

  其缺点是:主要表现为,空间操作和处理无法在数据库内核中实现,数据模型较为复杂,扩展SQL比较困难,不易实现数据互操作。

  Orace + ArcSDE是第二代GIS系统的典型解决方案。

   

  

  在第三代地理信息系统(GIS)实现中,人们开始把空间数据类型当作第一级数据库对象,存储Geometry就同存储Int、Char等类型的数据一样,只需定义成Geometry数据类型即可,这个时候才可是真正意义上的“空间数据库”。空间数据库实现了从以GIS为中心向以数据库为中心的转变。之所以能够这样实现,是因为关系型数据库向对象关系型数据库的发展,数据库厂商借鉴了面向对象技术,支持抽象的数据类型(即用户可以自己定义数据类型,也称UDT)及其相关操作的定义。第三代地理信息系统,就不再需要专门的空间数据引擎去处理和操纵空间数据了,应用程序只需要通过SQL语言就能轻松地操纵空间数据。

  

 

  使用SDO_GEOMETRY类型来表达Geometry,由于数据是结构化的,通过SQL查询空间数据即可了解数据内容,通过SQL即可非常便捷地对数据进行各种操作(例如更新)。这样的好处是显示易见的,它突破了空间数据引擎的种种障碍限制,在特定的环境下特别是用户的数据都是简单的点线面,并且业务只有相关的编辑方面,SQL操作将非常便捷直观。这些操作其实也降低了操作人员的GIS门槛,但是切记:高便利与高风险是时刻并存的,通过SQL修改图形难以兼顾数据的一致性。

3、PostGIS与ArcSDE的关系

  要回答这个问题,先得明白ArcSDE是什么。

  

  ArcSDE是ESRI提供的一项技术,可以访问和管理存储在关系型数据库中的空间数据。

  与Postgis的相同点:

  • 都可以作为空间数据库的实现;
  • 都遵循OGC SFSQL以及ISO SQL/MM两个规范;

 

  与Postgis的不同点:

  • ArcSDE可作为不同关系型数据库的空间数据引擎(SDE即spatial data engine),Postgis不可以;
  • ArcSDE可在不同关系型数据库中实现空间数据库,Postgis只能在PostgreSQL上实现空间数据库。

 4、PostGIS的生态

  谁在应用?被哪些软件支持?

  关于谁在应用,参见:http://postgis.net/casestudy/

  PostGIS已经成为了一个广泛使用的空间数据库,支持使用它存储和检索数据的第三方程序的数量也在增加。

  支持PostGIS的程序包括服务器端和桌面端的开源软件和闭源软件。下表列出了一些使用或支持PostGIS的软件:

  

 

5、PostGIS包含的内容

  有什么内容?遵循什么规范?

  Postgis在PostgreSQL基础上,实现了空间数据类型、空间索引和空间函数。它所实现的这些内容,遵循了两个规范:OGC SFSQL以及ISO SQL/MM。

  OGC:它是一个国际标准组织,成立于1994年,是一个由GIS厂商、计算机厂商、数据库厂商、美国联邦机构、标准组织以及学术界等部门代表组成的公益性行业协会。致力于实现地理空间数据与地理信息处理资源的全面集成,通过信息基础设施,广泛使用商业化的、可互操作的地理信息处理软件。

5.1 SFSQL

5.1.1 SFSQL约定的内容

  

5.1.2 SFSQL Geometry的对象模型

  

5.1.3 SFSQL 九交模型

  

5.1.4 SFSQL 基于九交模型的关系谓词

  什么叫空间关系谓词?它是用来界定空间的运算符,类似于我们用>、<、=来判断一维可排序数据的关系一样。

       

5.1.5 SFSQL Geometry的WKT表达

  

5.1.6 SFSQL 基于预定义数据类型的SQL实现

   

5.1.7 SFSQL 基于扩展Geometry的SQL实现

   

5.1.7 SFSQL 在扩展Geometry上实现的函数

  

  

  

 

5.2 SQL/MM

 

 5.2.1 SQL/MM 约定的内容

  

5.3 PostGIS在标准以外的扩展

5.3.1扩展EWKT、EWKB

  

5.3.2扩展GIS函数(一般以postgis_开头)

     如addBBox(geometry)函数给所给的几何体加上一个边框。

   如simplify(geometry,tolerance)函数可以对折线和多边形利用Douglas-Peuker算法进行一些节点进行删除,从而使表现的图形更简单而清晰,在网络传输数据时具有更高的效率。

   详见帮助文件14章。

5.3.3扩展PostGIS管理函数

   AddGeometryColumn、postgis_version()等函数。

5.3.4其它

  例如对于矢量瓦片的支持。

6、参考阅读 

  1) https://www.cnblogs.com/6yuhang/p/5889149.html

  2) https://www.zhihu.com/column/c_1253365661696491520

 

 

 

 

 

 

 

 

 

 

 

 

 

1)          扩展EWKT、EWKB

标签:GIS,认识,数据库,PostGIS,空间数据,SQL,SFSQL
From: https://www.cnblogs.com/6yuhang/p/16661554.html

相关文章

  • postGIS+postgreSQL+Supermap部署GIS数据
    1.在postGIS中创建XX_gisdb数据库,参数如下图所示,在架构中再创建gcj02架构;2.在超图中新建数据库型数据源;3.将要素表+字段表存在mdb个人地理数据库中,通过在超图中导入要素......
  • 一、Axios入门——初认识Axios
    一、axios是什么?端最流行的ajax请求库react/vue官方都推荐使用axios发ajax请求文档:https://github.com/axios/axios二、axios特点基于xhr+pr......
  • 一文带你认识AscendCL
    摘要:AscendCL(AscendComputingLanguage,昇腾计算语言)是昇腾计算开放编程框架,是对底层昇腾计算服务接口的封装。本文分享自华为云社区《【CANN文档速递09期】应用开发之推......
  • 认识Node.js以及相关说明
    首先我们先要认识一下,Node是用JavaScript来编写的。问:JavaScript时怎么组成的?答:JavaScript主要是由两块核心组成,第一个核心是js的核心语法,该语法也被称为ECMAScript,语法......
  • ipv6地址表示和简要认识(速通)
    ipv6一共128位比特,采用冒分16进制划分8部分的表示方式,例如:X:X:X:X:X:X:X:X::在ipv6地址只能显示一次,否则不合法。ipv6全球单播地址相当于ipv4的公网IPipv6链路本地地址fe80::......
  • 图数据库入门教程(二)认识tinkerpop与gremlin
    上一篇文章我们对图数据库有了一个简单的理解,对于关系的计算优雅而快速,适用与一些关系计算的场景,比如社交网络、金融反欺诈、商机发现、智能推荐等,想了解更多可以看一下阿......
  • Java·初篇 01认识第一个程序
    Java·初篇01认识第一个程序一、前期准备【环境搭建】(https://www.java.com/zh-CN/)了解JRE和JDKJDK的下载和按照【常用DOS命令】目的:使用JDK,在bin目录中编译ja......
  • # autoit 自动翻译并附注 pdf中不认识的单词
    autoit自动翻译并附注pdf中不认识的单词学印尼语遇到一个问题,即需要大量复制pdf文本中的个别单词到谷歌翻译中,这个过程需要重复点击和按键,及其耗费时间,为此写了一个脚本......
  • Docker 环境安装postgres+postgis扩展
    一、单独安装Postgresql1、安装docker。(省略,自行百度安装)2、拉取postgresql镜像。dockerpullpostgres:123、运行postgresdockerrun--namepostgres--restart=always......
  • geopandas 把 shp 文件入库到 postgis 数据库
    lll={'database':"test",'user':'postgres','password':'postgis','host':'127.0.0.1','port':'5432'}engine=create_engine(f"......