Oracle Spatial定义空间参考系(三、测试)

GIS
550 0

前面两篇文章,介绍了如何添加地理坐标系(SRID=4490)和投影坐标系(SRID=4525)。

下面测试投影坐标(SRID=4525)是否有效。

1. 判断是否存在投影坐标系(SRID=4525)

select * from MDSYS.CS_SRS where SRID = 4525;

2. 点(POINT)

2.1 创建测试数据表

create table
 TEST_SRID_4525_POINT
 (
   GID NUMBER(10),    -- 要素ID
   GEOM SDO_GEOMETRY  -- 几何信息
 );

2.2 写入元数据表信息

insert into
 MDSYS.USER_SDO_GEOM_METADATA
 (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
values
 (
   'TEST_SRID_4525_POINT',   -- 数据表名称
   'GEOM',  -- 几何字段名称
   SDO_DIM_ARRAY(  -- 边界
     MDSYS.SDO_DIM_ELEMENT('X', 37741879.441, 37766551.886, 0.000000050),  -- X轴边界[37741879.441, 37766551.886]
     MDSYS.SDO_DIM_ELEMENT('Y', 2550159.418,  2593352.733,  0.000000050)   -- Y轴边界[2550159.418,  2593352.733]
   ),
   4525  -- SRID
 );

2.3 写入点数据

insert into
 TEST_SRID_4525_POINT
 (GID, GEOM)
values
 (
   1,  -- GID
   MDSYS.SDO_GEOMETRY(  -- 该点的几何数据
     2001,  -- 【SDO_GTYPE】 第一位2表示二维,第二位一般为0,第三四位01表示点(POINT)类型
     4525,  -- 【SRID】
     MDSYS.SDO_POINT_TYPE(37755042.450, 2566629.763, 0),  -- 【SDO_POINT,仅用于点几何体】点坐标
     NULL,  -- 【SDO_ELEM_INFO】坐标解读方式,对于点集合体该处为空
     NULL   -- 【SDO_ORDINATES】坐标值,对于点集合体该处为空
   )
 );

2.4 创建空间索引

create index SIDX_TEST_SRID_4525_POINT on TEST_SRID_4525_POINT(GEOM)
  indextype is MDSYS.SPATIAL_INDEX parameters('SDO_COMMIT_INTERVAL=1000');

3. 线(POLYLINE)

3.1 创建数据表

create table
 TEST_SRID_4525_POLYLINE
 (
   GID NUMBER(10),    -- 要素ID
   GEOM SDO_GEOMETRY  -- 几何信息
 );

3.2 写入元数据表信息

insert into
 MDSYS.USER_SDO_GEOM_METADATA
 (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
values
 (
   'TEST_SRID_4525_POLYLINE',   -- 数据表名称
   'GEOM',  -- 几何字段名称
   SDO_DIM_ARRAY(  -- 边界
     MDSYS.SDO_DIM_ELEMENT('X', 37741879.441, 37766551.886, 0.000000050),  -- X轴边界[37741879.441, 37766551.886]
     MDSYS.SDO_DIM_ELEMENT('Y', 2550159.418,  2593352.733,  0.000000050)   -- Y轴边界[2550159.418,  2593352.733]
   ),
   4525  -- SRID
 );

3.3 写入线数据

insert into
 TEST_SRID_4525_POLYLINE
 (GID, GEOM)
values
 (
   1,  -- GID
   MDSYS.SDO_GEOMETRY(  -- 该点的几何数据
     2002,  -- 【SDO_GTYPE】 第一位2表示二维,第二位一般为0,第三四位02表示线(POLYLINE)类型
     4525,  -- 【SRID】
     NULL,  -- 【SDO_POINT,仅用于点几何体】其他类型几何体,此处为空
     MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),  -- 对于点集合体该处为空【SDO_ELEM_INFO】坐标解读方式,对于点集合体该处为空
     MDSYS.SDO_ORDINATE_ARRAY(  -- 【SDO_ORDINATES】坐标值
       37750743.000, 2565769.866, -- 第1个点
       37757489.889, 2564711.530, -- 第2个点
       37759011.246, 2567092.785, -- 第3个点
       37755472.437, 2570102.426, -- 第4个点
       37757853.691, 2571524.565, -- 第5个点
       37757357.597, 2574931.082  -- 第6个点
     )   
   )
 );

4.4 创建空间索引

create index SIDX_TEST_SRID_4525_POLYLINE on TEST_SRID_4525_POLYLINE(GEOM)
  indextype is MDSYS.SPATIAL_INDEX parameters('SDO_COMMIT_INTERVAL=1000');

5.5 计算长度

select
 MDSYS.SDO_GEOM.SDO_LENGTH(t.GEOM, m.DIMINFO) AS LINE_LENGTH
from
 TEST_SRID_4525_POLYLINE t,
 MDSYS.USER_SDO_GEOM_METADATA m
where
 m.table_name = 'TEST_SRID_4525_POLYLINE' AND
 m.column_name = 'GEOM';

4. 面(POLYGON)

4.1 创建数据表

create table
 TEST_SRID_4525_POLYGON
 (
   GID NUMBER(10),    -- 要素ID
   GEOM SDO_GEOMETRY  -- 几何信息
 );

4.2 写入元数据表信息

insert into
 MDSYS.USER_SDO_GEOM_METADATA
 (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
values
 (
   'TEST_SRID_4525_POLYGON',   -- 数据表名称
   'GEOM',  -- 几何字段名称
   SDO_DIM_ARRAY(  -- 边界
     MDSYS.SDO_DIM_ELEMENT('X', 37741879.441, 37766551.886, 0.000000050),  -- X轴边界[37741879.441, 37766551.886]
     MDSYS.SDO_DIM_ELEMENT('Y', 2550159.418,  2593352.733,  0.000000050)   -- Y轴边界[2550159.418,  2593352.733]
   ),
   4525  -- SRID
 );

4.3 写入面数据

insert into
 TEST_SRID_4525_POLYGON
 (GID, GEOM)
values
 (
   1,  -- GID
   MDSYS.SDO_GEOMETRY(  -- 该点的几何数据
     2003,  -- 【SDO_GTYPE】 第一位2表示二维,第二位一般为0,第三四位03表示面(POLYGON)类型
     4525,  -- 【SRID】
     NULL,  -- 【SDO_POINT,仅用于点几何体】其他类型几何体,此处为空
     MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),  -- 对于点集合体该处为空【SDO_ELEM_INFO】坐标解读方式,对于点集合体该处为空
     MDSYS.SDO_ORDINATE_ARRAY(  -- 【SDO_ORDINATES】坐标值
       37750743.000, 2565769.866, -- 第1个点
       37757489.889, 2564711.530, -- 第2个点
       37759011.246, 2567092.785, -- 第3个点
       37755472.437, 2570102.426, -- 第4个点
       37757853.691, 2571524.565, -- 第5个点
       37757357.597, 2574931.082, -- 第6个点
       37750743.000, 2565769.866  -- 第1个点(首尾相接)
     )
   )
 );

4.4 创建空间索引

create index SIDX_TEST_SRID_4525_POLYGON on TEST_SRID_4525_POLYGON(GEOM)
  indextype is MDSYS.SPATIAL_INDEX parameters('SDO_COMMIT_INTERVAL=1000');

4.5 计算周长 和 面积

select
 MDSYS.SDO_GEOM.SDO_LENGTH(t.GEOM, m.DIMINFO) AS POLYGON_LENGTH,
 MDSYS.SDO_GEOM.SDO_AREA(t.GEOM, m.DIMINFO) AS POLYGON_AREA
from
 TEST_SRID_4525_POLYGON t,
 MDSYS.USER_SDO_GEOM_METADATA m
where
 m.table_name = 'TEST_SRID_4525_POLYGON' AND
 m.column_name = 'GEOM';
最后更新 2022-10-23
评论 ( 0 )
OωO
隐私评论