postgresql 空间函数 随笔

时间:2023-03-10 02:16:46
postgresql 空间函数 随笔

1. 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(度)

2.获取字段类型

QString sql2 = QStringLiteral("select format_type(a.atttypid, a.atttypmod) as fldType, "
"a.attname as fldName from pg_attribute a, pg_stat_user_tables b "
"where b.relname = '%1' and b.schemaname = '%2' "
" and a.attrelid = b.relid and a.attnum > 0"
).arg(tbName, schemaName);

3.获取字段长度精度等

QString sql1 = QStringLiteral("select ordinal_position as fldIndex, column_name as fldName, "
" coalesce(character_maximum_length, numeric_precision, -1) as fldLen,"
" numeric_scale as decimalLen, is_nullable as nullable from information_schema.columns a "
" where a.table_schema = '%1' and a.table_name = '%2' "
).arg(schemaName, tbName);

 4.更改字段类型 

比如说char的值为1.1 想更改为int  那需要强制转换,这时候可以用到using

alter table 表 alter 字段 type int using 字段::int;

 5.获取表的tableoid

"SELECT regclass(public."TblName")::oid as clsid";

6.更改表的srid

ALTER TABLE table  ALTER COLUMN geom TYPE geometry(Point,4326)

UPDATE table SET geom=ST_SetSRID(geom,4326);