精华内容
参与话题
问答
  • 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

    2012-08-28 16:20:42
    值此FOSS4G大会即将召开之日,最近我会在Blog上依次介绍一些OpenGIS标准、架构及用于实现的软件。一方面给初涉此行的朋友一个快速入门的概览,另一方面也是对我接触OpenGIS近一年来的总结。OpenGIS定义了一组基于...

    http://www.blogjava.net/sinoly/archive/2007/09/25/148002.html

    值此FOSS4G大会即将召开之日,最近我会在Blog上依次介绍一些OpenGIS标准、架构及用于实现的软件。一方面给初涉此行的朋友一个快速入门的概览,另一方面也是对我接触OpenGIS近一年来的总结。



    OpenGIS定义了一组基于数据的服务,而数据的基础是要素(Feature)。所谓要素简单地说就是一个独立的对象,在地图中可能表现为一个多边形建筑物,在数据库中即一个独立的条目。要素具有两个必要的组成部分,几何信息和属性信息。OpenGIS将几何信息分为点、边缘、面和几何集合四种:其中我们熟悉的线(Linestring)属于边缘的一个子类,而多边形(Polygon)是面的一个子类。也就是说OpenGIS定义的几何类型并不仅仅是我们常见的点、线、多边形三种,它提供了更复杂更详细的定义,增强了未来的可扩展性。另外,几何类型的设计中采用了组合模式(Composite),将几何集合(GeometryCollection)也定义为一种几何类型,类似地,要素集合(FeatureCollection)也是一种要素。属性信息没有做太大的限制,可以在实际应用中结合具体的实现进行设置。

    相同的几何类型、属性类型的组合成为要素类型(FeatureType),要素类型相同的要素可以被存放在一个数据源中。而一个数据源只能拥有一个要素类型。因此,可以用要素类型来描述一组属性相似的要素。在面向对象的模型中,完全可以把要素类型理解为一个类,而要素则是类的实例。

    通过GIS中间件可以从数据源中取出数据,供WMS服务器和WFS服务器使用。
    WMS服务器接收请求,根据请求内容的不同,可以返回不同格式的最终数据。例如,WMS可以返回常用图片格式的地图片段供最终用户阅读(类似Google Maps),其中地图是根据一个样式文件(SLD)生成的,它描述了地图的线划粗细,色彩等;WMS也可以返回GeoRSS和KML用来和其它地图服务互通。
    WFS服务器也可以接收请求,但WFS将返回GML格式的地理信息数据。GML是一种基于XML的数据格式,它可以完整的再现数据,也是OpenGIS数据源的重要形式。也就是说,WFS返回的GML可以继续作为数据源。在WFS请求中,OpenGIS定义了一个Filter标准,用来实现对数据的筛选,使WFS更加灵活。另一方面,WFS还支持通过WFS-t提交客户端对数据的修改。通俗地说,WMS是“只读”的,而WFS则是可以读写的。

    草草说完,发现自己的理解也十分有限,如有谬误,还望读者不吝指正。另外还有WCS方面不曾涉及,要获得更进一步的了解,请下载OpenGIS的标准进行阅读。 



    今天来说OpenGIS架构的软件、类库实现情况。OpenGIS是一个开放标准,不过它已经不仅仅在开源世界发挥作用,许多商业软件也支持了OpenGIS的标准。当然,这里所提到的软件全部都是开源软件。

    几何基础类库
    代表: JTS(Java), GEOS(C++), Shapely(Python)
    这类几何基础类库主要实现的是OpenGIS的Simple Feature Access标准,简单地说他们就是对几何类型(Geometry)进行了一定程度的封装。以JTS为例,它按照OpenGIS对于Geometry的描述实现了基于Java的接口和继承关系,制作好了可以使用的类似Point、LineString这样的类。另外这些类库还普遍实现了OpenGIS的DE-9IM空间位置关系判断和一些常用的计算几何方法(如缓冲(buffer))。
    此类软件是所有GIS类库的基础,正如几何是GIS的基础之一一样。

    数据源实现
    代表:PostGIS(PostgreSQL),MySQL Spatial
    数据源的实现主要是开源数据库的空间扩展。数据库的空间扩展不仅仅在数据表中支持几何类型的存储,而且更提供了SQL级别的集合关系判断,例如,可以直接利用SQL查询在某个多边形内的点。

    中间件
    代表:GeoTools(Java)
    中间件在系统中扮演连接数据和服务的角色。GeoTools承担了从各种数据源(如PostGIS,GML,Shapefile,WFS)读取数据并将数据标准化的工作。Feature接口就定义在GeoTools中,不同数据源的数据读出后被统一成包含一个Geometry成员(定义在JTS中)的Feature接口的实现。这样,进一步的操作只需面向Feature即可,省去了高层软件对于不同数据源的解读过程。另外,GeoTools还是OpenGIS标准的全面实现,其中包括Filter、坐标转换、GML。

    WMS/WFS服务器
    代表: GeoServer(Java),MapServer(PHP)
    地图服务器扮演向网络中的客户端提供地图服务的角色。这类地图服务器可以接收统一规范的WMS和WFS请求(request),返回多种格式的数据。这个过程有WMS/WFS规范的严格规定,所以,对客户端来说其地图服务器的实现究竟是什么并不会造成太大影响。这样的规范,为公共的、联合的地图服务创造了可能。

    客户端
    代表:OpenLayers/MapBuilder(JavaScript),uDig(Java),QGIS(C++)
    客户端分为浏览器和桌面客户端程序两种。以OpenLayers为代表的B/S系统客户端现在已经非常强大,它可以封装WMS请求,在浏览器上实现地图的切片载入功能。另外拖动、缩放都功能也非常完善,可以实现跨浏览器操作。最近的OpenLayers版本还支持了矢量编辑功能,可以通过WFS-t提交。而传统的桌面客户端程序功能则更加强大,支持多种包括WMS和WFS在内的数据源,另外编辑功能、操作性也要比浏览器中的强大。


    Shapefile
    ESRI的Shapefile格式是GIS矢量文件格式的事实标准,通常由.shp, .shx, .prj, .dbf等文件组成。OpenGIS的实现软件普遍支持Shapefile的读写。Shapefile在GeoServer中可以直接作为数据源,但是这种方式并不被推荐,原因很简单,基于文件的数据源可能造成性能不佳和数据丢失。

    GML
    GML是OpenGIS的标准规范之一,它基于xml描述地理数据。于Shapefile相比,xml更容易读写,易于在网络中以各种形式传播。同时,xml还具有可读性,人可以理解和辨识。GeoTools实现了GMLDataStore,因此在GeoServer中GML也可以直接作为数据源(需要下载GML扩展)。同时,GML的数据源为数据源动态化提供了实现的思路和可能性。

    PostGIS
    PostGIS是加拿大Refractions公司支持的开源项目,它为开源数据库PostgreSQL提供了空间支持。PostGIS安装后,PostgreSQL中出现一个模版数据库,新建空间数据库时只需以PostGIS为模版即可。PostGIS在SQL级别上实现了基本的空间运算功能。另外绝大多数开源GIS软件(即使是不严格遵守OpenGIS标准的)都支持PostGIS数据表的直接载入,读写等功能。毋庸置疑,PostGIS是OpenGIS数据源最佳实现。

    MySQL Spatial
    MySQL是开源数据库的大鳄,从MySQL4.0开始加入了Spatial扩展功能,实现了OpenGIS规定的几何数据类型,在SQL中的简单空间运算。但是从4.0之后到现在,MySQL的Spatial部分一直没有继续的更新和增强。加上早先MySQL在SQL上对空间运算支持的不完善(只支持基于最小外接矩形的关系判断),所以MySQL是开源数据源中一个不太让人满意的选择。不过由于MySQL在小型项目上的广泛引用,在一些情况下也是可以以MySQL为数据源的。

    db4o?: 对象数据库作为数据源的可能性
    OpenGIS的系统架构完全是基于一个面向对象的模型的,而传统的关系数据库、Shapefile文件是现在应用的主流。在地理描述的过程中,关系数据库的特性并没有被完全发挥,而为此还需要有中间件做ORM的工作。试想直接将FeatureType和Features以对象形式存入对象数据库,整个系统至少在理论上可以减少一层。不过,以对象数据库作为数据源,还需要对象数据库的性能进一步提升。而之后的和已有软件的对接应该不成问题,因为db4o可以直接存储Feature对象和Geometry对象。
    但是因此产生的数据对实现的依赖性又是一个问题:数据和实现紧密耦合,数据中捆绑了代码,虽然db4o号称支持Java和.NET的的互操作,但是对于其它实现来说又成了问题。从这个角度来说,对象数据库作为数据源是一种倒退。

    为什么没有KML?
    KML作为一种新的标准(没有在意最后是否通过),它的作用主要是网络中地理信息的传输。KML是一种面向客户端设计的数据形式,这是它不能取代GML地位的原因,同时也是它在GoogleEarth和很多地图应用上远强于GML的原因。对照一下KML和GML的形式就很容易理解,GML将属性数据存储为Element,而KML则是以超文本的形式存储属性数据,前者便于数据读取,后者便于客户端表现。于KML很类似的就是GeoRSS,效果是相似的。

    展开全文
  • postgis 资料

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

    2016-03-18 13:37:20
    PostGIS
  • PostGIS cookbook

    2018-04-23 14:49:49
    Create and manage spatial data with PostGIS Key Features Import and export geographic data from the PostGIS database using the available tools Maintain, optimize, and fine-tune spatial data for long-...
  • <div><p>I realized that while <code>postgis:12-2.5</code> initialization runs flawlessly, the same does not apply to <code>postgis:12-3.0</code>. Although the issue seems to reside in initdb-postgis....
  • postgis空间函数说明

    万次阅读 2019-06-28 11:30:54
    PostGIS的具体函数详细了解以及用法例子可以到官网查看:http://postgis.net/docs/reference.html 1.OGC标准函数 管理函数: 添加几何字段 AddGeometryColumn(, , , , , ) 删除几何字段 DropGeometryColumn(, , ) ...
  • m not able to install postgis, postgis_topology, postgis_tiger_geocoder this extensions. I use this database config: <pre><code> yaml development: adapter: postgis ... schema_search_path: '...

空空如也

1 2 3 4 5 ... 20
收藏数 5,896
精华内容 2,358
关键字:

postgis