您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > PostGIS空间查询语言特性
姓名:wujinbxxxPostGIS简介PostGIS特性PostGIS读写数据PostGIS查询语言PostGIS函数PostGIS扩展函数1986年,加州大学伯克利分校的MichaelStonebraker教授领导了Postgres的项目,它是PostgreSQL的前身。随后出现了PostGIS,PostGIS是对象-关系型数据库系统PostgreSQL的一个扩展,它的出现让人们开始重视基于数据库管理系统的空间扩展方式,而且使PostGIS有望成为今后管理空间数据的主流技术。在两大开源数据库产品的对比中,一般认为MySQL速度更快,所以得到更为广泛的使用;而PostgreSQL性能更为先进,PostgreSQL提供很多MySQL目前所不支持的特性,比如触发器、视图、存储过程等等,在记录数超千万之后性能表现尤其出色。PostGIS是对象关系型数据库系统PostgreSQL的一个扩展。PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。PostGIS遵循OpenGIS的规范。PostGIS的版权被纳入到GNU的GPL中,任何人可以自由得到PostGIS的源码并对其做研究和改进。支持OpenGIS中所有空间数据类型:点(POINT)、线(LINESTRING)、多边形(POLYGON)、多点(MULTIPOINT)、多线(MULTILINESTRING)、多多边形(MULTIPOLYGON)和集合对象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的对象表达方法,比如WKT和WKB。ExamplesofWKT:POINT(00)——点LINESTRING(00,11,12)——线POLYGON((00,40,44,04,00),(11,21,22,12,11))——面MULTIPOINT(00,12)——多点MULTILINESTRING((00,11,12),(23,32,54))——多线MULTIPOLYGON(((00,40,44,04,00),(11,21,22,12,11)),((-1-1,-1-2,-2-2,-2-1,-1-1)))——多面GEOMETRYCOLLECTION(POINT(23),LINESTRING((23,34)))——几何集合EWKT、EWKB和Canonical格式EWKT和EWKB相比OGCWKT和WKB格式主要的扩展有3DZ、3DM、4D坐标和内嵌空间参考支持。以下以EWKT语句定义了一些几何对象:POINT(000)——3D点SRID=32632;POINT(00)——内嵌空间参考的点POINTM(000)——带M值的点POINT(0000)——带M值的3D点SRID=4326;MULTIPOINTM(000,121)——内嵌空间参考的带M值的多点以下语句可以使用EWKT格式插入一个点要素到一个表中:INSERTINTOtable(SHAPE,NAME)VALUES(GeomFromEWKT('SRID=4326;POINTM(116.3939.910)'),'北京')Canonical格式是16进制编码的几何对象,直接用SQL语句查询出来的就是这种格式。SQL-MM格式:SQL-MM格式定义了一些插值曲线,这些插值曲线和EWKT有点类似,也支持3DZ、3DM、4D坐标,但是不支持嵌入空间参考。以下以SQL-MM语句定义了一些插值几何对象:CIRCULARSTRING(00,11,10)——插值圆弧COMPOUNDCURVE(CIRCULARSTRING(00,11,10),(10,01))——插值复合曲线CURVEPOLYGON(CIRCULARSTRING(00,40,44,04,00),(11,33,31,11))——曲线多边形MULTICURVE((00,55),CIRCULARSTRING(40,44,84))——多曲线MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(00,40,44,04,00),(11,33,31,11)),((1010,1412,1110,1010),(1111,11.511,1111.5,1111)))——多曲面读写PostGIS目前主要有以下四种方式:1.使用psql语言select*fromtest1;selectmyID,AsText(pt)fromtest1;selectDistance(pt,'POINT(00)')fromtest1;2.使用一些小工具有两个小的转换工具,一是shp2pg;一是ogr2ogr。3.在其他GIS软件中读写PostGIS数据比如在QGIS中,能够打开PostGIS图层,还有SPIT插件可以把Shape文件输入到PostGIS数据库中。4.利用接口在应用程序中读写PostGIS数据表的建立CreatingaSpatialTable在PostGIS中创建一个包含几何字段的空间表分为2步:第一步创建一个一般表,第二步给这个表添加几何字段。在test模式下创建一个名为cities的一般表:createtabletest.cities(idint4,namevarchar(20))再给cities添加一个名为shape的几何字段(二维点):selectAddGeometryColumn('test','cities','shape',4326,'POINT',2)LoadingGISDataRetrievingGISDataPostGIS中的空间索引数据库对多维数据的存取有两种索引方案,R-Tree和GiST(GeneralizedSearchTree),在PostgreSQL中的GiST比R-Tree的健壮性更好,因此PostGIS对空间数据的索引一般采用GiST实现。以下的语句给sde模式中的cities表添加了一个空间索引shape_index_cities,在pgAdmin中也可以通过图形界面完成相同的功能。CREATEINDEXshape_index_citiesONsde.citiesUSINGgist(shape);另外要注意的是,空间索引只有在进行基于边界范围的查询时才起作用,比如“&&”操作。ExamplesofSpatialSQL:1.Whatisthetotallengthofallroads,expressedinkilometers?SELECTsum(ST_Length(the_geom))/1000ASkm_roadsFROMbc_roads;km_roads------------------70842.1243039643(1row)ExamplesofSpatialSQL:2.Howlargeisthecityofxxx,inhectares?SELECTST_Area(the_geom)/10000AShectaresFROMbc_municipalityWHEREname=’xxx’;hectares------------------32657.9103824927(1row)PostGIS函数大致可以分为以下四类:字段处理函数AddGeometryColumn为已有的数据表增加一个地理几何数据字段;DropGeometryColumn删除一个地理数据字段的;SetSRID设置SRID值Probe_Geometry_Columns()检查数据库几何字段并在geometry_columns中归档PostGIS函数大致可以分为以下四类:几何关系函数目前共有13个,分别是:获取两个几何对象间的距离ST_Distance()判断两个几何对象是否相等ST_Equals()判断两个几何对象是否分离ST_Disjoint()判断两个几何对象是否相交ST_Intersects()判断两个几何对象的边缘是否接触ST_Touches()判断两个几何对象是否互相穿过ST_Crosses()判断A是否被B包含ST_Within()判断两个几何对象是否是重叠ST_Overlaps()判断A是否包含BST_Contains()判断A是否覆盖BST_Covers()判断A是否被B所覆盖ST_CoveredBy()通过DE-9IM矩阵判断两个几何对象的关系是否成立ST_Relate()获得两个几何对象的关系(DE-9IM矩阵)ST_Relate()PostGIS函数大致可以分为以下四类:◦几何分析函数这类函数目前共有12个,分别是:Centroid,Area,Lenth,PointOnSurface,Boundary,Buffer,ConvexHull,Intersection,SymDifference,Difference,GeomUnion,MemGeomUnion◦读写函数这类函数很多,主要是用于在各种数据类型之间的转换,尤其是在于Geometry数据类型与其他如字符型等数据类型之间的转换,函数名如AsText、GeomFromText等。管理函数:删除一个空间表(包括geometry_columns中的记录)DropGeometryTable([],)更新空间表的空间参考UpdateGeometrySRID([],,,)更新空间表的统计信息update_geometry_stats([,])几何对象创建:Dump:转储ST_GeomFromEWKT(text)ST_GeomFromEWKB(bytea)ST_MakePoint(,,[],[])ST_MakePointM(,,)ST_MakeBox2D(,)几何对象编辑:给几何对象添加一个边界,会使查询速度加快ST_AddBBOX(geometry)删除几何对象的边界ST_DropBBOX(geometry)添加、删除、设置点ST_AddPoint(linestring,point,[])线性参考:根据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(geometryset)0=2d,1=3dm,2=3dz,3=4dST_zmflag(geometry)是否包含BoundingBoxST_HasBBOX(geometry)几何对象的维数:2、3、4ST_ndims(geometry)子对象的个数ST_nrings(geometry)ST_npoints(geometry)对象是否验证成功ST_isvalid(geometry)扩大几何对象ST_expand(geometry,float)谢谢!
本文标题:PostGIS空间查询语言特性
链接地址:https://www.777doc.com/doc-4243834 .html