用于 ST_Geometry 和 ST_Raster 类型的 SQL 函数快速浏览
结构化查询语言 (SQL) 是一种标准化语言,可用于选择及处理存储在数据库管理系统 (DBMS) 中的数据。ArcSDE 在 Oracle、PostgreSQL 和 Microsoft SQL Server 的地理数据库中安装特定的 SQL 函数及类型。可以使用 SQL 以及这些函数和类型来查询并编辑数据。
本部分包含了针对每种函数的相关主题,这些函数可通过 Oracle 和 PostgreSQL 中 ArcSDE 地理数据库内的 ST_Geometry 空间类型以及 Oracle、PostgreSQL 和 SQL Server 中的 ST_Raster 类型来实现。它们存储在 ArcSDE 管理员(通常为 sde 用户)的方案中,提供了有效的操作并返回有关几何与栅格的信息。
函数的主题按如下结构组织:
- 定义
函数的描述
- 语法
用于使用函数的正确语法
请注意,对于关系运算符来说,参数的指定顺序十分重要:第一个参数应表示从中进行选择的表,而第二个参数应表示正用作过滤器的表。
- 返回类型
执行函数时会返回什么类型的数据
- 示例
使用该函数的一个具体示例
本部分中的示例不会在已创建的表中构建空间索引。如果想要创建空间索引,请参阅为包含 ST_Geometry 列的表创建空间索引获取相关说明。
有关针对 ST_Geometry 的“IBM 函数参考”的信息,请参阅 IBM Informix Spatial DataBlade 模块用户指南 的第 8 章“SQL 函数”,以及 DB2 Spatial Extender 和 Geodetic Extender 用户指南和参考 中的第 22 章“空间函数:类别和用途”与第 23 章“空间函数:语法和参数”。
空间参考 ID
创建几何并将其插入表中之前,必须具有可用的有效空间参考 ID (SRID)。对于 Oracle 的空间类型,SRID 必须位于 ST_SPATIAL_REFERENCES 表中,并且在 SDE.SPATIAL_REFERENCES 表中具有匹配的记录。对于 PostgreSQL 的空间类型,SRID 必须位于 public.sde_spatial_references 表中。
实现上述要求的最简单方法是使用 ArcGIS Desktop 加载或创建带有要使用的有效空间参考值的要素类。确保创建的要素类使用 ST_Geometry 存储。可以创建带有所需空间参考信息的空要素类作为模板。这样将在 Oracle 的 SDE.SPATIAL_REFERENCES 和 ST_SPATIAL_REFERENCES 表中创建记录,或在 PostgreSQL 的 public.sde_spatial_references 表中创建记录。查询 LAYERS (Oracle) 或 sde_layers (PostgreSQL) 表可找到分配给图层的 SRID。然后可在使用 SQL 创建空间表并插入数据时使用该 SRID。
为了使用本帮助系统中的示例,已向 ST_SPATIAL_REFERENCES 和 sde_spatial_references 表中添加了一个记录来表示未知空间参考。该记录的 SRID 为 0。可以将此 SRID 用于帮助中的示例。这不是正式 SRID,它用于执行示例 SQL 代码。强烈建议不要为生产数据使用该 SRID。
从 ArcGIS 9.3 开始,Oracle 的 ArcSDE 地理数据库中包含 0 SRID。
如果决定使用数据库中已存在的其他 SRID 值执行这些示例,则必须更改示例的坐标以反映 SRID 值的空间参考。
如果要使用 SQL 将空间参考添加到 ST_SPATIAL_REFERENCES 或 sde_spatial_references 表中,请参阅使用 SQL 创建空间参考。
SQL 函数的列表
单击下面的链接转到这些函数,这些函数可以与 Oracle 和 PostgreSQL 中的 ST_Geometry 结合使用,也可与 Oracle、PostgreSQL 和 SQL Server 中的 ST_Raster 结合使用。
从 ArcSDE 9.3 起,当在 ArcSDE for Oracle 的全新安装中使用 ST_Geometry 函数时,必须用 sde. 对函数和运算符进行限定例如,ST_Buffer 经过限定就是 sde.ST_Buffer。向软件添加 sde. 即表示函数存储在 sde 用户的方案中。由于 Oracle 不再支持曾用于映射至函数的公用同义词,因此必须进行此操作。对于已升级的 ArcSDE for Oracle 10g 或 Oracle 9i,和已升级的 ArcSDE for PostgreSQL,限定并非是必须的,但包括限定符是一种良好的做法。
当在所有数据库中使用 ST_Raster 函数时,必须使用 ArcSDE 管理员的方案来限定函数。在大多数情况下,该限定符为 sde.但在 SQL Server 数据库中却可能为 dbo.
ST_Curve(仅限 Oracle) |
ST_GeomCollFromShape(仅限 PostgreSQL) |
ST_GeomCollFromWKB(仅限 PostgreSQL) |
ST_GeomFromShape(仅限 PostgreSQL) |
ST_GeomFromText(仅限 Oracle) |
ST_LineFromShape(仅限 PostgreSQL) |
ST_LineFromText(仅限 Oracle) |
ST_MLineFromShape(仅限 PostgreSQL) |
ST_MLineFromText(仅限 Oracle) |
ST_MPointFromShape(仅限 PostgreSQL) |
ST_MpointFromText(仅限 Oracle) |
ST_MpolyFromText(仅限 Oracle) |
ST_MultiCurve(仅限 Oracle) |
ST_MultiSurface(仅限 Oracle) |
ST_PointFromShape(仅限 PostgreSQL) |
ST_PointFromText(仅限 Oracle) |
ST_PolyFromShape(仅限 PostgreSQL) |
ST_PolyFromText(仅限 Oracle) |
ST_Surface(仅限 Oracle) |
ST_Entity(仅限 Oracle) |
ST_GeoSize(仅限 PostgreSQL) |
ST_Is3d(仅限 Oracle) |
ST_IsMeasured(仅限 Oracle) |
ST_EnvIntersects(仅限 Oracle) |
ST_Aggr_ConvexHull(仅限 Oracle) |
ST_Aggr_Intersection(仅限 Oracle) |
ST_Aggr_Union(仅限 Oracle) |
ST_Equalsrs(仅限 PostgreSQL) |
对于除 ST_Geometry 之外的空间类型(如 PostGIS 几何类型或 Oracle SDO_Geometry 类型),请分别查阅 PostGIS 或 Oracle Spatial 文档,以获取每种类型所使用函数的信息。PostGIS 文档可在 www.postgis.org 中找到。Oracle 文档可在 Oracle 网站找到。
函数名称因 DBMS 实现的不同而有所不同。在 Oracle 和 SQL Server 中,函数是 ST_Raster 或 ST_PixelData 对象的成员方法。在 PostgreSQL 中,它们是在 PL/SQL 包级别实现的 SQL 函数。请注意,当您将这些函数与 SQL Server 结合使用时必须使用所示的大小写形式。在与 Oracle 或 PostgreSQL 结合使用时,无论使用全小写、全大写还是大小写混合形式都可以。
等效函数如下表所示:
Oracle 和 SQL Server 函数 | PostgreSQL 函数 |
---|---|
ST_PixelData.getValueByLoc(仅限 SQL Server) | |
setvalue | |
ST_Raster.getValueByLoc(仅限 SQL Server) | |
ST_Raster_Util.checkLibraryVersion(仅限 Oracle) | |
ST_Raster_Util.getLibraryVersion(仅限 Oracle) | |