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);

  

原文地址:https://www.cnblogs.com/CityLcf/p/10695621.html