记录一些常用的空间函数:
1、转换函数
在几何图形和外部数据格式之间进行转换的函数。
-- 将文本表示转换为几何类型
-- 结果:0101000000000000000000F03F000000000000F03F
SELECT st_geomfromtext('point(1 1)',0);
-- 将几何类型转换为文本表示
-- 结果:point(1 1)
SELECT st_astext('0101000000000000000000F03F000000000000F03F')
-- 将几何类型转为 GeoJson类型
-- 结果:{"type":"Point","coordinates":[1,1]}
SELECT st_asgeojson(st_geomfromtext('point(1 1)',4326))
-- 将几何类型从一个坐标系转换为另一个坐标系。
-- 结果:0101000020110F0000DB0B4ADA772DFB402B432E49D22DFB40
SELECT st_transform(st_geomfromtext('point(1 1)',4326), 3857)
2、检索函数
用于检索几何的属性和测量值的函数。
-- 查询几何的空间参考标识符号
-- 结果:4326
SELECT st_srid(st_geomfromtext('point(1 1)',4326))
-- 查询几何的类型
-- 结果:ST_Point
SELECT st_geometrytype(st_geomfromtext('point(1 1)',4326))
-- 返回几何的维数
-- 结果:2
SELECT st_ndims('0101000000000000000000F03F000000000000F03F')
-- 返回 x 和 y 坐标
SELECT st_x('0101000000000000000000F03F000000000000F03F')
SELECT st_y('0101000000000000000000F03F000000000000F03F')
-- 用于检查一个空间对象是否包含另一个空间对象
-- 结果:t (true)
SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
-- 下面几个函数都是类似的用法
-- ST_Contains: 检查一个空间对象是否包含另一个空间对象,如果第二个几何完全包含在第一个几何中,返回true。
-- ST_Within: 与ST_Contains 相反的结果,如果第一个几何完全在第二个几何内,返回true。
-- ST_Intersects: 检查两个空间对象是否相交。
-- ST_Touches: 检查两个空间对象是否相邻。
-- ST_Equals: 检查两个空间对象是否相等。
-- ST_Disjoint: 检查两个空间对象是否不相交。
PostGIS中有很多的函数,我们使用时可以参照官网使用 PostGIS函数。
也可以参考中文翻译的版本(翻译的不是很完整):翻译版本。
常用
-- 坐标系转换
SELECT ST_Transform('0101000020E6100000F8A0E8241E385D4061532BD5C3DD3740'::geometry, 4326)
参考文档:https://www.cnblogs.com/Snowclod/p/17484955.html