WebGIS开源软件————PostGISPostgreSQL是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产品开发项目之一,有着非常广泛的用户。PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库1.PostGIS简介2.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返回一系列要素中的最大的包裹矩形框,如“SELECTEXTENT(GEOM)FROMROADS”这条SQL语句的执行结果是返回ROADS这个数据表中所有的包裹矩形框。⑸栅格数据类型PostGIS通过一种新的数据类型片,提供对于大的栅格数据对象的存储。片由以下几个部分组成:包裹矩形框、SRID、类型和一个字节序列。通过将片的大小控制在数据库页值(32×32)以下,使得快速的随即访问变成可能。一般大的图片也是通过将其切成32×32像素的片然后再存储在数据库中的3.PostGIS常用函数:1、ManagementFunctions基本操作函数①AddGeometryColumn(schema_name,table_name,column_name,srid,type,dimension)给一个已存在属性数据表增加一个几何字段(geomtrycolumn)。schema_name指表的模式的名字,srid必须是一个整数指对应于SPATIAL_REF_SYS表,type必须是一个大写的字符串,用来描述几何类型,例如:‘POLYGON’或者‘MULTILINESTRING’。②DropGeometryColumn(schema_name,table_name,column_name)从一个空间数据表中删除一个几何字段。③ST_SetSRID(geometry,integer)给一个几何对象(geometry)设置一个整型的SRID,对于在一个范围内的查询非常有用。3PostGIS提供如下空间信息服务功能PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。同时,PostGIS遵循OpenGIS的规范。⑴数据格式方面:PostGIS支持各种常用空间数据类型,包括:点(POINT)、线(LINESTRING)、多边形(POLYGON)、多点(MULTI_POINT)、多线(MULTI_LINESTRING)、多多边形(MULTI_POLYGON)和集合对象集(GEOMETRY_COLLECTION)等。在PostGIS中,使用文本表达方法WKT(WellKnownText)和二进制表达方法WKB(WellKnownBinary)表达不同的几何体类型,并由对象类型和构成对象的坐标两部分组成。⑵在PostGIS提供的空间操作中,基于OpenGIS的空间操作包括:字段处理函数、几何关系函数、几何分析函数和读写函数。除此之外,在OpenGIS基础上扩展的空间操作包括:空间索引创建、空间查询、网络地图服务、数据类型支持、量算函数、几何操作函数等扩展功能。除空间操作符之外,PostGIS提供了一系列用于检测空间对象关系的二元谓词(如Contains、Within、Overlaps),并返回布尔值来表征对象间符合关系。⑶在空间数据查询方面,PostGIS依照OGC的SimpleFeaturesforSQL1.1规范设计,同时,PostGIS也实现了ISO组织SQLMulti-media标准的绝大多数空间操作函数,并能够在SQL查询中实现常用的空间运算并获得返回结果。同时PostGIS支持空间聚集函数查询操作,以对某一属性列所有空间对象执行操作,如返回一系列要素的最大外包矩形框的聚集操作。⑷在空间索引方面,PostgreSQL目前支持B树索引、R树索引和通用搜索树GiST(GeneralizedSearchTrees)三种类型空间索引。B树索引主要用于顺序排列的一维数据,在存储空间数据的PostGIS上应用较少;R树索引将数据分成矩形、子矩形、子子矩形,适用于为二维空间数据建立索引;GiST索引是一种平衡,树状结构的访问方法,将数据划分成:一般数据、重叠数据和内部数据,并可在基础模版中实现多种索引模式。2.GeometryRelationshipFunctions几何空间数据关系函数⑴ST_Distance(geometry,geometry)返回两个几何对象的距离(笛卡儿距离),不使用索引。⑵ST_DWithid(geometry,geometry,float)如果一个几何对象(geometry)在另一个几何对象描述的距离(float)内,返回TRUE。如果有索引,会用到索引。⑶ST_Equals(geometry,geometry)如果两个空间对象相等,则返回TRUE。用这个函数比用“=”更好,例如:equals('LINESTRING(00,1010)','LINESTRING(00,55,1010)')返回TRUE。⑷ST_Disjoint(geometry,geometry)如果两个对象不相连,则返回TRUE。不要使用GeometryCollection作为参数。⑸ST_Intersects(geometry,geometry)判断两个几何空间数据是否相交,如果相交返回true,不要使用GeometryCollection作为参数。Intersects(g1,g2)--Not(Disjoint(g1,g2))不使用索引可以用_ST_Intersects.3,GeometryProcessingFunctions几何空间数据处理函数⑴ST_Centroid(geometry)返回质心点,就是根据几何空间数据,活动该几何空间数据的中心点,返回一个空间点数据.⑵ST_Area(geometry)如果几何空间数据为多边形,或者多多边形,则返回空间数据的外围(返回类型doubleprecision);⑶ST_Length(geometry)这个曲线在其相关的空间参考长度(返回类型doubleprecision);⑷ST_PointOnSurface(geometry)一定在几何空间线数据上的点,返回一个数据点⑸T_Envelope(geometry)这个函数可以返回mbr(空间最小外包矩形),传入参数可以是pointlinepolygon。⑹ST_extent(geometryset)这个函数可以对一个空间数据集进行操作,返回一个最小包含矩形(mbr).如:SELECTEXTENT(GEOM)FROMGEOMTABLEGROUPBYCATEGORY4、GeometryAccessors几何空间数据读写函数⑴ST_AsText(geometry)将几何空间数据,转换成容易理解的空间数据文本格式,例如:(0,00,11,11,00,0)转换后应该是这样的结果POLYGON(00,01,11,10,00)⑵ST_SRID(geometry)返回当前几何空间数据的SRID值⑶ST_IsClosed(geometry)判断几何空间数据是否是闭合,就是判断起始点和终点坐标是相同的,如果是相同的返回true,否则返回false.⑷ST_IsRing(geometry)这个函数参数的对象是line,判断起始点和终点坐标是否相同,如果闭合(这个曲线除了起始点和终点相同外,没有其他相交点)怎返回true,否则false,⑸ST_NumPoints(geometry)返回几何空间数据lineString上的第一条线上点的个数。⑹GeometryType(geometry)判断几何空间数据的类型。例如selectGeometryType(geomfromText('MULTILINESTRING((11,23,34,31,21,11),(12,23,45))'))返回的类型为MULTILINESTRING。4.PostGIS发展展望目前,由于“关系型数据库+空间数据引擎”的技术方案访问迅速、与GIS联系紧密的优点,在应用中占有一定的优势,但空间数据引擎独立于数据库内核,难以充分利用关系型数据库中各种成熟的数据管理、访问技术,成为进一步发展的致命弱点。另外,难以支持扩展SQL,不易实现数据共享与互操作等问题也逐渐暴露出来。尽管面向对象空间数据库管理系统最适应于空间数据的表达和管理,不仅支持变长记录,而且支持对象的嵌套、信息的继承与聚集。有关面向对象数据库管理系统的研究已有十多年了,由于缺乏良好的数据基础,在访问速度尚未有重大突破,难以发展成熟,据估计在较长一段时间内面向对象数据库管理系统都不会替代对象关系型数据库管理系统。扩展对象关系型数据库管理系统无疑将成为以后的发展方向。尽管目前PostGIS/PostgreSQL和SpatialOracle的性能与ArcSDE仍有一定的差距,但是随着数据库厂商对空间数据管理市场的不断重视、结构化数据管理方式与空间数据管理方式的进一步融合、数据压缩传输技术的不断提高,基于数据库管理系统的空间扩展方式将会不断的完善,成为今后管理空间数据的主流技术。而多数GIS厂商则应