将 SQL 与 ST_Geometry 和 ST_Raster 类型搭配使用快速浏览
可使用数据库管理系统 (DBMS) 的结构化查询语言 (SQL)、数据类型和表格式来处理地理数据库中存储的信息。SQL 是一种数据库语言,支持数据定义和数据操纵命令。
通过 SQL 访问地理数据库中的信息允许外部应用程序处理地理数据库管理的表格数据。这些外部应用程序可以是在 ArcObjects 以外的环境中开发的非空间数据库应用程序或自定义空间应用程序。
可以针对任意支持的地理数据库的 DBMS 类型以及针对基于文件的数据源执行 SELECT 语句。关于构建 SQL 表达式和 SQL 参考主题提供了有关为不同数据源构建 SELECT 语句的信息。
请注意,通过 SQL 访问地理数据库会忽略地理数据库功能,如版本化、拓扑、网络、地形、关联要素的注记、其他类或工作空间扩展模块。可使用触发器和存储过程等 DBMS 功能来维护某个地理数据库功能所需的表之间的关系。但是,如果对数据库执行 SQL 命令而不考虑此附加功能(如执行 INSERT 语句以向业务表添加记录或者向现有要素类添加列),则会避开地理数据库功能并可能对地理数据库中数据之间的关系造成损坏。
通常,使用 SQL 修改地理数据库中的信息时将应用以下原则:
- 数据已版本化后不要使用 SQL 来更新记录,除非将 SQL 与多版本化视图结合使用。
- 使用 SQL 更新非版本化数据时,不要使用地理数据库行为(例如关系类、关联要素的注记,或者拓扑)修改可影响数据库中其他对象的任意属性。
- 执行完 SQL 语句后,执行 COMMIT 或 ROLLBACK 语句以确保更改是已提交到数据库还是未完成。
之前的原则适用于任何属性、空间或非空间。本帮助手册重点在于使用 SQL 进行空间选择、更改数据,以及更改以 ST_Geometry 和 ST_Raster 数据存储类型存储的数据的属性。
ST_Geometry 存储类型
ST_Geometry SQL 数据类型用于存储在 DB2、Informix、Oracle 和 PostgreSQL 的地理数据库中。此数据类型可在地理数据库中使用,另外还可通过 SQL 访问第三方应用程序的简单要素类几何。
ST_Geometry 执行空间的 OGC 和 ISO SQL 多媒体规范。OGC 参考资料为“地理信息的 OpenGIS 执行规范 - 简单要素访问 - 第 2 部分:SQL 选项”(OpenGIS Implementation Specification for Geographic information —Simple feature access—Part 2: SQL option)。ISO 参考资料为“ISO/IEC 13249-3 SQL 多媒体和应用程序包 - 第 3 部分:空间”(ISO/IEC 13249-3 SQL multimedia and application packages—Part 3: Spatial)。
有关 SQL 与 DB2 或 Informix 中的 ST_Geomery 类型结合使用的信息,请参阅 IBM DB2 和 Informix 文档。有关 SQL 与 Oracle 和 PostgreSQL 中的 ST_Geometry 类型结合使用的信息,请参阅后续章节。
本帮助的“空间类型与 SQL 结合使用”一节包含 DB2 和 Informix 的一些示例;不过有关 ST_Geometry 与这些数据库结合使用的完整信息,请阅读 IBM 文档。
将 SQL 函数与 Oracle 和 PostgreSQL 中的 ST_Geometry 结合使用
要使用 SQL 访问、分析和操作数据,需要利用与 ArcSDE 一起安装的函数。
可以根据这些函数的用途进行分组。
- 测试空间关系的函数
这些函数将几何作为输入,并确定几何之间是否存在特定关系。如果满足空间关系的条件,则这些函数会返回 1 或 t(表示 TRUE)。如果不满足条件(不存在关系),则这些函数将返回 0 或 f(表示 FALSE)。有关各个函数的说明,请参阅空间关系。
- 执行空间运算的函数
这些函数利用空间数据并对其执行分析,然后返回新的空间数据。有关这些函数的说明,请参阅空间运算。
- 返回几何属性的函数
有很多函数都采用一个或多个几何作为输入,并返回关于几何的特定信息。这些函数在几何属性中进行了介绍。某些函数实际上会检查某个或某些要素是否满足特定条件。如果几何满足条件,则函数会返回 1 或 t(表示 TRUE)。如果几何不满足条件,则函数会返回 0 或 f(表示 FALSE)。这些函数包括:ST_EqualSRS(仅限 PostgreSQL)、ST_Is3d(仅限 Oracle)、ST_IsClosed、ST_IsEmpty、ST_IsMeasured(仅限 Oracle)、ST_IsRing、ST_IsSimple 和 ST_OrderingEquals。
- 创建空间数据或执行空间变换的函数
这些函数采用一种几何类型或几何描述,然后返回其他类型的几何。其中一个函数 ST_Transform 实际上会将 Oracle 中几何的空间参考从地理基准面中的一个空间参考更改为同一地理基准面中的另一个空间参考。下表列出了用于通过其他类型的几何或文本描述创建几何的函数:
ST_LineFromShape(仅限 PostgreSQL)
ST_MPolyFromShape(仅限 PostgreSQL)
ST_PointFromText(仅限 Oracle)
ST_LineFromText(仅限 Oracle)
ST_MPolyFromText(仅限 Oracle)
ST_Curve(仅限 Oracle)
ST_PolyFromShape(仅限 PostgreSQL)
ST_MultiCurve(仅限 Oracle)
ST_PolyFromText(仅限 Oracle)
ST_GeomCollFromShape(仅限 PostgreSQL)
ST_MLineFromShape(仅限 PostgreSQL)
ST_GeomCollFromWKB(仅限 PostgreSQL)
ST_MLineFromText(仅限 Oracle)
ST_Surface(仅限 Oracle)
ST_GeomFromShape(仅限 PostgreSQL)
ST_MPointFromShape(仅限 PostgreSQL)
ST_MultiSurface(仅限 Oracle)
ST_GeomFromText(仅限 Oracle)
ST_MPointFromText(仅限 Oracle)
ST_PointFromShape(仅限 PostgreSQL)
ST_Raster 存储类型
可以在 ArcSDE 地理数据库中使用 ST_Raster 数据类型。此数据类型可在地理数据库中使用,另外还可通过 SQL 访问第三方应用程序的栅格数据。
ST_Raster 类型可用于 Oracle、PostgreSQL 和 Microsoft SQL Server 中的 ArcSDE 地理数据库。
有两种不同类别的 ST_Raster 函数可用于通过 SQL 访问 ST_Raster 类型:
- ST_Raster 和 ST_PixelData 方法
- ST_RasterUtil 存储过程
ST_Raster 和 ST_PixelData 函数
这些方法可实例化和使用 ST_Raster 对象。
ST_RasterUtil 存储过程实用工具
ST_RasterUtil 存储过程支持创建和维护 ST_Raster 类型。可用函数如下:
ST_RasterUtil_checkLibraryVersion