使用 SQL 创建空间参考

复杂性:高级 数据要求:使用自备的数据

ESRI 建议在创建要素类时使用 ArcGIS Desktop 工具创建空间参考。ArcGIS 针对此项任务提供一整套工具,并且将计算 x、y、z 和 m 单位及偏移以维持高精度数据。不过,ESRI 了解某些用户和应用程序开发人员想要用其他方式创建空间参考。本部分涉及由 ESRI 和 IBM 为创建空间参考而提供的数据库工具。

数据库可识别的所有空间参考系统都存储在系统表中,其中一些具有可编辑的视图。对于 Oracle 中使用 ST_Geometry 几何存储的 ArcSDE 地理数据库,系统表为 ST_Spatial_References 表。在 Informix 中,系统表名为 Spatial_References。在 DB2 中,系统表名为 ST_Spatial_Reference_Systems。在 PostgreSQL 中,系统表为 sde_spatial_references,但还存在可将空间参考插入其中的 sde_spatial_references 表 st_spatial_references 的视图。

存储前,内部功能会利用空间参考系统的参数将几何的每个浮点型坐标都转换和调整为 64 位正整数。进行检索时,这些坐标将恢复为其外部浮点型形式。

通过以下步骤将浮点型坐标转换为整型:减去 falsex 值和 falsey 值,从而转换为假定原点;乘以 x,y 单位进行比例调整;添加半个单位;然后截掉余数。

以类似方式处理可选的 z 坐标和度量值,不同之处在于使用 falsez 值和 falsem 值进行转换,然后使用 z 单位和 m 单位进行比例调整。

有关每个数据库管理系统中空间参考表所有列的定义,请参考其各自的系统表主题:

DB2 中地理数据库 (geodatabase) 的系统表Informix 中地理数据库 (geodatabase) 的系统表Oracle 中地理数据库 (geodatabase) 的系统表PostgreSQL 中地理数据库 (geodatabase) 的系统表

空间参考系在其构建过程中分配给几何。空间参考系存在于空间参考表中。而列中的所有几何都必须具有相同的空间参考系。

在 IBM DB2 中创建空间参考

在 DB2 中,用于创建空间参考的命令是 db2se create_srs(或调用 db2se.ST_create_srs 存储过程)。下例创建了比例因子为 10 并且使用特定坐标系的空间参考记录:

db2se create_srs mydb -srsName \"mysrs\" 
-srsID 100 -xScale 10 -coordsysName \"GCS_North_American_1983\"

有关使用此命令的详细信息,请参阅《DB2 Spatial Extender 和 Geodetic Extender 用户指南和参考》的“创建空间参考系统”部分。

在 IBM Informix 中创建空间参考

Informix 用户可使用与下例类似的 INSERT 语句创建空间参考记录:

INSERT INTO SDE.SPATIAL_REFERENCES (srid, description, 
auth_name, auth_srid, falsex, falsey, xyunits, falsez, 
zunits, falsem, munits, srtext, object_flags, 
xycluster_tol, zcluster_tol, mcluster_tol)
VALUES (
20, 
'GCS_North_American_1983', 
NULL, 
NULL, 
-400,
-400,
1000000000,
-100000,
100000,
-100000,
10000, 
'GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]',
1,
0,
0,
0);

有关在 Informix 中创建空间参考的详细信息,请参阅《IBM Informix Spatial DataBlade 模块用户指南》的“使用空间参考表”部分。

在 Oracle 中创建空间参考

在 Oracle 中为使用空间类型的表创建空间参考的操作通过与下例类似的 INSERT 语句执行。确保用唯一的值替换 SRID。下例中,SRID 为第三行代码中的 1。

INSERT INTO SDE.ST_SPATIAL_REFERENCES (SR_NAME, SRID, 
X_OFFSET, Y_OFFSET, XYUNITS, Z_OFFSET, Z_SCALE, M_OFFSET, 
M_SCALE, MIN_X, MAX_X, MIN_Y, MAX_Y, MIN_Z, MAX_Z, MIN_M, 
MAX_M, CS_ID, CS_NAME, CS_TYPE, ORGANIZATION, 
ORG_COORDSYS_ID, DEFINITION, DESCRIPTION)
VALUES (
'GCS_North_American_1983', 
1,
-400,
-400,
1000000000, 
-100000, 
100000, 
-100000, 
100000, 
9.999E35,
-9.999E35, 
9.999E35, 
-9.999E35, 
9.999E35, 
-9.999E35, 
9.999E35, 
-9.999E35, 
4269, 
'GCS_North_American_1983',
'PROJECTED', 
NULL,
NULL,
'GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]',
'ArcSDE SpRef');

在 PostgreSQL 中创建空间参考

要在 PostgreSQL 中为空间类型创建空间参考系统,使用与下例类似的 INSERT 语句。确保用唯一的值替换 SRID。下例中,SRID 为第三行代码中的 1。

INSERT INTO sde.st_spatial_references (sr_name, srid, 
x_offset, y_offset, xyunits, z_offset, z_scale, m_offset, 
m_scale, min_x, max_x, min_y, max_y, min_z, max_z, min_m, 
max_m, cs_id, cs_name, cs_type, organization, 
org_coordsys_id, definition, description)
VALUES (
'GCS_North_American_1983',
1, 
-400, 
-400, 
1000000000,
-100000, 
100000, 
-100000, 
100000, 
9.999E35,
-9.999E35, 
9.999E35, 
-9.999E35, 
9.999E35, 
-9.999E35, 
9.999E35, 
-9.999E35, 
4269, 
'GCS_North_American_1983',
'PROJECTED', 
NULL,
NULL,
'GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]',
'ArcSDE SpRef');

相关主题


3/7/2012