管理函数

AddGeometryColumn

AddGeometryColumn — 将几何列添加到现有属性表。 默认情况下使用类型修饰符来定义而不是约束。

可以传递一个false逻辑值给use_typmod参数来获取基于老的约束条件方式。

语法

addgeometrycolumn ::=

参数

catalog_name

varchar类型,数据库名,可以缺省

schema_name

varchar类型,模式名,可以缺省

table_name

varchar类型,要增加的表属性的表名

column_name

varchar类型,要增加的几何类型属性列

srid

integer类型,空间参考系,具体见下述说明

type

varchar类型,几何属性的约束类型,如:LINESTRING,POLYGON等。

dimension

integer类型,几何属性的维数。

default

Boolean类型,是否使用类型typmod,默认为TRUE。

返回值

返回值为text类型。如果添加属性列成功,返回属性列的信息。

说明

添加一个几何类型的列到一个已知的表中。schema_name就是表的schema_name。srid必须是OscarGIS的系统表SPATIAL_REF_SYS中存在的整型值。

如果schema_name不存在、具体的SRID、geometry类型或维度值无效,都会抛出异常。

注解

spatial_ref_sys 是一个兼容OGC规范的OscarGIS的系统表,该表包含了3000多个已知的空间参考系 ( spatial reference systems), 以及参考系之间转换/重投影时候的细节。

SPATIAL_REF_SYS 表定义如下:

CREATE TABLE spatial_ref_sys (
srid        INTEGER NOT NULL PRIMARY KEY,
auth_name   VARCHAR(256),
auth_srid   INTEGER,
srtext      VARCHAR(2048),
proj4text   VARCHAR(2048)
)

其中

SRID :一个能标识数据库里面空间参考系(SRS)唯一性的整型值。

AUTH_NAME:本参考系统所引用的标准或标准体的名称。例如,“EPSG”将是一个有效的AUTH_NAME。

AUTH_SRID:一个由AUTH_NAME引用的由Authority定义的空间参考系的ID值。在EPSG中,这由EPSG 投影代码(projection code)来决定。

SRTEXT :空间参考系的WKT描述。

PROJ4TEXT :OscarGIS 使用Proj4库提供坐标转换功能。PROJ4TEXT 列包含一个具体SRID的Proj4坐标定义的字符串形式。

注解

geometry_columns 是几何类型列的视图。函数AddGeometryColumn()可以创建一个几何列,并把这个新列注册在视图 geometry_columns中。

示例

DROP TABLE sysdba.myspatial_table;
CREATE TABLE sysdba.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );

SELECT AddGeometryColumn( 'myspatial_table', 'geom1', 3819, 'LINESTRING', 2);
ADDGEOMETRYCOLUMN(text)      |
-----------------------------
SYSDBA.myspatial_table.geom1 |
SRID:3819 TYPE:LINESTRING DI|
MS:2                         |
总数目:1

SELECT AddGeometryColumn ('sysdba','myspatial_table','geom_c',4326,'POINT',2, false);
ADDGEOMETRYCOLUMN(text)      |
-----------------------------
sysdba.myspatial_table.geom_c|
 SRID:4326 TYPE:POINT DIMS:2|
                             |
总数目:1
SELECT AddGeometryColumn ('sysdba','myspatial_table','geom_c',4326,'int',2, false);
ERROR, Invalid type name "int(2)" - valid ones are:
	POINT, MULTIPOINT,
	LINESTRING, MULTILINESTRING,
	POLYGON, MULTIPOLYGON,
	CIRCULARSTRING, COMPOUNDCURVE, MULTICURVE,
	CURVEPOLYGON, MULTISURFACE,
	GEOMETRY, GEOMETRYCOLLECTION,
	POINTM, MULTIPOINTM,
	LINESTRINGM, MULTILINESTRINGM,
	POLYGONM, MULTIPOLYGONM,
	CIRCULARSTRINGM, COMPOUNDCURVEM, MULTICURVEM
	CURVEPOLYGONM, MULTISURFACEM, TRIANGLE, TRIANGLEM,
	POLYHEDRALSURFACE, POLYHEDRALSURFACEM, TIN, TINM
	or GEOMETRYCOLLECTIONM


