可使用数据库管理系统 (DBMS) 的结构化查询语言 (SQL)、数据类型和表格式来处理地理数据库或安装了 ST_Geometry 类型的数据库中所存储的信息。SQL 是一种数据库语言,支持数据定义和数据操纵命令。
通过 SQL 访问数据允许外部应用程序使用由地理数据库或数据库所管理的表格数据。这些外部应用程序可以是在 ArcObjects 以外的环境中开发的非空间数据库应用程序或自定义空间应用程序。
使用 SQL 在地理数据库中插入或编辑数据时,请在 SQL 语句执行完毕后执行 COMMIT 或 ROLLBACK 语句,以确保将更改提交到数据库或撤消。这有助于阻止锁定正在编辑的行,页面或表。
使用 SQL 插入 ST_Geometry 数据
可以使用 SQL 将空间数据插入到具有 ST_Geometry 列的数据库表或地理数据库表中。可使用 ST_Geometry 构造函数插入特定几何类型。也可指定应将某些特定空间运算函数的输出结果输出到现有表。
使用 SQL 将几何插入表时,请注意如下内容:
- 必须指定有效的空间参考 ID (SRID)。
- 要继续将表与 ArcGIS 结合使用,用作 ObjectID 的字段不能为空。
空间参考 ID
向 Oracle 中使用 ST_Geometry 空间类型的表插入几何图形时所指定的 SRID 必须位于 ST_SPATIAL_REFERENCES 表中,并与 SDE.SPATIAL_REFERENCES 表中的记录相匹配。向 PostgreSQL 中使用 ST_Geometry 空间类型的表插入几何图形时所指定的 SRID 必须位于 public.sde_spatial_references 表中。从 ArcGIS 10.1 开始,这些表将用空间参考和 SRID 进行预填充。
向在 SQLite 中使用 ST_Geometry 空间类型 (geometryblob) 的表插入几何图形时,所指定的 SRID 必须位于 st_spatial_reference_systems 表中。
如果需要使用表中不存在的自定义空间参考,最简单的方法是使用 ArcGIS Desktop 加载或创建具有需要的空间参考值的要素类。确保创建的要素类使用 ST_Geometry 存储。这样将在 Oracle 的 SDE.SPATIAL_REFERENCES 和 ST_SPATIAL_REFERENCES 表中创建记录,在 PostgreSQL 的 public.sde_spatial_references 表中创建记录,或在 SQLite 的 st_aux_spatial_reference_systems_table 中创建记录。
在地理数据库中,可查询 LAYERS (Oracle) 或 sde_layers (PostgreSQL) 表以找到分配给空间表的 SRID。然后可在使用 SQL 创建空间表并插入数据时使用该 SRID。
或者,可以使用 SQL 向 ST_SPATIAL_REFERENCES 或 sde_spatial_references 表添加空间参考。有关详细信息,请参阅使用 SQL 创建空间参考。
ObjectID
通过 ArcGIS 查询数据,表需要包含一个唯一标识符字段。
通过 ArcGIS 创建的要素类总是具有作为标识符字段的 ObjectID 字段。使用 ArcGIS 向要素类插入记录时,总是向 ObjectID 字段插入一个唯一值。地理数据库表中的 ObjectID 字段由 ArcGIS 维护。在数据库表中通过 ArcGIS 创建的 ObjectID 字段由 DBMS 维护。
使用 SQL 向地理数据库表插入记录时,必须使用 Next_RowID 函数获取并插入有效的 ObjectID 值。使用 SQL 向在 ArcGIS 中创建的数据库表插入记录时,DBMS 将为 ObjectID 字段填充一个值。
在 ArcGIS 外部创建的数据库表必须包含可供 ArcGIS 用作 ObjectID 的字段(或字段组)。如果将数据库的原生自动增量数据类型用于表的 ID 字段,则在使用 SQL 插入记录时,DBMS 将填充此字段。如果要手动维护唯一标识符字段中的值,请确保通过 SQL 编辑表时为 ID 提供一个唯一值。
有关详细信息,请参阅什么是 ObjectID?。
使用 SQL 编辑 ST_Geometry 数据
对现有记录的 SQL 编辑通常会影响存储在表中的非空间属性;但是,可以使用 SQL UPDATE 语句中的构造函数来编辑 ST_Geometry 列中的数据。
如果数据存储在地理数据库中,在使用 SQL 进行编辑时,还应遵守一些其他规则:
- 如果数据已版本化,请勿使用 SQL 来更新记录,除非将 SQL 与版本化视图结合使用。
- 请勿修改在数据库中影响其他对象的任何属性,这些对象决定了地理数据库的行为(如关系类、关联要素的注记、拓扑或网络)。