精华内容
下载资源
问答
  • PostGIS

    2020-12-28 09:55:43
    <div><p>How would one go about including PostGIS with this setup? <p>I tried adding: <pre><code> postgresql-11-pgrouting postgresql-11-pgrouting-scripts postgresql-11-postgis-2.5 postgresql-11-...
  • postgis

    2021-01-08 13:54:31
    <div><p>Do you have plan to support <code>postgis</code>? For example search that read the <code>point</code> and <code>distance</code> at the same time</p><p>该提问来源于开源项目:carltongibson...
  • Postgis

    2020-12-02 23:50:14
    <div><p>Hello there, I would like to ask you if there is a way to add postgis to latest postgresql 10 for which you have developed a Dockerfile :?</p><p>该提问来源于开源项目:bitnami/bitnami-...
  • postGIS

    2017-08-17 11:00:19
    获取几何对象的WKT描述 ST_AsText(geometry) —–你在postgis中看到形如0101000020E610000070DB4136FAEF5B40A0B1B17D8EE93C40的数据,想要把它转化成经纬度就用这个函数。 获取点的X坐标 ST_X(geometry) 获取点的Y...
    1. 获取几何对象的WKT描述 ST_AsText(geometry) —–你在postgis中看到形如0101000020E610000070DB4136FAEF5B40A0B1B17D8EE93C40的数据,想要把它转化成经纬度就用这个函数。
    2. 获取点的X坐标 ST_X(geometry)
    3. 获取点的Y坐标 ST_Y(geometry)
    展开全文
  • PostGis

    千次阅读 2013-10-22 16:44:08
    postgis PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数

    http://baike.baidu.com/link?url=VSOEQ4DFNRm9kzC5XSToxnJVKKKfrCkL5Mo-6bR_HsZ1wPAoXoQ1fVctBO-lRwvzf8Ys9ZQ1YjwzlsdFRqz9ZK

    postgis

    PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产品开发项目之一, 有着非常广泛的用户。PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。
    1986年,加州大学伯克利分校的Michael Stonebraker教授领导了Postgres的项目,它是PostgreSQL的前身。随后出现了PostGIS,PostGIS是对象-关系型数据库系统PostgreSQL的一个扩展,它的出现让人们开始重视基于数据库管理系统的空间扩展方式,而且使PostGIS有望成为今后管理空间数据的主流技术。
    由于空间数据具有空间位置、非结构化、空间关系、分类编码、海量数据等特征,一般的商用数据库管理系统难以满足要求。
    为了提高数据库管理系统(DBMS)对空间数据的管理能力,国内外先后出现过:文件与关系数据库混合管理系统、全关系型空间数据库管理系统关系型数据库+空间数据引擎、扩展对象关系型数据库管理系统,以及面向对象空间数据库管理系统等多种解决方案。目前,国内外较为流行的主要集中在“关系型数据库+空间数据引擎”、“扩展对象关系型数据库”两方面。
    关系型数据库+空间数据引擎”通常是近年来由GIS厂商研发的一种中间件解决方案。用户将自己的空间数据交给独立于数据库之外的空间数据引擎,有空间数据引擎来组织空间数据在关系型数据库中的存储;当用户需要访问数据的时候,再通知空间数据引擎,有引擎从关系型数据库中取出数据,并转化为客户可以使用的方式。
    因此,关系型数据库仅仅是存放空间数据的容器,而空间数据引擎则是空间数据进出该容器的转换通道。这类系统的典型代表有ESRI的ArcSDE和MapInfo的SpatialWare。其优点是,访问速度快,支持通用的关系数据库管理系统,空间数据按BLOB存取,可跨数据库平台,与特定GIS平台结合紧密,应用灵活。其缺点主要表现为,空间操作和处理无法在数据库内核中实现,数据模型较为复杂,扩展SQL比较困难,不易实现数据共享与互操作。
    扩展对象关系型数据库管理系统是由数据库厂商研发的管理空间数据一种解决方案。由于关系型数据库难以管理非结构化数据(也包括空间数据),数据库厂商借鉴面向对象技术,发展了对象关系型数据库管理系统
    此系统支持抽象的数据类型(ADT)及其相关操作的定义;用户利用这种能力可以增加空间数据类型及相关函数,从而将空间数据类型与函数就从中间件(空间数据引擎)转移到了数据库管理系统中,客户也不必采用空间数据引擎的专用接口进行编程,而是使用增加了的空间数据类型和函数的标准扩展型SQL语言来操作空间数据。
    这类支持空间扩展的产品有Oracle的Oracle Spatial, IBM的DB2 Spatial Extender, Informix 的Spatial DataBlade。其优点是,空间数据的管理与通用数据库系统融为一体,空间数据按对象存取,可在数据库内核中实现空间操作和处理,扩展SQL比较方便,较易实现数据共享与互操作。其缺点主要表现为,实现难度大,压缩数据比较困难,目前的功能和性能与第一类系统尚存在差距。
    目前开源空间信息软件领域最性能优秀的数据库软件当属PostgreSQL数据库,而构建在其上的空间对象扩展模块PostGIS则使得其成为一个真正的大型空间数据库
    缘起PostgrSQL
    1986年,加州大学伯克利分校的Michael Stonebraker教授领导了Postgres的项目,它是PostgreSQL的前身。这个项目的成果非常显著,在现代数据库的许多方面都作出了大量的贡献,如在面向对象的数据库、部分索引技术、规则、过程和数据库扩展方面都取得了显著的成果。同时,Stonebraker将PostgreSQL纳入到BSD版权体系中,使得PostgreSQL在各种科研机构和一些公共服务组织得到了广泛的应用。
    在PostgreSQL中已经定义了一些基本的集合实体类型,这些类型包括:点(POINT)、线(LINE)、线段(LSEG)、方形(BOX)、多边形(POLYGON)和圆(CIRCLE)等;另外,PostgreSQL定义了一系列的函数和操作符来实现几何类型的操作和运算;同时,PostgreSQL引入空间数据索引R-tree。
    尽管在PostgreSQL提供了上述几项支持空间数据的特性,但其提供的空间特性很难达到GIS的要求,主要表现在:缺乏复杂的空间类型;没有提供空间分析;没有提供投影变换功能。为了使得PostgreSQL更好的提供空间信息服务,PostGIS应运而生。
    PostGIS简介
    PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。同时,PostGIS遵循OpenGIS的规范。
    PostGIS的版权被纳入到GNU的GPL中,也就是说任何人可以自由得到PostGIS的源码并对其做研究和改进。正是由于这一点,PostGIS得到了迅速的发展,越来越多的爱好者和研究机构参与到PostGIS的应用开发和完善当中。
    PostGIS发展历程
    PostGIS是由Refractions Research Inc开发的,Refractions是一家GIS和数据库咨询公司,Refraction公司最初是在PostgreSQL的基础上研究空间数据库的实现,由于PostgreSQL所提供的空间数据类型和功能远远不能满足GIS的需求,研究工作经常陷入到进退维谷的境地,最终的结果往往是耗费了大量的人力物力,而产品却极其复杂并且性能低下。这些原因直接或间接促成PostGIS项目的实施。
    PostGIS的实施也不是一帆风顺,直到PostgreSQL 7.1发布之后,PostGIS的实现才变为可能,主要原因是7.1版本之前PostgreSQL支持的记录大小最大为8Kb,从7.1之后,PostgreSQL将这一限制摈弃。即使采用二进制方式存储,空间数据对象也往往会经常超过8Kb,如果这个限制存在的话,空间数据的存储就无从谈起。
    伴随着这一限制的消除,PostGIS的研究和开发也随即在2001年的4月展开,并于2001年的5月发布了PostGIS的第一版(PostGIS V0.1)。在PostGIS的第一版中,主要包括空间数据库、采用标准表示方式的空间数据对象、支持快速查询的空间索引和一些简单的分析函数(如area和length等)。PostGIS V0.1中支持的空间数据对象类型包括:点、线、多边形、几何对象类型,以及多点、多线、多多边形的几何对象类型。
    2001年5月发布的PostGIS V0.2增加了对于Windows平台下二进制表示的支持,同时为新用户提供帮助文档。不过,用户反馈PostGIS的函数命名没有遵循OpenGIS规范。
    2001年7月PostGIS V0.5发布,PostGIS增加了OpenGIS现有的所有功能性函数并在函数的命名上与其保持一致。增加了24个OpenGIS存取函数,同时删除了与这些函数功能等价的不标准的原有函数。
    伴随着来自不列颠哥伦比亚省政府的资金支持,对于在球体表面的长度运算支持也加入到0.5版中。同期,Refractions公司将British Columbia省的数字道路地图集移植到PostGIS中,同时使用数据库的模式和数据转换功能为地图集客户提供支持(急救车派遣、紧急事物响应,以及其他市政事物等)。
    PostGIS V0.5之所以重要,还有一个原因就是Minnesota大学的Mapserver的发布。Minnesota大学的Mapserver是一个开源的互联网地图发布引擎,就像ESRI公司的ArcIMS系统,Mapserver同时增加了对于PostGIS的支持。
    在Mapserver中,提供了一个Web驱动的接口,这个接口用于检查数据库中数据的空间特征。在PostGIS中,PostGIS为了使得Mapserver能够更好的提供服务,提供了一个易于读写的数据源,这个数据源将会在网络事务繁忙的时候发挥其效用。比如,如果用标准的GIS文件作为数据源,如果有两个用户并发的对同一文件进行写入操作,这样将会不可避免的导致操作冲突,而利用PostGIS就能够很好的解决这个缺陷,同时确保数据的完整性。
    2001年9月,PostGIS V0.6发布,PostGIS V0.6提供了完整的OpenGIS支持,加入了标准的元数据表,并且提供了对于空间参照系统标识的支持。另外还加入了OpenGIS支持的12个功能函数,同时对于Mapserver的支持得到了进一步的增强。
    2002年2月,PostgreSQL V7.2发布,在7.2版中,GIST索引的API函数作了一点改进。由于这些API函数同样应用于PostGIS中,这给PostGIS V0.6的应用带来了麻烦,促使PostGIS必须作出改进适应PostgreSQL的变化。2002年PostGIS V0.7发布,在0.7版中,提供了新的对于GIST的API函数支持,同时在这一版中,提供了对于坐标变换的支持。
    从2002年到现在,PostGIS又陆续发布了一系列的新版本,这些PostGIS产品在继承PostGIS产品原有优点的同时,又针对PostGIS本身存在的问题和不足进行了进一步的改进。到现在为止,PostGIS的最新版本是PostGIS V1.1.4。PostGIS V1.1.4主要改进的地方包括:⑴提供了对于将要发布的PostgreSQL V8.2的支持;⑵修复了函数collect中存在的bug;⑶在MakeBox2d和MakeBox3d中增加了对SRID的匹配检查;⑷提高了pgsql2shp的运行并发性;⑸进一步改进了对于Java的支持。
    PostGIS特性
    PostGIS支持所有的空间数据类型,这些类型包括:点(POINT)、线(LINESTRING)、多边形(POLYGON)、多点(MULTIPOINT)、多线(MULTILINESTRING)、多多边形(MULTIPOLYGON)和集合对象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的对象表达方法,比如WKT和WKB。
    PostGIS支持所有的数据存取和构造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。
    PostGIS提供简单的空间分析函数(如Area和Length)同时也提供其他一些具有复杂分析功能的函数,比如Distance。
    PostGIS提供了对于元数据的支持,如GEOMETRY_COLUMNS和SPATIAL_REF_SYS,同时,PostGIS也提供了相应的支持函数,如AddGeometryColumn和DropGeometryColumn。
    PostGIS提供了一系列的二元谓词(如Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系,同时返回布尔值来表征对象之间符合这个关系。
    PostGIS提供了空间操作符(如Union和Difference)用于空间数据操作。比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。
    PostGIS还提供以下功能:
    数据库坐标变换
    数据库中的几何类型可以通过Transform函数从一种投影系变换到另一种投影系中。在OpenGIS中的几何类型都将SRID作为自身结构的一部分,但不知什么原因,在OpenGIS的SFSQL规范中,并没有引入Transform。
    球体长度运算
    存储在普通地理坐标系中的集合类型如果不进行坐标变换是无法进行程度运算的,OpenGIS所提供的坐标变换使得积累类型的程度计算变成可能。
    三维的几何类型
    SFSQL规范只是针对二维集合类型。OpenGIS提供了对三维集合类型的支持,具体是利用输入的集合类型维数来决定输出的表现方式。例如,即便所有几何对象内部都以三维形式存储,纯粹的二维交叉点通常还是以二维的形式返回。此外,还提供几何对象在不同维度间转换的功能。
    空间聚集函数
    在数据库中,聚集函数是一个执行某一属性列所有数据操作的函数。比如Sum和Average,Sum是求某一关系属性列的数据总和,Average则是求取某一关系属性列的数据平均值。与此对应,空间聚集函数也是执行相同的操作,不过操作的对象是空间数据。例如聚集函数Extent返回一系列要素中的最大的包裹矩形框,如“SELECT EXTENT(GEOM) FROM ROADS”这条SQL语句的执行结果是返回ROADS这个数据表中所有的包裹矩形框。
    栅格数据类型
    PostGIS通过一种新的数据类型片,提供对于大的栅格数据对象的存储。片由以下几个部分组成:包裹矩形框、SRID、类型和一个字节序列。通过将片的大小控制在数据库页值(32×32)以下,使得快速的随即访问变成可能。一般大的图片也是通过将其切成32×32像素的片然后再存储在数据库中的。
    PostGIS发展展望
    目前,由于“关系型数据库+空间数据引擎”的技术方案访问迅速、与GIS联系紧密的优点,在应用中占有一定的优势,但空间数据引擎独立于数据库内核,难以充分利用关系型数据库中各种成熟的数据管理、访问技术,成为进一步发展的致命弱点。另外,难以支持扩展SQL,不易实现数据共享与互操作等问题也逐渐暴露出来。
    尽管面向对象空间数据库管理系统最适应于空间数据的表达和管理,不仅支持变长记录,而且支持对象的嵌套、信息的继承与聚集。有关面向对象数据库管理系统的研究已有十多年了,由于缺乏良好的数据基础,在访问速度尚未有重大突破,难以发展成熟,据估计在较长一段时间内面向对象数据库管理系统都不会替代对象关系型数据库管理系统
    扩展对象关系型数据库管理系统无疑将成为以后的发展方向。尽管目前PostGIS/PostgreSQL和Spatial Oracle的性能与ArcSDE仍有一定的差距,但是随着数据库厂商对空间数据管理市场的不断重视、结构化数据管理方式与空间数据管理方式的进一步融合、数据压缩传输技术的不断提高,基于数据库管理系统的空间扩展方式将会不断的完善,成为今后管理空间数据的主流技术。而多数GIS厂商则应将精力集中到空间分析、空间模型等方面,从而形成较好的社会分工结构。
    目前,软件开源已经成为IT界的一种发展趋势,越来越多的软件加入到开源系统中。PostGIS不论在功能还是扩展性方面都不落后于商业GIS平台的空间数据库,而且由于其源代码的公开性,更加容易吸引广大爱好者参与到PostGIS的开发中,不断完善现有的功能同时进一步扩展新的特性,相信PostGIS的发展前景将会非常美好。
    展开全文
  • PostGIS教程一:PostGIS介绍

    万次阅读 多人点赞 2018-12-22 22:12:46
    PostGIS是一个空间数据库,Oracle Spatial和SQL Server(2008和之后版本)也是空间数据库。 但是这意味着什么?是什么使普通数据库变成空间数据库? 简短的答案是... 空间数据库像存储和操作数据库中其他任何...

    本教程将在我的知乎专栏持续更新:https://www.zhihu.com/people/li-yang-qiao-89/columns

    一、什么是空间数据库

        PostGIS是一个空间数据库Oracle SpatialSQL Server(2008和之后版本)也是空间数据库

        但是这意味着什么?是什么使普通数据库变成空间数据库

        简短的答案是...

        空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象

        下面简短介绍了空间数据库的发展,然后回顾了将空间数据与数据库关联起来的三个方面:数据类型索引函数

    • 空间数据类型用于指定图形为point)、线line)和polygon
    • 多维度空间索引被用于进行空间操作的高效处理
    • 空间函数构建于SQL语言中,用于空间属性和空间关系的查询

        空间数据类型空间索引空间函数组合在一起,提供了灵活的结构用于优化性能和分析。

    1.1、开端

        在传统的第一代地理信息系统GIS)实现中,所有的空间数据都存储在平面文件中,需要专门的GIS软件来解释和操作这些数据。

        这些第一代管理系统旨在满足用户的需求,其中所有所需的数据都在用户的组织领域中。

        它们是专为处理空间数据而构建的专有的、独立的系统。

        第二代空间系统将一些数据存储在关系数据库(RDBMS)中(通常是“属性”或非空间部分),但仍然缺乏直接集成所具有的灵活性。

        真正的空间数据库诞生于人们开始把空间特征当作第一级数据库对象的时候

        空间数据库空间数据对象关系数据库(Object Relational database)完全集成在一起实现从以GIS为中心向以数据库为中心的转变

    _images/beginning.png

                                                  空间数据存储的体系架构的发展

        从上图可以看出,有了空间数据库之后,就不再需要专门的GIS数据引擎(GIS Data Engine)去处理和操纵空间数据了,应用程序只需要通过SQL语言就能轻松地操纵空间数据。

        说明空间数据库管理系统也可用于地理信息以外的应用。例如,空间数据库可以用于管理与人体解剖、大规模集成电路、分子结构和电磁场等相关的数据。

    1.2、空间数据类型

        普通数据库拥有字符串string)、数值number)和日期date)这些数据类型,空间数据库添加了额外的数据类型(空间数据类型)以用于表达地理特征geographic features)。

        这些空间数据类型抽象并封装了诸如边界boundary)和维度dimension)等空间结构。

        在许多方面,空间数据类型可以简单的理解为形状shape

    _images/hierarchy.png

                                               空间数据类型组织结构图

        空间数据类型按类型层次结构组织。每个子类型继承其父类型的结构(属性)和行为(方法或函数)。

    1.3、空间索引和边界框(bounding box)

        普通数据库提供索引机制以允许对数据子集进行快速、随机地访问。

        标准的数据类型(numberstringdate)的索引通常是B-tree索引(B树索引),B树索引使用自然排序顺序(natural sort order)对数据进行分区,以便将数据放入分层树中。

        数字字符串日期的自然排序顺序很容易确定 —— 每个值都小于、大于或等于其他值。

        但是由于多边形Polygon)可以重叠,可以相互包含,并且可以排列在二维(或更多维数)空间中,因此无法使用B树索引有效地索引它们。

        空间数据库提供了一个“空间索引spatial index)”,它回答了“哪些对象在这个特定的边界框内?”这个问题。

        边界框bounding box)是平行于坐标轴且包含给定地理要素feature)的最小的矩形。

    _images/boundingbox.png

                              边界框示例

        使用边界框是为了判断”A被包含在B中吗?"这个问题,对多边形进行计算,计算量非常大而且难以计算,但在计算矩形的情况下,计算比较容易,而且速度非常快。

        即使是最复杂的多边形和线串(LineString)也可以用一个简单的边界框来表示。

        索引必须快速执行才能起到理想的作用。因此,空间索引不像B树索引那样提供精确的结果,而是提供近似的结果

        "多边形内部包含哪些线段“将由空间索引解释为”这个多边形边界框内部包含哪些线段边界框

        各种数据库实际实现的空间索引差异很大,最常见的实现是R-tree(在PostGIS中使用),但在其他空间数据库中也有基于四叉树Quadtrees)的实现和基于网格的索引grid-based indexes)的实现。

    1.4、空间函数

        关于查询的数据操作,普通数据库提供的函数功能包括连接字符串、对字符串执行哈希操作、对数值进行数学运算以及从日期中提取信息等。

        空间数据库为分析几何信息、确定空间关系和操作几何图形提供了一套完整的空间函数。

        空间函数中的大部分可以被归纳为以下五类:

    • 转换    ——    在geometry(PostGIS中存储空间信息的格式)和外部数据格式之间进行转换的函数
    • 管理    ——    管理关于空间表和PostGIS组织的信息的函数
    • 检索    ——    检索几何图形的属性和空间信息测量的函数
    • 比较    ——    比较两种几何图形的空间关系的函数
    • 生成    ——    基于其他几何图形生成新图形的函数

        函数列表可能非常长,OGC   SFSQL定义了一组通用空间函数规范,PostGIS实现了这些规范(并另外实现了其他有用的空间函数)。

    二、PostGIS是什么?

        PostGIS通过向PostgreSQL添加对空间数据类型空间索引空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库

        因为PostGIS是建立在PostgreSQL之上的,所以PostGIS自动继承了重要的"企业级"特性以及开放源代码的标准。

        可以说PostGIS仅仅只是PostgreSQL的一个插件,但是它将PostgreSQL变成了一个强大的空间数据库!

    2.1、什么是PostgreSQL呢?

        PostgreSQL是一个强大的对象关系数据库管理系统(ORDBMS)。

        它是在BSD风格的许可下发布的,因此是自由和开放源代码的软件

        和许多其他开源程序一样,PostgreSQL不是由任何一家公司控制、运维的,而是有一个由众多开发人员和公司组成的全球社区来开发它。

        PostgreSQL从一开始就考虑到类型扩展 —— 能够在运行时添加新的数据类型、函数和访问方法的机制。

        正因为如此,PostGIS扩展可以由单独的开发团队开发,但仍然可以非常紧密地集成到PostgreSQL数据库中。

    2.1.1、为什么选择PostgreSQL?

        熟悉开源数据库的人提出的一个常见问题是:“为什么PostGIS不是基于MySQL构建的?”

    u=1134557667,2101851202&fm=26&gp=0.jpguploading.4e448015.gif转存失败重新上传取消

                                       MySQL和PostgreSQL

        PostgreSQL的特点:

    • 被证明的默认情况下的强大的可靠性事务完整性ACID
    • 严谨地支持SQL标准(完整SQL92)
    • 可插、拔的类型扩展功能扩展
    • 面向社区的发展模式(开源)
    • 不限制列大小(可用元组)以支持大型GIS对象
    • 通用索引结构(Generic Index Structure - GIST)允许R-Tree索引
    • 易于添加自定义功能

        这些因素结合在一起,PostgreSQL提供了一条非常简单的开发路径来添加新的空间类型

        在“闭源的世界”中,只有Illustra(现在的 Infomix Universal Server)允许这么容易的扩展。

        这并不是巧合,Illustra是80年代以来对原始PostgreSQL代码库的专有改造。

        因为将类型添加到PostgreSQL的开发路径非常简单,所以使用PostgreSQL是正确的。

        当MySQL在版本4.1中发布基本空间数据类型时,PostGIS团队查看了它们的代码,这坚定了最初使用PostgreSQL的决定。

        因为MySQL空间对象必须作为一种特殊情况被强行添加在字符串类型的顶部,所以MySQL代码分散在整个代码库中。

        PostGIS 0.1的开发花费了不到一个月的时间,但做一个“MyGIS" 0.1可能需要更长的时间,可能永远也不会成功。

    2.2、为什么不是Shapefiles?

        自GIS软件被首次编写以来,Shapefile(和其他文件格式)一直是空间数据的存储和交互的标准方式。

        但是,这些平面文件有以下缺点:

    • 文件需要特殊的应用程序才能读写    ——    SQL是对随机数据访问和分析的抽象。如果没有这种抽象,你将需要自己编写所有的访问和分析数据的代码
    • 并发操作可能导致损坏数据    ——    虽然可以编写额外的代码以确保对同一文件的多次写入不会损坏数据,但当你解决了问题并同时解决了相关性能问题时,你已经编写了数据库系统的较好部分。那为什么不直接使用标准数据库呢?
    • 复杂的问题需要复杂的应用程序来回答    ——    复杂而有趣的空间分析问题(空间连接、聚合等)可以在数据库中使用一行SQL代码来表达,但是在对文件进行编程时,需要数百行专门的代码来解决。

        大多数PostGIS用户都在建立多个应用程序访问数据的系统,因此,使用标准的SQL访问方法可以简化部署和开发。

        有些用户正在处理大型数据集,如果使用文件存储,它们可能被分成多个文件;但在数据库中,它们可以存储在单个大的二维表中。

        总之,对多个用户的支持,复杂的即时查询和对于大型数据集的高性能表现,是空间数据库文件系统的优越之处。

    2.3、PostGIS简史

        2001年5月,Refractions Research 发布了第一版PostGISPostGIS 0.1具有空间对象、空间索引和一些空间函数。结果是PostGIS 0.1是一个适合存储和检索的数据库,但不适合分析。

        随着空间函数数量的增加,相关标准化组织的需求变得明确。开放地理空间联盟OGC)的“Simple Features for SQL”(SFSQL)规范提供了函数命名和要求的指导性原则。

        在接下来的几年中,PostGIS函数的数量有所增加,但其功能仍然有限。许多有趣的函数(如ST_Intersects()ST_Buffer()ST_Union())都很难编写,从头开始写这些函数花费了几年时间。

        幸运的是,第二个项目”Geometry Engine, Open Source“ (GEOS)出现了,GEOS库为实现SFSQL规范提供了必要的算法。通过结合GEOSPostGIS0.8版中提供了对SFSQL的完整支持。

        随着PostGIS数据容量的增长,另一个问题浮出水面:用于存储几何图形的描述(元数据)被证明效率相对较低。对于像点和短线这样的小对象,表示中的元数据占据了多达300%的开销。出于性能方面的考虑,有必要对描述进行缩减。通过缩减元数据头和所需的维度,大大减少了开销。在PostGIS 1.0中,这种新的、更快的、轻量级的描述成为了默认的描述。

        PostGIS最新的更新致力于提高对于标准的遵从性,增加了对ISO SQL/MM标准中制定的基于曲线的几何图形和函数签名的支持。

        因为继续注重性能,PostGIS 1.4大大提高了几何图形测试例程的速度。

    2.4、谁使用PostGIS?

        有关案例研究的完整列表,请参阅PostGIS案例研究页面。
    2.4.1、法国国家地理研究所

        法国国家地理研究所Institut Geographique National, France —— IGN)是法国的国家制图机构,利用PostGIS存储该国的高分辨率地形图“BDUni"。

        “BDUni"有1亿多个地理要素,由100多名专业工作人员维护,他们每天核实观察的结果并向数据库添加新的地图。

        IGN安装使用数据库事务系统来确保更新过程中的一致性,并使用热备用系统warm standby system)在系统故障时保持正常运行。 

    2.4.2、GlobeXplorer

        GlobeXplorer是一家基于Web提供全球卫星和航空图像千兆字节在线访问的服务商。

        GlobeXplorer使用PostGIS管理与图像目录相关的元数据,因此,图像查询首先搜索PostGIS目录以查找相关图像的位置,然后从存储中提取图像并将其返回给客户端。

        在构建他们的系统时,GlobeXplorer尝试了其他的空间数据库,但是由于PostGIS所提供的价格和性能的巨大优势,最终选择了PostGIS

    2.5、什么应用程序支持PostGIS?

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

        支持PostGIS的程序包括服务器端和桌面端的开源软件和闭源软件。

        下表列出了一些使用或支持PostGIS的软件:

        

     

     

    展开全文
  • 文章主要介绍了PostGIS的概念、特点、简史、谁会使用PostGIS等,希望对您有帮助。 本文来自CSDN,由火龙果软件Linda编辑、推荐。
  • postgis空间函数说明

    万次阅读 2019-06-28 11:30:54
    PostGIS的具体函数详细了解以及用法例子可以到官网查看:http://postgis.net/docs/reference.html 1.OGC标准函数 管理函数: 添加几何字段 AddGeometryColumn(, , , , , ) 删除几何字段 DropGeometryColumn(, , ) ...

    微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

    PostGIS的具体函数详细了解以及用法例子可以到官网查看: http://postgis.net/docs/reference.html

    1.OGC标准函数

    管理函数: 

    添加几何字段 AddGeometryColumn(, , , , , ) 
    删除几何字段 DropGeometryColumn(, , ) 
    检查数据库几何字段并在geometry_columns中归档 Probe_Geometry_Columns() 
    给几何对象设置空间参考(在通过一个范围做空间查询时常用) ST_SetSRID(geometry, integer)

    几何对象关系函数 :

    获取两个几何对象间的距离 ST_Distance(geometry, geometry) 
    如果两个几何对象间距离在给定值范围内,则返回TRUE ST_DWithin(geometry, geometry, float) 

    判断两个几何对象是否相等 
    (比如LINESTRING(0 0, 2 2)和LINESTRING(0 0, 1 1, 2 2)是相同的几何对象) ST_Equals(geometry, geometry) 
    判断两个几何对象是否分离 ST_Disjoint(geometry, geometry) 
    判断两个几何对象是否相交 ST_Intersects(geometry, geometry) 
    判断两个几何对象的边缘是否接触 ST_Touches(geometry, geometry) 
    判断两个几何对象是否互相穿过 ST_Crosses(geometry, geometry) 
    判断A是否被B包含 ST_Within(geometry A, geometry B) 
    判断两个几何对象是否是重叠 ST_Overlaps(geometry, geometry) 
    判断A是否包含B ST_Contains(geometry A, geometry B) 
    判断A是否覆盖 B ST_Covers(geometry A, geometry B) 
    判断A是否被B所覆盖 ST_CoveredBy(geometry A, geometry B) 
    通过DE-9IM 矩阵判断两个几何对象的关系是否成立 ST_Relate(geometry, geometry, intersectionPatternMatrix) 
    获得两个几何对象的关系(DE-9IM矩阵) ST_Relate(geometry, geometry)

    几何对象处理函数: 

    获取几何对象的中心 ST_Centroid(geometry) 
    面积量测 ST_Area(geometry) 
    长度量测 ST_Length(geometry) 
    返回曲面上的一个点 ST_PointOnSurface(geometry) 
    获取边界 ST_Boundary(geometry) 
    获取缓冲后的几何对象 ST_Buffer(geometry, double, [integer]) 
    获取多几何对象的外接对象 ST_ConvexHull(geometry) 
    获取两个几何对象相交的部分 ST_Intersection(geometry, geometry) 
    将经度小于0的值加360使所有经度值在0-360间 ST_Shift_Longitude(geometry) 
    获取两个几何对象不相交的部分(A、B可互换) ST_SymDifference(geometry A, geometry B) 
    从A去除和B相交的部分后返回 ST_Difference(geometry A, geometry B) 
    返回两个几何对象的合并结果 ST_Union(geometry, geometry) 
    返回一系列几何对象的合并结果 ST_Union(geometry set) 
    用较少的内存和较长的时间完成合并操作,结果和ST_Union相同 ST_MemUnion(geometry set)

    几何对象存取函数:

    获取几何对象的WKT描述 ST_AsText(geometry) 
    获取几何对象的WKB描述 ST_AsBinary(geometry) 
    获取几何对象的空间参考ID ST_SRID(geometry) 
    获取几何对象的维数 ST_Dimension(geometry) 
    获取几何对象的边界范围 ST_Envelope(geometry) 
    判断几何对象是否为空 ST_IsEmpty(geometry) 
    判断几何对象是否不包含特殊点(比如自相交) ST_IsSimple(geometry) 
    判断几何对象是否闭合 ST_IsClosed(geometry) 
    判断曲线是否闭合并且不包含特殊点 ST_IsRing(geometry) 
    获取多几何对象中的对象个数 ST_NumGeometries(geometry) 
    获取多几何对象中第N个对象 ST_GeometryN(geometry,int) 
    获取几何对象中的点个数 ST_NumPoints(geometry) 
    获取几何对象的第N个点 ST_PointN(geometry,integer) 
    获取多边形的外边缘 ST_ExteriorRing(geometry) 
    获取多边形内边界个数 ST_NumInteriorRings(geometry) 
    同上 ST_NumInteriorRing(geometry) 
    获取多边形的第N个内边界 ST_InteriorRingN(geometry,integer) 
    获取线的终点 ST_EndPoint(geometry) 
    获取线的起始点 ST_StartPoint(geometry) 
    获取几何对象的类型 GeometryType(geometry) 
    类似上,但是不检查M值,即POINTM对象会被判断为point ST_GeometryType(geometry) 
    获取点的X坐标 ST_X(geometry) 
    获取点的Y坐标 ST_Y(geometry) 
    获取点的Z坐标 ST_Z(geometry) 
    获取点的M值 ST_M(geometry)

    几何对象构造函数 : 

    参考语义: 
    Text:WKT 
    WKB:WKB 
    Geom:Geometry 
    M:Multi 
    Bd:BuildArea 
    Coll:Collection ST_GeomFromText(text,[])

    ST_PointFromText(text,[]) 
    ST_LineFromText(text,[]) 
    ST_LinestringFromText(text,[]) 
    ST_PolyFromText(text,[]) 
    ST_PolygonFromText(text,[]) 
    ST_MPointFromText(text,[]) 
    ST_MLineFromText(text,[]) 
    ST_MPolyFromText(text,[]) 
    ST_GeomCollFromText(text,[]) 
    ST_GeomFromWKB(bytea,[]) 
    ST_GeometryFromWKB(bytea,[]) 
    ST_PointFromWKB(bytea,[]) 
    ST_LineFromWKB(bytea,[]) 
    ST_LinestringFromWKB(bytea,[]) 
    ST_PolyFromWKB(bytea,[]) 
    ST_PolygonFromWKB(bytea,[]) 
    ST_MPointFromWKB(bytea,[]) 
    ST_MLineFromWKB(bytea,[]) 
    ST_MPolyFromWKB(bytea,[]) 
    ST_GeomCollFromWKB(bytea,[]) 
    ST_BdPolyFromText(text WKT, integer SRID)

    ST_BdMPolyFromText(text WKT, integer SRID)

    2. PostGIS扩展函数

    管理函数:

    删除一个空间表(包括geometry_columns中的记录) DropGeometryTable([], ) 
    更新空间表的空间参考 UpdateGeometrySRID([], , , ) 
    更新空间表的统计信息 update_geometry_stats([, ])

    参考语义: 

    Geos:GEOS库 
    Jts:JTS库 
    Proj:PROJ4库 postgis_version()

    postgis_lib_version() 
    postgis_lib_build_date() 
    postgis_script_build_date() 
    postgis_scripts_installed() 
    postgis_scripts_released() 
    postgis_geos_version() 
    postgis_jts_version() 
    postgis_proj_version() 
    postgis_uses_stats() 
    postgis_full_version()

    几何操作符:

    A范围=B范围 A = B 
    A范围覆盖B范围或A范围在B范围左侧 A &<> B 
    A范围在B范围左侧 A <<>> B 
    A范围覆盖B范围或A范围在B范围下方 A &<| B A范围覆盖B范围或A范围在B范围上方 A |&> B 
    A范围在B范围下方 A <<| B A范围在B范围上方 A |>> B 
    A=B A ~= B 
    A范围被B范围包含 A @ B 
    A范围包含B范围 A ~ B 
    A范围覆盖B范围 A && B

    几何量测函数:

    量测面积 ST_Area(geometry) 
    根据经纬度点计算在地球曲面上的距离,单位米,地球半径取值6370986米 ST_distance_sphere(point, point) 
    类似上,使用指定的地球椭球参数 ST_distance_spheroid(point, point, spheroid) 
    量测2D对象长度 ST_length2d(geometry) 
    量测3D对象长度 ST_length3d(geometry) 
    根据经纬度对象计算在地球曲面上的长度 ST_length_spheroid(geometry,spheroid) 
    ST_length3d_spheroid(geometry,spheroid) 
    量测两个对象间距离 ST_distance(geometry, geometry) 
    量测两条线之间的最大距离 ST_max_distance(linestring,linestring) 
    量测2D对象的周长 ST_perimeter(geometry) 
    ST_perimeter2d(geometry) 
    量测3D对象的周长 ST_perimeter3d(geometry) 
    量测两点构成的方位角,单位弧度 ST_azimuth(geometry, geometry)

    几何对象输出: 

    参考语义: 
    NDR:Little Endian 
    XDR:big-endian 
    HEXEWKB:Canonical 
    SVG:SVG 格式 
    GML:GML 格式 
    KML:KML 格式 
    GeoJson:GeoJson 格式

    ST_AsBinary(geometry,{‘NDR’|’XDR’}) 
    ST_AsEWKT(geometry) 
    ST_AsEWKB(geometry, {‘NDR’|’XDR’}) 
    ST_AsHEXEWKB(geometry, {‘NDR’|’XDR’}) 
    ST_AsSVG(geometry, [rel], [precision]) 
    ST_AsGML([version], geometry, [precision]) 
    ST_AsKML([version], geometry, [precision]) 
    ST_AsGeoJson([version], geometry, [precision], [options])

    几何对象创建:

    参考语义: 
    Dump:转储 ST_GeomFromEWKT(text)

    ST_GeomFromEWKB(bytea) 
    ST_MakePoint(, , [], []) 
    ST_MakePointM(, , ) 
    ST_MakeBox2D(, ) 
    ST_MakeBox3D(, ) 
    ST_MakeLine(geometry set) 
    ST_MakeLine(geometry, geometry) 
    ST_LineFromMultiPoint(multipoint) 
    ST_MakePolygon(linestring, [linestring[]]) 
    ST_BuildArea(geometry) 
    ST_Polygonize(geometry set) 
    ST_Collect(geometry set) 
    ST_Collect(geometry, geometry) 
    ST_Dump(geometry) 
    ST_DumpRings(geometry)

    几何对象编辑:

    给几何对象添加一个边界,会使查询速度加快 ST_AddBBOX(geometry) 
    删除几何对象的边界 ST_DropBBOX(geometry) 
    添加、删除、设置点 ST_AddPoint(linestring, point, []) 
    ST_RemovePoint(linestring, offset) 
    ST_SetPoint(linestring, N, point) 
    几何对象类型转换 ST_Force_collection(geometry) 
    ST_Force_2d(geometry) 
    ST_Force_3dz(geometry), ST_Force_3d(geometry), 
    ST_Force_3dm(geometry) 
    ST_Force_4d(geometry) 
    ST_Multi(geometry) 
    将几何对象转化到指定空间参考 ST_Transform(geometry,integer) 
    对3D几何对象作仿射变化 ST_Affine(geometry, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8) 
    对2D几何对象作仿射变化 ST_Affine(geometry, float8, float8, float8, float8, float8, float8) 
    对几何对象作偏移 ST_Translate(geometry, float8, float8, float8) 
    对几何对象作缩放 ST_Scale(geometry, float8, float8, float8) 
    对3D几何对象作旋转 ST_RotateZ(geometry, float8) 
    ST_RotateX(geometry, float8) 
    ST_RotateY(geometry, float8) 
    对2D对象作偏移和缩放 ST_TransScale(geometry, float8, float8, float8, float8) 
    反转 ST_Reverse(geometry) 
    转化到右手定则 ST_ForceRHR(geometry) 
    参考IsSimple函数 
    使用Douglas-Peuker算法 ST_Simplify(geometry, tolerance) 
    ST_SimplifyPreserveTopology(geometry, tolerance) 
    讲几何对象顶点捕捉到网格 ST_SnapToGrid(geometry, originX, originY, sizeX, sizeY) 
    ST_SnapToGrid(geometry, sizeX, sizeY), ST_SnapToGrid(geometry, size) 
    第二个参数为点,指定原点坐标 ST_SnapToGrid(geometry, geometry, sizeX, sizeY, sizeZ, sizeM) 
    分段 ST_Segmentize(geometry, maxlength) 
    合并为线 ST_LineMerge(geometry)

    线性参考:

    根据location(0-1)获得该位置的点 ST_line_interpolate_point(linestring, location) 
    获取一段线 ST_line_substring(linestring, start, end) 
    根据点获取location(0-1) ST_line_locate_point(LineString, Point) 
    根据量测值获得几何对象 ST_locate_along_measure(geometry, float8) 
    根据量测值区间获得几何对象集合 ST_locate_between_measures(geometry, float8, float8)

    杂项功能函数: 

    几何对象的摘要 ST_Summary(geometry) 
    几何对象的边界 ST_box2d(geometry) 
    ST_box3d(geometry) 
    多个几何对象的边界 ST_extent(geometry set) 
    0=2d, 1=3dm, 2=3dz, 3=4d ST_zmflag(geometry) 
    是否包含Bounding Box ST_HasBBOX(geometry) 
    几何对象的维数:2、3、4 ST_ndims(geometry) 
    子对象的个数 ST_nrings(geometry) 
    ST_npoints(geometry) 
    对象是否验证成功 ST_isvalid(geometry) 
    扩大几何对象 ST_expand(geometry, float) 
    计算一个空间表的边界范围 ST_estimated_extent([schema], table, geocolumn) 
    获得空间参考 ST_find_srid(, , ) 
    几何对象使用的内存大小,单位byte ST_mem_size(geometry) 
    点是否在圆上 ST_point_inside_circle(,,,) 
    获取边界的X、Y、Z ST_XMin(box3d) 
    ST_YMin(box3d) 
    ST_ZMin(box3d) 
    ST_XMax(box3d) 
    ST_YMax(box3d) 
    ST_ZMax(box3d) 
    构造一个几何对象的数组 ST_Accum(geometry set)

    长事务支持: 

    启用/关闭长事务支持,重复调用无副作用 EnableLongTransactions() 
    DisableLongTransactions() 
    检查对行的update和delete操作是否已授权 CheckAuth([], 
    , ) 
    锁定行 LockRow([], , , , []) 
    解锁行 UnlockRows() 
    在当前事务中添加授权ID AddAuth()

    展开全文
  • postgis函数

    2019-04-16 20:04:47
    postgis函数总结 postgis函数总结
  • postgis 资料

    2018-04-23 11:54:46
    postgis 文档 ,
  • postgis文档

    2017-04-26 17:10:22
    postgis文档
  • PostGIS相关

    2016-03-18 13:37:20
    PostGIS

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,495
精华内容 2,598
关键字:

postgis