Oracle Spatial定义空间参考系(一、地理坐标系)

GIS
748 0

本文介绍如何在Oracle Spatial空间数据中添加自定义坐标系。

Oracle 11g r2数据库中没有定义2000国家大地坐标系(CGCS2000,SRID=4490),本文将详细说明添加该坐标系的全过程。

1. 判断Oracle Spatial中是否存在该空间参考系

在视图MDSYS.CS_SRS视图中查找指定SRID值的空间参考系是否存在。

select * from MDSYS.CS_SRS where SRID = 4490;

如果不存在,则按照下面的流程进行添加。

2. 查找空间参考系的详细信息

从EPSG官网 https://epsg.org 查询空间参考系的详细信息。

点击顶部导航栏 EPSG Dataset -> Text Search进入查询页面。

搜索栏中输入 4490 进行搜索。点击搜索结果名称,进入详情页面。如下图所示:

2.1 定义信息

点击右上角的WKT查看以WKT描述内容。

2.2 说明

GEOGCRS[     // 说明括号[]中定义的是一个地理坐标系
    "China Geodetic Coordinate System 2000",    // 该地理坐标系的名称
    DATUM[    // 大地基准面
        "China 2000",  // 大地基准面名称
        ELLIPSOID[       // 椭球体
            "CGCS2000",    // 椭球体名称
            6378137,       // 椭球体长半轴长
            298.257222101, // 椭球体的扁率的倒数
            LENGTHUNIT[    // 长度单位
                "metre",
                1,
                ID["EPSG",9001]
            ],
            ID["EPSG",1024]   // 椭球体的EPSG ID
        ],
        ID["EPSG",1043]   // 大地基准面的EPSG ID
    ],
    CS[    // Coordinate System 坐标系
        ellipsoidal,
        2,    // 2D,二维
        ID["EPSG",6422]   // 该坐标系的ID,可以通过该ID再次在网站中搜索,查看其详细参数
    ],
    AXIS[  // 坐标轴
        "latitude (Lat)",  // 名称,纬度(缩写Lat)
        north   // 向北
    ],
    AXIS[
        "longitude (Lon)",  // 名称,经度(缩写Lon)
        east    // 向东
    ],
    ANGLEUNIT[   // (角度)单位
        "degree",    // 度
        0.0174532925199433,   // 换算系数,即 1度 = π/180弧度
        ID["EPSG",9102]   // 该单位的EPSG ID
    ],
    ID["EPSG",4490]   // 该地理坐标系统的EPSG ID
]

3. 向数据库中添加空间参考系统SRID=4490

3.1 定义坐标系参数

根据2.2中的CS标识可知,2000国家大地坐标系采用的坐标系为EPSG=6422的大地坐标系。

首先在数据库中查找该坐标系是否存在。

select * from MDSYS.SDO_COORD_SYS where COORD_SYS_ID = 6422;

如果存在则跳过此步骤。

不存在的话,在EPSG官网搜索栏输入6422查看该坐标系的详细参数。

定义信息如下:

插入数据表MDSYS.SDO_COORD_SYS中:

insert into
 SDO_COORD_SYS
 (coord_sys_id, coord_sys_name, coord_sys_type, dimension, information_source, data_source)
values
 (
   6422,  -- EPSG ID
   'Ellipsoidal 2D CS. Axes: latitude, longitude. Orientations: north, east.  UoM: deg',  -- 名称
   'ellipsoidal',   -- 类型,椭球体
   2,         -- 维度
   'EPSG',    -- 信息来源
   'EPSG'     -- 数据来源
 );

3.2 定义坐标轴

根据坐标轴名称查询坐标轴ID,坐标轴名称来源于数据表 MDSYS.SDO_COORD_AXIS_NAMES

3.2.1 纬度

根据名称查询坐标轴名称:

select * from MDSYS.SDO_COORD_AXIS_NAMES t where t.COORD_AXIS_NAME like '%latitude%';

查询结果:

  • 9901: 大地纬度(选择这个)
  • 9926: 球形纬度

查询坐标轴信息:

select * from MDSYS.SDO_COORD_AXES WHERE COORD_SYS_ID = 6422 AND COORD_AXIS_NAME_ID = 9901;

如果不存在,则插入:

insert into
 MDSYS.SDO_COORD_AXES
 (coord_sys_id, coord_axis_name_id, coord_axis_orientation, coord_axis_abbreviation, uom_id, order)
values
 (
   6422,    -- 地理坐标系统均为6422大地坐标系
   9901,    -- 坐标轴名称ID,关联数据表MDSYS.SDO_COORD_AXIS_NAMES
   'north', -- 纬度坐标轴方向,向北
   'Lat',   -- 纬度缩写
   9122,    -- 坐标轴单位:度(degree)。从数据表MDSYS.SDO_UNITS_OF_MEASURE中查询得到UOM_ID=9122
   1        -- 坐标轴顺序,纬度为1,经度为2
 );

3.2.2 经度

select * from MDSYS.SDO_COORD_AXIS_NAMES t where t.COORD_AXIS_NAME like '%longitude%';

查询结果:

  • 9902: 大地经度(选择这个)
  • 9927: 球形经度

查询坐标轴信息:

select * from MDSYS.SDO_COORD_AXES WHERE COORD_SYS_ID = 6422 AND COORD_AXIS_NAME_ID = 9902;

如果不存在,则插入:

insert into
 MDSYS.SDO_COORD_AXES
 (coord_sys_id, coord_axis_name_id, coord_axis_orientation, coord_axis_abbreviation, uom_id, order)
