
postgis基本函数.doc
6页1,基本操作函数AddGeometryColumn(, , , , , )给一个已存在属性数据表增加一个几何字段(geomtry column)schema_name 指表的模式的名字,srid 必须是一个整数指对应于 SPATIAL_REF_SYS 表,type 必须是一个大写的字符串,用来描述几何类型,例如:'POLYGON' 或者 'MULTILINESTRING'DropGeometryColumn(, , )从一个空间数据表中删除一个几何字段ST_SetSRID(geometry, integer)给一个几何对象(geometry)设置一个整型的 SRID,对于在一个范围内的查询非常有用 2. Geometry Relationship Functions 几何空间数据关系函数 ST_Distance(geometry, geometry) 返回两个几何对象的距离(笛卡儿距离),不使用索引 ST_DWithid(geometry, geometry, float) 如果一个几何对象(geometry)在另一个几何对象描述的距离(float)内,返回 TRUE如果有索引,会用到索引。
ST_Equals(geometry, geometry)如果两个空间对象相等,则返回 TRUE用这个函数比用“=”更好,例如:equals('LINESTRING(0 0, 10 10)','LINESTRING(0 0, 5 5, 10 10)') 返回 TRUEST_Disjoint(geometry, geometry)如果两个对象不相连,则返回 TRUE不要使用 GeometryCollection 作为参数ST_Intersects(geometry, geometry)判断两个几何空间数据是否相交,如果相交返回 true,不要使用 GeometryCollection 作为参数Intersects(g1, g2 ) Not (Disjoint(g1, g2 ))不使用索引可以用_ST_Intersects.ST_Touches(geometry, geometry)如果两个几何空间对象存在接触,则返回 TRUE不要使用 GeometryCollection 作为参数a.Touches(b) -> (I(a) intersection I(b) = {empty set} ) and (a intersection b) not empty不使用索引可以用_ST_Touches.ST_Crosses(geometry, geometry)如果两个几何空间对象存在交叉,则返回 TRUE。
不要使用 GeometryCollection 作为参数不使用索引可以用_ST_Crosses.ST_Within(geometry A, geometry B)如果几何空间对象 A 存在空间对象 B 中,则返回 TRUE,不要使用 GeometryCollection 作为参数不使用索引可以用_ST_WithinST_Overlaps(geometry, geometry)如果两个几何空间数据存在交迭,则返回 TRUE,不要使用 GeometryCollection 作为参数不使用索引可以用_ST_Overlaps.ST_Contains(geometry A, geometry B)如果几何空间对象 A 包含空间对象 B,则返回 TRUE,不要使用 GeometryCollection 作为参数这个函数类似于 ST_Within(geometry B, geometry A)不使用索引可以用_ST_Contains.ST_Covers(geometry A, geometry B)如果几何空间对象 B 中的所有点都在空间对象 A 中,则返回 TRUE不要使用 GeometryCollection 作为参数。
不使用索引可以用_ST_Covers.ST_CoveredBy(geometry A, geometry B)如果几何空间对象 A 中的所有点都在空间对象 B 中,则返回 TRUE3,Geometry Processing Functions几何空间数据处理函数ST_Centroid(geometry)返回质心点,就是根据几何空间数据 ,活动该几何空间数据的中心点 ,返回一个空间点数据.ST_Area(geometry)如果几何空间数据为多边形,或者多多边形, 则返回空间数据的外围 (返回类型 double precision) ;ST_Length(geometry)这个曲线在其相关的空间参考长度(返回类型 double precision) ;ST_PointOnSurface(geometry)一定在几何空间线数据上的点,返回一个数据点ST_Buffer(geometry, double, [integer])buffer 操作一个很有用函数,这个函数的第一个参数是要操作的空间几何数据,第二个参数长度(距离),第三个参数为一个整型,这个函数返回一个空间数据类型,以当前第一个参数空间几何数据为参考点,返回小于等于距离的空间几何数据点,最后由这些点组成一个多边形空间数据,最后一个参数表示在组成一个 1/4 圆的有几个点分隔。
也就是说如果最好一个参数为 8 那么这个最后组成的多边形就是 32 边的多边形,如果不指定这个参数,系统默认的是 8注意:第二个参数,距离它的单位为空间数据单位(度),在运算时需要进行单位换算,最后转换成度,单位的换算关系如下:1 英里= 63360 米1 米=1/1852 海里1 海里= 1/60 度如果要进行具体的运算,需要进行一下单位换算,比如要求一个 500 米的范围,那么应该是500*1/1852*1/60(度)ST_Envelope(geometry)这个函数可以返回 mbr(空间最小外包矩形 ),传入参数可以是 point line polygonST_extent(geometry set)这个函数可以对一个空间数据集进行操作,返回一个最小包含矩形(mbr).如:SELECT EXTENT(GEOM) FROM GEOMTABLE GROUP BY CATEGORYST_Difference(geometry A, geometry B)返回一个几何空间数据 A 不同于空间数据 B 的几何空间数据类型,不要使用GeometryCollection 作为参数也就是说,如果 A 为一个 line,B 也为一个 line,那么他们返回的类型就是 B 把 A 分割的多线。
如:select ST_AsEWKT(ST_Difference(geomfromText('LINESTRING(1 1,2 3,3 4,3 1)'),geomfromText('LINESTRING(2 0,2 2,5 2,3 1)')))返回的 MULTILINESTRING((1 1,2 3,3 4,3 2),(3 2,3 1))如果是 A 和 B 都是一个 POLYGON 多边形,那么返回的就是多多边形,如果相交,那么返回的就是 B 把 A 分割,并且不再 B 中的多多边形select ST_AsEWKT(ST_Difference(geomfromText('POLYGON((1 1,2 3,3 4,3 1,1 1))'),geomfromText('POLYGON((2 0,2 2,5 2,1 3,2 0))')))ST_Union(geometry, geometry)返回一个合并的几何空间数据,将两个几何空间数据合并为一个几何空间数据,或者GeometryCollection,不要使用 GeometryCollection 作为参数4 ,Geometry AccessorsST_AsText(geometry)将几何空间数据,转换成容易理解的空间数据文本格式,例如:(0,0 0,1 1,1 1,0 0,0)转换后应该是这样的结果 POLYGON(0 0,0 1,1 1,1 0,0 0)ST_SRID(geometry)返回当前几何空间数据的 SRID 值ST_IsClosed(geometry)判断几何空间数据是否是闭合,就是判断起始点和终点坐标是相同的,如果是相同的返回true,否则返回 false.ST_IsRing(geometry)这个函数参数的对象是 line,判断起始点和终点坐标是否相同,如果闭合(这个曲线除了起始点和终点相同外,没有其他相交点) 怎返回 true,否则 false,ST_NumPoints(geometry)返回几何空间数据 lineString 上的第一条线上点的个数。
GeometryType(geometry)判断几何空间数据的类型例如select GeometryType(geomfromText('MULTILINESTRING((1 1,2 3,3 4,3 1,2 1,1 1),(1 2,2 3,4 5))'))返回的类型为 MULTILINESTRING。
