POSTGIS常用函数

Management Functions

1,基本操作函数


AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>)
给一个已存在属性数据表增加一个几何字段(geomtry column)。schema_name 指表的模式的名字,srid 必须是一个整数指对应于 SPATIAL_REF_SYS 表,type必须是一个大写的字符串,用来描述几何类型,例如:'POLYGON' 或者 'MULTILINESTRING'。

DropGeometryColumn(<schema_name>, <table_name>, <column_name>)
从一个空间数据表中删除一个几何字段。

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)') 返回 TRUE。

ST_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_Within

ST_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中,则返回 TRUE。

3,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 polygon。


ST_extent(geometry set)
这个函数可以对一个空间数据集进行操作,返回一个最小包含矩形(mbr).
如:SELECT EXTENT(GEOM) FROM GEOMTABLE GROUP BY CATEGORY


ST_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 Accessors

ST_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。


 

### PostGIS 空间函数概述 PostGIS 提供了大量的空间函数来支持地理空间数据分析和操作。这些函数可以分为几大类,包括但不限于几何构造、几何测量、几何关系判断、转换和其他辅助功能。 #### 几何构造函数 用于创建新的几何对象或修改现有几何对象: - `ST_Buffer(geometry geomA, float width)`:返回给定宽度的缓冲区多边形[^1]。 ```sql SELECT ST_Buffer(ST_GeomFromText('POINT(0 0)'), 5); ``` - `ST_ConvexHull(geometry geomA)`:返回输入几何体的凸包。 ```sql SELECT ST_ConvexHull(ST_Collect( ARRAY[ ST_GeometryFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))'), ST_GeometryFromText('POLYGON((5 5,7 5,7 7,5 7,5 5))') ] )); ``` #### 几何测量函数 提供关于几何属性的信息,如长度、面积等: - `ST_Length(geometry a_geom)`:返回线串或多线串的总长度。 ```sql SELECT ST_Length(ST_GeomFromText('LINESTRING(0 0, 1 1, 2 2)')); ``` - `ST_Area(geometry g)`:计算并返回多边形或多面体表面区域大小。 ```sql SELECT ST_Area(ST_Polygon(ST_MakeLine( ARRAY[ ST_Point(0, 0), ST_Point(0, 5), ST_Point(5, 5), ST_Point(5, 0), ST_Point(0, 0) ]), 0)); ``` #### 关系判断函数 评估两个几何图形之间的拓扑关系: - `ST_Intersects(geometry A, geometry B)`:如果两个几何形状相交则返回 true;否则 false。 ```sql SELECT ST_Intersects( ST_GeomFromText('LINESTRING (0 0 , 1 1)'), ST_GeomFromText('POINT (0.5 0.5)') ); ``` - `ST_Contains(geometry A, geometry B)`:测试集合论上的包含关系,即B完全位于A内部时返回true[^4]。 ```sql SELECT ST_Contains( ST_Polygon(ST_MakeLine( ARRAY[ ST_Point(0, 0), ST_Point(0, 5), ST_Point(5, 5), ST_Point(5, 0), ST_Point(0, 0) ]), 0), ST_Point(2, 2) ); ``` #### 投影变换及其他实用工具 允许用户在不同坐标参照系统之间转换数据,并执行其他常见任务: - `ST_Transform(geometry geomA, integer srid)`:将几何体从一种SRID转换到另一种指定的SRID。 ```sql SELECT ST_AsEWKT(ST_Transform( ST_SetSrid(ST_MakePoint(-71.060316, 48.432044), 4326), 900913 )); ``` 以上仅列举了一部分常用的空间函数,在实际开发过程中可能还会涉及到更多特定场景下的高级用法。对于更详尽的学习资料推荐查阅官方文档或者《PostGIS中文手册》以获取最新最全的知识体系[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值