该文件不需要用户非要刨根问底的去理解相关内容,只需要了解这里的相互关系,以及在使用ST_Geometry的时候怎么来处理这些关系。
操作系统:Winodows7
数据库:Oracle 11.1.0.6 64Bit
中间件:ArcSDE10 64Bit
ArcSDE的投影信息涉及的表包括以下几个:
GEOMETRY_COLUMNS 表为符合 OpenGIS SQL 规范的每列类型几何都在数据库中存储一行。ArcSDE 将此表视为只限写入,因此仅在添加或删除 OpenGIS SQL 数据格式的图层时,才可通过 ArcSDE 访问此表。该表由 OpenGIS SQL 规范定义,还可以在其他应用程序中用不由 ArcSDE 托管的几何列更新该表。以符合 OpenGIS 标准的格式新建几何列时,完全限定的表名、列名和空间参考 ID (SRID) 会添加到 GEOMETRY_COLUMNS 表中。
每个几何列都与一个空间参考系相关联。ArcSDE 将有关各空间参考系统的信息均存储在 SPATIAL_REFERENCES 表中。
LAYERS 表用于记录与数据库中各要素类相关的数据。该信息帮助构建和维护空间索引、确保正确的形状类型、维护数据完整性以及存储坐标数据的空间参考。
数据库中的每个空间列对应该表中的一行。应用程序使用图层属性来查找可用的空间数据源。ArcSDE 使用这些图层属性来约束和验证空间列内容、索引几何值,以及正确创建和管理关联的 DBMS 表。
SPATIAL_REFERENCES 表中包含坐标系和从浮点型到整型的转换值。存储前,内部功能会利用空间参考系的参数将几何的每个浮点型坐标都转换和调整为 64 位正整数。进行检索时,这些坐标将恢复为其初始外部浮点型形式。
GEOMETRY_COLUMNS 表的每个几何列都与一个空间参考系统相关联,与之相关的信息将存储在 SPATIAL_REFERENCES 表中。该表中各列均由 OpenGIS SQL 规范(SRID、SRTEXT、AUTH_NAME 和 AUTH_SRID)定义,并且 ArcSDE 需要通过这些列进行内部坐标转换。空间参考系可用于标识几何的坐标系,并为几何的数字坐标值赋予意义。
ST_COORDINATE_SYSTEMS 表中包含注册到“空间类型”的所有坐标系。当安装 ArcSDE 时更新此表,并在必要时对其进行升级。也可使用 ST_CSRegister 函数将此表更新到包含用户定义坐标系。
ST_COORDINATE_SYSTEMS 表与 ST_SPATIAL_REFERENCES 表一起来描述可用于 ST_Geometry 类型的坐标系和投影。
此表包含所创建或添加到表对象或表视图的各 ST_Geometry 列的方案、几何类型和空间参考信息。通过使用存储过程注册/取消注册表或视图,可将 ST_Geometry 列信息插入到此表中。在创建空间索引之前,必须先将表/列元数据注册到此表。
创建包含 ST_Geometry 列的表时不会插入 ST_Geometry 元数据。在表中创建空间索引时,将在 ST_GEOMETRY_COLUMNS 表和 ST_GEOMETRY_INDEX 表中插入条目。
此表用于执行选择操作和 DML 元数据操作。存储过程用于向 ST_GEOMETRY_COLUMNS 表中插入条目或从其删除条目。
此表包含 ST_Geometry 列的空间索引信息。ST_Geometry 类型的空间索引在 CREATE INDEX 语句中称为域索引。
格网大小和 SRID 在 CREATE INDEX 语句的 PARAMETERS 子句中定义。使用 ALTER INDEX REBUILD 时,应保持 SRID 值不变。如果 SRID 的值不变,则还需要使用单独的表 UPDATE 语句更新所有要素的 SRID 值。要指定格网大小和 SRID,请使用 st_grids 和 st_srid 关键字:
此表包含所有可用于 ST_Geometry 类型的空间参考。必须正确地引用空间表,以便对其进行单独分析或对其进行组合以分析关系。也就是说,空间表必须具有空间参考和坐标系。
ST_SPATIAL_REFERENCES 表中包含坐标系和从浮点型到整型的转换值。存储前,内部功能会利用空间参考系的参数将几何的每个浮点型坐标都转换和调整为 64 位正整数。进行检索时,这些坐标将恢复为其初始外部浮点型形式。
ST_SPATIAL_REFERENCES 表与 ST_COORDINATE_SYSTEMS 表一起来描述可用于 ST_Geometry 类型的坐标系和投影。此表方案中包含坐标系 (x,y,z) 和测量 (m) 的比例和偏移。由于存储和性能上的原因,使用该信息将十进制值转换为整型值以及将负值转换为正值。
当用户使用ArcSDE来管理数据时(一般用户的数据都是有投影信息的),在数据入库过程中,投影信息在ArcSDE Schema的相关表进行管理,而且并不仅仅是一个表来体现投影信息,将近7个表都会体现,而且他们之间是有相互关系的。
当利用ArcCatalog建立一个数据集或者要素类时,在Layers表里面会存储一个序列的SRID(也就是说当已经有一个SRID=15,新的SRID=16),而且这个SRID也会在Spatial_Reference表中有一个AUTH_SRID与之对应,在以ST_开头的相关投影表中都是写入的AUTH_SRID的信息。
举例:利用ArcCatalog创建一个数据集,我们要为数据设置一个投影信息,那么在Spatial_Reference表中会有一个新的SRID,但是没有AUTH_SRID,因为没有ST_GEOMETRY的信息,如下图SRID=66,那么如果在该数据集下创建一个要素类,那么就会添加一行记录,新的SRID(该SRID其实就是针对每一个图层的SRID也就是在Layers表中的SRID,对应有相关的AUTH_SRID)。
那么如果利用ArcCatalog只创建一个要素类的话,就会产生一个类似SRID=67的相关记录了。
如果我们创建一个已经存在SRID(或者说投影文件)的数据,那么新数据的SRID信息或者AUTH_SRID信息沿用已有的信息。
好多用户喜欢使用SQL语句来操作ArcGIS的数据,因为他们感觉这样方便,性能高,那么在操作之前也需要弄清楚关于投影的相关知识。
尤其是利用SQL语句创建表和插入数据时,更需要了解相关的投影关系。但是需要注意的是Esri推荐用户利用ArcCatalog的方式创建表。
SQL> create table testst(id integer,name varchar(255),zone sde.st_geometry);
C:\Users\gis>sdelayer -o register -l testst,zone -e a -C id,SDE -R 10 -u aaa -p aaa -t ST_GEOMETRY
SQL> insert into testst(id,name,zone) values (3,'esri',
sde.st_polyfromtext('POLYGON (( 499948.53840000 49.47720000, 499948.27390000 2.38130000, 500008.33440000 2.38130000, 500008.06980000 49.47720000, 499948.53840000 49.47720000))',5));
其实还是建议大家可以利用ST相关函数来读取数据,不建议使用SQL来编辑ArcSDE数据,因为如果里面的关系理不清楚,最后的后果就是重装机器了。
该文档为作者在学习ArcGIS的一些笔记(自己学习、ArcGIS帮助、网络资源、高手请教相结合),难免有一些表达不全面或者理解有出入的,还请各位多多指教!