values
 (
   6422,    -- 地理坐标系统均为6422大地坐标系
   9902,    -- 坐标轴名称ID,关联数据表MDSYS.SDO_COORD_AXIS_NAMES
   'east',  -- 经度坐标轴方向,向北
   'Long',  -- 经度缩写
   9122,    -- 坐标轴单位:度(degree)。从数据表MDSYS.SDO_UNITS_OF_MEASURE中查询得到UOM_ID=9122
   2        -- 坐标轴顺序,纬度为1,经度为2
 );

3.3 定义椭球体

根据2.2中的DATUM.ELLIPSOID.EPSG标识可知,2000国家大地坐标系采用的椭球体为EPSG=1024

首先在数据库中查找该椭球体定义是否存在。

select * from SDO_ELLIPSOIDS t where t.ELLIPSOID_ID = 1024;

如果存在则跳过此步骤。

不存在的话,在EPSG官网搜索栏输入1024查看该椭球体的详细参数。

定义信息如下:

插入数据表MDSYS.SDO_ELLIPSOIDS中:

insert into MDSYS.SDO_ELLIPSOIDS
 (ellipsoid_id, ellipsoid_name, semi_major_axis, uom_id, inv_flattening, semi_minor_axis, information_source, data_source, is_legacy, legacy_code)
values
 (
   1024,        -- 椭球体ID
   'CGCS2000',  -- 名称
   6378137,     -- 长半轴
   9001,        -- 单位:米(meter),从数据表MDSYS.SDO_UNITS_OF_MEASURE中查询得到UOM_ID=9001
   298.257222101, -- 扁率的倒数
   6356752.31414036, -- 短半轴
   'Chinese Academy of Surveying and Mapping.', -- 描述
   'OGP',    -- 数据来源
   'FALSE',  -- 是否在之前的版本中定义了相同的椭球体,由于是自定义椭球,此处直接设置FALSE
   null      -- 存在相同语义的椭球体的值,此处直接设置null
 );
  • 长半轴:a = 6378137
  • 扁率的倒数: $\frac{1}{\alpha}$ = 298.257222101

根据公式

$$\alpha = \frac{a - b}{a}$$

可得

$$b = a \times (1 - \alpha)$$

计算得到 b = 6356752.31414036 。

3.4 定义大地基准

根据2.2中的DATUM.EPSG标识可知,2000国家大地坐标系采用的大地基准为China 2000EPSG=1043)。

首先在数据库中查找该大地基准定义是否存在。

select * from MDSYS.SDO_DATUMS t where t.datum_id = 1043;

如果存在则跳过此步骤。

如果不存在,则在EPSG官网搜索栏输入1043查看该椭球体的详细参数。

定义信息如下:

插入数据表MDSYS.SDO_DATUMS中:

insert into
 MDSYS.SDO_DATUMS
 (datum_id, datum_name, datum_type, ellipsoid_id, prime_meridian_id, information_source, data_source, shift_x, shift_y, shift_z, rotate_x, rotate_y, rotate_z, scale_adjust, is_legacy, legacy_code)
values
 (
   1043,         -- 大地基准EPSG ID
   'China 2000', -- 名称
   'GEODETIC',   -- 类型
   1024,         -- 椭球体ID,参见本文3.3节
   8901,         -- 中央子午线ID,格林尼治0du经线(EPSG=8901)
   'Chinese Academy of Surveying and Mapping.',
   'OGP',
   null,   -- shift_x,7参数:在x轴上,将椭球中心相对于WGS 84椭球中心相对移动的米数
   null,   -- shift_y,7参数:在Y轴上,将椭球中心相对于WGS 84椭球中心相对移动的米数
   null,   -- shift_z,7参数:在Z轴上,将椭球中心相对于WGS 84椭球中心相对移动的米数
   null,   -- rotate_x,7参数,绕X轴旋转的弧秒数
   null,   -- rotate_y,7参数,绕Y轴旋转的弧秒数
   null,   -- rotate_z,7参数,绕Z轴旋转的弧秒数
   null,   -- scale_adjust,7参数:调整参数
   'FALSE',  -- 是否在之前的版本中定义了相同的椭球体,由于自定义,直接设为FALSE
   null  -- 存在相同语义的椭球体的值,此处直接设置null
 );

3.5 定义空间参考系

向视图MDSYS.SDO_COORD_REF_SYSTEM中插入数据:

insert into
  MDSYS.SDO_COORD_REF_SYSTEM
  (srid, coord_ref_sys_name, coord_ref_sys_kind, coord_sys_id, datum_id, geog_crs_datum_id, source_geog_srid, projection_conv_id, cmpd_horiz_srid, cmpd_vert_srid, information_source, data_source, is_legacy, legacy_code, legacy_wktext, legacy_cs_bounds, is_valid, supports_sdo_geometry) 
values
 (
   4490, --空间参考系SRID
   'China Geodetic Coordinate System 2000', --空间参考的名称
   'GEOGRAPHIC2D',  -- 空间参考的类型,这里为地理二维(Geographic2D)
   6422,  --坐标系ID,使用数据库中存在的6422,见本文2.2节: CS.EPSG=6422
   1043, --大地基准面ID,见本文2.2节:DATUM.ELLIPSOID.EPSG=1043
   1043, --坐标系的大地基准面ID,
   NULL,
   NULL,
   NULL,
   NULL,
   'EPSG. See 3D CRS for original information source.',
   'OGP',
   'FALSE',
   NULL,
   NULL,
   NULL,
   'TRUE',  -- 是否有效,是
   'TRUE'   -- 是否支持几何对象,支持
 );

至此,完成向Oracle Spatial空间数据库中添加2000国家大地坐标系(SRID:4490)

4. 测试

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

最后更新 2022-08-29
评论 ( 0 )
OωO
隐私评论