以下概念及函数均在在Oracle中配置地理数据库(sde库)中使用:
一.空间类型
1.概念:存储几何数据的数据类型。所有空间信息均存储在空间列中;不存在其他的要素表。将空间信息包含在一个字段中使得在 ArcGIS 之外访问空间数据变得更加容易。
2.用途:空间类型具有关联的函数或方法,可用于通过结构化查询语言 (SQL) 访问和操作数据
二.SRID
1.概念:空间参考标识符, 是与特定坐标系、容差和分辨率关联的唯一标识符。
2.用途:SRID 的填充方式及其所示含义取决于存储数据所用的数据库。
某些数据库和空间类型(如 PostgreSQL 中的 PostGIS 几何或 SQL Server 中的地理类型)使用预定义的 EPSG 代码子集,只可使用具有这些 SRID 的空间参考。
其他情况下(如 Oracle、PostgreSQL、IBM DB2 和 Informix 中的 ST_Geometry 类型)可使用具有 Esri 定义的 SRID 的空间参考。
三.空间参考
1.概念:包括一个 x、y、z 值的坐标系。在企业级地理数据库中,空间参考还包含容差值和分辨率值。所有这些信息组合在一起将有助于指示平面地图上的形状表示地球上的哪个位置。
2.应用:在企业级地理数据库(以及已安装 ST_Geometry 类型的 Oracle 或 PostgreSQL 数据库)中,所有空间参考系统都存储在地理数据库系统表中。
数据库和存储类型 地理数据库系统表
Oracle (ST_Geometry) sde.st_spatial_references
四.ST_Geometry 存储类型
1.概念:
ST_Geometry是一种用户定义数据类型 (UDT),使用该数据类型可定义存储空间数据的列。本身是抽象的、无法实例化的超类。但其子类可以实例化。实例化的数据类型是可定义为表列的数据类型,并且其类型值插入表列之中。虽然可以将列定义为类型 ST_Geometry,但是您无法将 ST_Geometry 值插入此列,因为无法对 ST_Geometry 进行实例化。相反,您可以插入子类值。
2.结构图:
3.子类
ST_Geometry 的子类分为两类:基础几何子类和同类集合子类。基础几何包括 ST_Point、ST_LineString 和 ST_Polygon,而同类集合包括 ST_MultiPoint、ST_MultiLineString 和 ST_MultiPolygon。与名称的含义一致,同类集合是基础几何的集合。除了共享基础几何属性之外,同类集合还具有某些自身的属性。
如下图:
4.常用函数
创建表community:
CREATE TABLE community(id integer,shape sde.st_geometry);
4.1 ST_Geometry:
定义:通过熟知文本表示构造几何。
对于点线面:
语法:sde.st_geometry (wkt clob, srid integer)
示例:
INSERT INTO community(id, shape) VALUES (1,sde.st_geometry ('point (1 2)', 0));
INSERT INTO community(id, shape) VALUES (2,sde.st_geometry (1,2,null,null,0));
INSERT INTO community(id, shape) VALUES (3,sde.st_geometry ('linestring (33 2, 34 3, 35 6)', 0));
INSERT INTO community(id, shape) VALUES (4,sde.st_geometry ('polygon ((3 3, 4 6, 5 3, 3 3))', 0));
4.2 ST_Point:
定义:以熟知文本对象或坐标和空间参考 ID 作为输入参数,返回 ST_Point 类型的对象。
语法:
sde.st_point (wkt clob, srid integer)
sde.st_point (x number, y number, srid integer)
sde.st_point (x number, y number, m number, srid integer)
sde.st_point (x number, y number, z number, srid integer)
sde.st_point (x number, y number, z number, m number, srid integer)
在 INSERT 语句将 ST_Point 几何插入到 shape列之前,首先用 ST_Point 函数将点坐标转换为 ST_Point 几何。
示例:
INSERT INTO community VALUES (1,sde.st_point (10.01, 20.03, 0));
4.3 ST_PointFromText:
定义:在Oracle中,ST_PointFromText 以点类型的熟知文本表示和空间参考 ID 作为输入参数,返回点对象。
语法:
sde.st_pointfromtext (wkt varchar2, srid integer)
在调用 INSERT 语句将点插入到 shape 列之前,首先使用 ST_Point 函数将点文本坐标转换为点格式。
示例:
INSERT INTO community VALUES (1,sde.st_pointfromtext ('point (10.01 20.03)', 0));
4.4 ST_LineString:
定义:是一个通过熟知文本表示构造线串的存取函数。
语法:sde.st_linestring (wkt clob, srid integer)
示例:
INSERT INTO community (id, shape) VALUES (1,sde.st_linestring ('linestring (750 150, 750 750)', 0));
4.5 ST_LineFromText:
定义:以 ST_LineString 类型的熟知文本表示和空间参考 ID 作为输入,并返回 ST_LineString 类型的对象。
语法:sde.st_linefromtext (wkt clob, srid integer)
示例:INSERT INTO community VALUES (1,sde.st_linefromtext ('linestring (10.01 20.03, 35.93 19.04)', 0));
4.6 ST_Polygon:
定义:存取器函数以熟知文本 (WKT) 表示和空间参考 ID (SRID) 作为输入参数,并生成 ST_Polygon 类型的对象。
语法:
sde.st_polygon (wkt clob, srid integer)
示例:
INSERT INTO community VALUES ( 1, sde.st_polygon ('polygon ((10.01 20.03, 20.94 21.34, 35.93 10.04, 10.01 20.03))', 0));
4.7 ST_PolyFromText:
定义:以熟知文本表示和空间参考 ID 作为输入参数,返回 ST_Polygon 类型的对象。
语法:
sde.st_polyfromtext (wkt clob, srid integer)
示例:
INSERT INTO community VALUES (1,sde.st_polyfromtext ('polygon ((10.01 20.03, 10.52 40.11, 30.29 41.56,31.78 10.74, 10.01 20.03))', 0));
4.8 ST_SRID:
定义:以 ST_Geometry 对象作为输入参数,返回其空间参考 ID
语法:
sde.st_srid (shape sde.st_geometry)
示例:
SELECT sde.st_srid (shape) SRID FROM community ;
4.1 ST_AsText:
定义:获取一个 ST_Geometry 对象,然后返回其可识别的文本表示。
语法:sde.st_astext (shape sde.st_geometry)
示例:
SELECT id, sde.st_astext (shape) points FROM community;