当前位置:网站首页>金仓数据库 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) ;
相关参考
边栏推荐
猜你喜欢
Vmware中安装win7虚拟机以及相关简单知识
ArrayList 和 LinkedList 区别
高数_复习_第4章:向量代数和空间解析几何
集群的基础形式
【Burning】It's time to show your true strength!Understand the technical highlights of the 2022 Huawei Developer Competition in one article
leetcode:325. 和等于k的最长子数组长度
Install win7 virtual machine in Vmware and related simple knowledge
DXF笔记:文字对齐的研究
干涉BGP的选路---社团属性
Qt 消息机制和事件
随机推荐
2022-8-9 第六组 输入输出流
使用股票量化交易接口需要具备怎么样的心态
外包的水有多深?腾讯15k的外包测试岗能去吗?
What are the basic steps to develop a quantitative trading strategy?
C. Mere Array
Sun Zhengyi lost 150 billion: it was expensive at the beginning
matplotlib散点图颜色分组图例
shell数组
D. Binary String To Subsequences
月薪5K的运维小白如何成为月薪5W的高级架构师?
A1. Prefix Flip (Easy Version)
xlrd 与 xlsxwritter 的基本操作
VR全景拍摄如何拍摄?如何使用拍摄器材?
2022/8/9 考试总结
R语言修改dataframe数据列的名称:使用dplyr包的rename函数修改列名、使用colnmaes函数修改列名、在数据筛选的时候重命名列名
少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(判断题)2022年6月
Redis集群
异常处理(try,catch,finally)
【Leetcode】2104. Sum of Subarray Ranges
2021年国内外五大BI厂商——优秀的商业智能工具推荐