快速浏览:将 SQL 与 ST_Geometry 配合使用

可使用数据库管理系统 (DBMS) 的结构化查询语言 (SQL)、数据类型和表格式来处理地理数据库或安装了 ST_Geometry 类型的数据库中所存储的信息。SQL 是一种数据库语言,支持数据定义和数据操纵命令。

通过 SQL 访问数据允许外部应用程序使用由地理数据库或数据库所管理的表格数据。这些外部应用程序可以是在 ArcObjects 以外的环境中开发的非空间数据库应用程序或自定义空间应用程序。

使用 SQL 在地理数据库中插入或编辑数据时,请在 SQL 语句执行完毕后执行 COMMIT 或 ROLLBACK 语句,以确保将更改提交到数据库或撤消。这有助于阻止锁定正在编辑的行,页面或表。

使用 SQL 插入 ST_Geometry 数据

可以使用 SQL 将空间数据插入到具有 ST_Geometry 列的数据库表或地理数据库表中。可使用 ST_Geometry 构造函数插入特定几何类型。也可指定应将某些特定空间运算函数的输出结果输出到现有表。

使用 SQL 将几何插入表时,请注意如下内容:

空间参考 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 for 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 创建空间参考

有关 SRID 和空间参考系统的说明,请参阅什么是 SRID?空间参考

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 访问地理数据库会忽略地理数据库功能,如版本化、拓扑、网络、地形、关联要素的注记、其他类或工作空间扩展模块。可使用触发器和存储过程等 DBMS 功能来维护某个地理数据库功能所需的表之间的关系。但是,如果对地理数据库执行 SQL 命令而不考虑此额外功能(如执行 INSERT 语句以向版本化业务表添加记录或者向现有要素类添加列),则会避开地理数据库功能并可能对地理数据库中数据之间的关系造成损坏。

相关主题

5/25/2014