select * from MYSPATIAL_TABLE;
GID(int)      |GEOM(GEOMETRY)      |GEOM1(GEOMETRY)      |GEOM_C(GEOMETRY)      |
-----------------------------------------------------------------------------
1             |0102000020E610000002|null                 |null                  |
              |000000000000000000F|                     |                      |
              |03F0000000000000040|                     |                      |
              |0000000000000840000|                     |                      |
              |0000000001040       |                     |                      |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM                         |2                         |0              |GEOMETRY           |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM1                        |2                         |3819           |LINESTRING         |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM_C                       |2                         |4326           |POINT              |
总数目:3

DropGeometryColumn

DropGeometryColumn — 从一个空间表中删除一个几何类型的列。

语法

dropgeometrycolumn ::=

参数

catalog_name

varchar类型,数据库名,可以缺省

schema_name

varchar类型,模式名,可以缺省

table_name

varchar类型,要增加的表属性的表名

column_name

varchar类型,要增加的几何类型属性列

返回值

返回值为text类型。如果删除属性列成功,返回删除属性列的信息。

示例

select DropGeometryColumn('sysdba','myspatial_table','geom');
DROPGEOMETRYCOLUMN(text)      |
------------------------------
sysdba.myspatial_table.geom ef|
fectively removed.            |
总数目:1

select DropGeometryColumn('myspatial_table','geom1');
DROPGEOMETRYCOLUMN(text)      |
------------------------------
SYSDBA.myspatial_table.geom1 e|
ffectively removed.           |
总数目:1

select * from MYSPATIAL_TABLE;
GID(int)      |GEOM_C(GEOMETRY)      |
------------------------------------
1             |null                  |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM_C                       |2                         |4326           |POINT              |
总数目:1

DropGeometryTable

DropGeometryTable — 删除一个表及其在geometry_columns 中的引用(每一个含有几何类型字段的表都会在geometry_columns中存有记录)。

语法

dropgeometrycolumn ::=

参数

catalog_name

varchar类型,数据库名,可以缺省

schema_name

varchar类型,模式名,可以缺省

table_name

varchar类型,要增加的表属性的表名

返回值

返回值为text类型。如果删除几何表成功,返回删除表的信息。

示例

select DropGeometryTable('sysdba','myspatial_table');
DROPGEOMETRYTABLE(text)      |
-----------------------------
sysdba.myspatial_table droppe|
d.                           |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
总数目:0

Populate_Geometry_Columns

Populate_Geometry_Columns — 确保geometry类型的列是用typmod方式来定义的或者有合适的空间约束条件,这样才能保证这些列能被正确地注册到geometry_columns这个视图中。

默认情况下会将所有的非typmod定义的geometry类型列转换为typmod方式的,如果想用老的方式,需要把use_typmod值设为false。

语法

populate_geometry_columns ::=

参数

relation_name

varchar类型,关系的名字(此处与postgis不同,postgis传入的是关系的oid)。

default

boolean类型,use_typmod,是否使用类型约束。默认为TRUE。

返回值

当指定relation_name时,返回值为int类型。否则返回text类型。

说明

如果提供了一个表的表名,这个函数会试着确定srid,dimension值和该表的所有geometry类型,并添加必要的约束。

如果成功了,一个正确的记录会被“插入”到geometry_cloumns视图中,否则会导致一个异常并显示具体的错误信息。

注解

无参数方法(指的是返回值为text的那种方法)是一个带参数的(返回值为int的)方法的封装,它首先对每一个空间类型表和视图

先truncate geometry_columns然后再重新插入到geometry_columns,对每个表添加合适的空间约束,它返回在一个数据库能找到的

