当前位置:网站首页>金仓数据库 KingbaseGIS 使用手册(6.2. 管理函数)
金仓数据库 KingbaseGIS 使用手册(6.2. 管理函数)
2022-08-09 22:11:00 【沉舟侧畔千帆过_】
6.2. 管理函数
6.2.1. AddGeometryColumn
AddGeometryColumn—添加一个几何类型的列到一个已经存在的表中。默认使用类型修改器来定义字段而不是约束器。可以传递一个false逻辑值给use_typmod参数来获取基于老的约束条件方式。
用法
text AddGeometryColumn(varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true); text AddGeometryColumn(varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true); text AddGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);
描述
添加一个几何类型的列到一个已知的表中。schema_name就是表的schema_name。 SRID必须是KGIS插件的系统表SPATIAL_REF_SYS中存在的整型值。如果schema_name不存在或者在当前search_path值不可见,具体的SRID、geometry类型或维度值无效,都会抛出异常。
相关参考
DropGeometryColumn, DropGeometryTable, `关于几何类型列的视图`_, `手动在geometry_columns表中注册几何数据类型列`_
6.2.2. DropGeometryColumn
DropGeometryColumn — 从一个空间表中删除一个几何类型的列。
用法:
text DropGeometryColumn(varchar table_name, varchar column_name); text DropGeometryColumn(varchar schema_name, varchar table_name, varchar column_name); text DropGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name);
描述
从一个空间表中删除一个几何类型的列。注意schema_name是需要的,为了匹配geometry_columns表的几何类型列。
注意
一个数据库可以有多个schema,为了精确表达一个字段,正确的方式是:schema_name.table_name.column_name 。
该方法实现了OpenGIS 关于SQL 1.1的简单特性实现规范 OpenGIS Simple Features Implementation Specification for SQL 1.1.
这个函数支持3D对象,并且不会删除z坐标。
该方法支持CircularString和curve几何类型字段
注意
既然geometry_columns是一个依赖于system catalog数据信息的视图,因此可以使用ALTER TABLE这种语法像其他一般类型表的列一样删除一个带有几何类型的列。
相关参考
AddGeometryColumn, DropGeometryTable, `关于几何类型列的视图`_
6.2.3. DropGeometryTable
DropGeometryTable — 删除一个表及其在geometry_columns 中的引用。
语法
boolean DropGeometryTable(varchar table_name); boolean DropGeometryTable(varchar schema_name, varchar table_name); boolean DropGeometryTable(varchar catalog_name, varchar schema_name, varchar table_name);
描述
删除一个表及其在geometry_columns 中的引用。
注意
如果该函数没有设置schema_name的值,将使用 current_schema()的值作为schema_name。
样例
SELECT DropGeometryTable ('my_schema','my_spatial_table'); my_schema.my_spatial_table dropped.
上边这句相当于:
DROP TABLE my_schema.my_spatial_table;
相关参考
AddGeometryColumn, DropGeometryColumn, `关于几何类型列的视图`_
6.2.4. Find_SRID
Find_SRID —该函数的用法是find_srid(a_db_schema, a_table,a_column),函数的返回值是一个指定列的整型SRID值。 该函数实际上是通过查询GEOMETRY_COLUMNS 表得到的。
用法
integer Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);
描述
该函数的用法是find_srid(a_db_schema, a_table,a_column),函数的返回值是一个指定列的整型SRID值。 该函数实际上是通过查询GEOMETRY_COLUMNS表得到的。 如果geometry类型列没有通过函数AddGeometryColumns()来正确地添加,则无法对该列使用该函数。
样例
SELECT Find_SRID('public', 'tiger_us_state_2007', 'the_geom_4269'); find_srid ---------- 4269
参考
6.2.5. Populate_Geometry_Columns
Populate_Geometry_Columns — 确保geometry类型的列是用typmod方式来定义的或者有合适的空间约束条件,这样才能保证这些列能被正确地注册到geometry_columns这个视图中。 默认情况下会将所有的非typmod定义的geometry类型列转换为typmod方式的,如果想用老的方式,需要把use_typmod值设为false。
语法
text Populate_Geometry_Columns(boolean use_typmod=true); int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);
描述
确保geometry类型的列是用typmod方式来定义的或者有合适的空间约束条件,这样才能保证这些列能被正确地注册到geometry_columns这个视图中。
为了后向兼容性以及一些空间需求例如表继承,即每个指标可能有不同的geometry类型。 老的约束方式依然支持。如果想使用老的方式,需要把use_typmod设置为false.当传递这个参数后,geometry类型的列会被设置成无类型修改符的属性, 但是会有3个约束条件,这意味着每个geometry类型的列在一个表中至少有3个约束:
enforce_dims_the_geom –确保每个geometry类型字段的维度相同(参考 ST_NDims )
enforce_geotype_the_geom -确保每个geometry类型字段类型相同(参考 GeometryType )
enforce_srid_the_geom –确保每个geometry类型字段处于相同的投影空间(参考 ST_SRID )
如果提供了一个表的oid,这个函数会试着确定srid,dimension值和该表的所有geometry类型,并添加必要的约束。 如果成功了,一个正确的记录会被“插入”到geometry_cloumns视图中,否则会导致一个异常并显示具体的错误信息。
如果提供了一个视图的oid,就像一个表的oid一样,这个函数会试着确定srid,dimension值和该视图的所有geometry类型。 如果成功了,一个正确的记录会被“插入”到geometry_cloumns视图中,但是不会做任何事情来强制约束。
无参数方法(指的是返回值为text的第一种方法)是一个带参数的(返回值为int的)方法的封装。 它首先对每一个空间类型表和视图先truncate geometry_columns,然后再重新插入到geometry_columns,对每个表添加合适的空间约束。 它返回在一个数据库能找到的所有geometry类型列的总和,和插入到geometry_cloumns中的总数。 参数化的版本简单返回插入到geometry_columns中的总记录数。
样例
CREATE TABLE public.myspatial_table(gid serial, geom geometry); INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
这里会使用 type modifiers,表中必须有数据才可以执行这个语句
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass); populate_geometry_columns -------------------------- 1 \d myspatial_table Table "public.myspatial_table" Column | Type | Modifiers -------------+---------------------------------------+--------------------------------------------------------------- gid | integer | not null default nextval('myspatial_table_gid_seq'::regclass) geom | geometry(LineString,4326) |
如果没有用typmod或者已经有约束了,这里会改变geometry类型的列使用约束。 下面语句如果想要运行成功,表中需要有数据。
CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry); INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) ); SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false); populate_geometry_columns -------------------------- 1 \d myspatial_table_cs Table "public.myspatial_table_cs" Column |Type | Modifiers ------------+----------+------------------------------------------------------------------ gid | integer | not null default nextval('myspatial_table_cs_gid_seq'::regclass) geom | geometry | Check constraints: "enforce_dims_geom" CHECK (st_ndims(geom) = 2) "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL) "enforce_srid_geom" CHECK (st_srid(geom) = 4326)
6.2.6. UpdateGeometrySRID
UpdateGeometrySRID — 更新表中一个geometry类型的列中所有几何对象的SRID,同时更新几何列中的约束和参照信息。 如果该列的类型定义中添加了强制约束,那么类型定义也会被更新。
语法
text UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid); text UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid); text UpdateGeometrySRID(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid);
描述
更新表中一个geometry类型的列中所有几何对象的SRID,同时更新几何列中的约束和参照信息。 如果该列的类型定义中添加了强制约束,那么类型定义也会被更新。
注意
如果没有给出schema_name的值,该函数将使用 current_schema() 的值作为schema_name。
这个函数支持3D对象,并且不会删除z坐标。
该方法支持CircularString和curve几何类型字段。
样例
下面的语句将会把表roads的列geom的SRID改为4326,无论改列之前的SRId值是多少:
SELECT UpdateGeometrySRID('roads','geom',4326);
上面的样例语句等价于下面的DDL语句:
ALTER TABLE roads ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 4326) USING ST_SetSRID(geom,4326);
如果数据在加载时候投影错了,想一次性把投影坐标系改为Web Mercator投影,可以使用下面的DDL语句,但是没有等价的KGIS管理函数能一次性完成这样的事情。
ALTER TABLE roads ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 3857) USING ST_Transform(ST_SetSRID(geom ,4326),3857) ;
相关参考
边栏推荐
猜你喜欢
随机推荐
mysql 、pg 查询日期处理
R语言检验时间序列的平稳性:使用tseries包的adf.test函数实现增强的Dickey-Fuller(ADF)检验、检验时序数据是否具有均值回归特性(平稳性)、不具有均值回归特性的案例
继承关系下构造方法的访问特点
How to insist to use procedural system?
(转)FreeType字体位图属性
Janus Official DEMO Introduction
Controller层代码这么写,简洁又优雅!
What kind of mentality do you need to have when using the stock quantitative trading interface
Leetcode 530. 二叉搜索树的最小绝对差
集群的基础形式
torch.distributed多卡/多GPU/分布式DPP(二)——torch.distributed.all_reduce(reduce_mean)&barrier&控制进程执行顺序&随机数种子
【实用工具系列】MathCAD入门安装及快速上手使用教程
leetcode:321. 拼接最大数
OSS文件上传
守护进程
leetcode:325. 和等于k的最长子数组长度
VR全景拍摄如何拍摄?如何使用拍摄器材?
chart.js面积图曲线图统计插件
C. Mere Array
国内十大活跃报表 BI 产品深度对比及点评