所有geometry类型列的总和,和插入到geometry_cloumns中的总数。参数化的版本简单返回插入到geometry_columns中的总记录数。

示例

DROP TABLE sysdba.myspatial_table;
CREATE TABLE sysdba.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE' and F_GEOMETRY_COLUMN = 'GEOM';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM                         |2                         |0              |GEOMETRY           |
总数目:1

SELECT Populate_Geometry_Columns('sysdba.myspatial_table');
POPULATE_GEOMETRY_COLUMNS(int)      |
------------------------------------
1                                   |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE' and F_GEOMETRY_COLUMN = 'GEOM';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM                         |2                         |4326           |LINESTRING         |
总数目:1

drop table sysdba.myspatial_table_cs;
CREATE TABLE sysdba.myspatial_table_cs(gid serial, geom geometry);
INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE_CS' and F_GEOMETRY_COLUMN = 'GEOM';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE_CS      |GEOM                         |2                         |0              |GEOMETRY           |
总数目:1

SELECT Populate_Geometry_Columns('sysdba.myspatial_table_cs', false);
POPULATE_GEOMETRY_COLUMNS(int)      |
------------------------------------
1                                   |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE_CS' and F_GEOMETRY_COLUMN = 'GEOM';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE_CS      |GEOM                         |2                         |4326           |LINESTRING         |
总数目:1

UpdateGeometrySRID

UpdateGeometrySRID — 更新包括一个geometry类型列,该列在geometry_columns 元数据信息及SRID的所有信息。如果该列被

添加了强制约束,强制约束会被更新为新的SRID,如果是用typmod形式的定义,类型修改符也会被更新。

语法

updategeometrysrid ::=

参数

catalog_name

varchar类型,数据库名,可以缺省

schema_name

varchar类型,模式名,可以缺省

table_name

varchar类型,要增加的表属性的表名

column_name

varchar类型,要增加的几何类型属性列

srid

integer类型,空间参考系

返回值

返回值为text类型。如果修改成功,返回修改后的信息。

示例

select UpdateGeometrySRID('', 'SYSDBA','MYSPATIAL_TABLE','GEOM',3819);
UPDATEGEOMETRYSRID(text)      |
------------------------------
SYSDBA.MYSPATIAL_TABLE.GEOM SR|
ID changed to 3819            |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE' and F_GEOMETRY_COLUMN = 'GEOM';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM                         |2                         |3819           |LINESTRING         |
总数目:1

select UpdateGeometrySRID('SYSDBA','MYSPATIAL_TABLE','GEOM',4326);
UPDATEGEOMETRYSRID(text)      |
------------------------------
SYSDBA.MYSPATIAL_TABLE.GEOM SR|
ID changed to 4326            |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE' and F_GEOMETRY_COLUMN = 'GEOM';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE         |GEOM                         |2                         |4326           |LINESTRING         |
总数目:1
drop table myspatial_table;


select UpdateGeometrySRID('MYSPATIAL_TABLE_CS','GEOM',3819);
UPDATEGEOMETRYSRID(text)      |
------------------------------
SYSDBA.MYSPATIAL_TABLE_CS.GEOM|
 SRID changed to 3819         |
总数目:1

select F_TABLE_SCHEMA,F_TABLE_NAME,F_GEOMETRY_COLUMN,COORD_DIMENSION,SRID,TYPE from geometry_columns where F_TABLE_NAME = 'MYSPATIAL_TABLE_CS' and F_GEOMETRY_COLUMN = 'GEOM';
F_TABLE_SCHEMA(name)      |F_TABLE_NAME(name)      |F_GEOMETRY_COLUMN(name)      |COORD_DIMENSION(int)      |SRID(int)      |TYPE(varchar)      |
-------------------------------------------------------------------------------------------------------------------------------------------
SYSDBA                    |MYSPATIAL_TABLE_CS      |GEOM                         |2                         |3819           |LINESTRING         |
总数目:1
drop table MYSPATIAL_TABLE_CS;