• oracle 的 SDO_GEOMETRY


    元数据定义

     1 CREATE OR REPLACE TYPE MDSYS.SDO_GEOMETRY          AS OBJECT (
     2            SDO_GTYPE       NUMBER,
     3            SDO_SRID        NUMBER,
     4            SDO_POINT       SDO_POINT_TYPE,
     5            SDO_ELEM_INFO   SDO_ELEM_INFO_ARRAY,
     6            SDO_ORDINATES   SDO_ORDINATE_ARRAY,
     7            MEMBER FUNCTION  GET_GTYPE
     8            RETURN NUMBER DETERMINISTIC,
     9            MEMBER FUNCTION  GET_DIMS
    10            RETURN NUMBER DETERMINISTIC,
    11            MEMBER FUNCTION  GET_LRS_DIM
    12            RETURN NUMBER DETERMINISTIC)
    13  
    14   ALTER TYPE SDO_GEOMETRY
    15   ADD MEMBER FUNCTION GET_WKB RETURN BLOB DETERMINISTIC,
    16   ADD MEMBER FUNCTION GET_WKT RETURN CLOB DETERMINISTIC,
    17   ADD MEMBER FUNCTION ST_CoordDim RETURN SMALLINT DETERMINISTIC,
    18   ADD MEMBER FUNCTION ST_IsValid RETURN INTEGER DETERMINISTIC,
    19   ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkt IN CLOB,
    20             srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT,
    21   ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkt IN VARCHAR2,
    22             srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT,
    23   ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkb IN BLOB,
    24             srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT
    25   CASCADE

    创建表

    create table test_geom(id int,geom MDSYS.SDO_GEOMETRY)

    使用wkt插入表

    insert into test_geom(id,geom) values(2,SDO_GEOMETRY('point(116.6 24.343)',4326))

    查看空间数据的wkt

    select a.geom.GET_WKT() from test_geom a

     SDO_SRID定义了空间坐标参考系统。如果SDO_SRID为null,则没有指定坐标系统,如果SDO_SRID不为null,那么它的值必须在在MDSYS.CS_SRS 表中的 SRID 列有对应的值,而且它的值必须插入USER_SDO_GEOM_METADATA视图中。MDSYS.CS_SRS 表参考 图2

    MDSYS.CS_SRS表

    列名

    类型

    列名描述

    CS_NAME

    VARCHAR2(68)

    坐标系统名称

    SRID

    NUMBER(38)

    空间参考ID,为唯一值。1-999999为spatial使用的空间参考,1000000以后为用户自定义

    AUTH_SRID

    NUMBER(38)

    可选的SRID,是个外键。另一个坐标系统的SRID

    AUTH_NAME

    VARCHAR2(256)

    WKTEXT

    VARCHAR2(2046)

    CS_BOUNDS

    MDSYS.SDO_GEOMETRY

    select *from MDSYS.CS_SRS,居然没有3857

    计算两点间的距离

     1 declare
     2   v_point SDO_GEOMETRY;
     3   v_ret   number;
     4 begin
     5   v_point := SDO_GEOMETRY('point(114.6 12.343)',4326);
     6 
     7   select SDO_GEOM.SDO_DISTANCE(a.geom, v_point, 0.005)
     8   into v_ret
     9   from test_geom a
    10   where id=2;
    11   
    12   dbms_output.put_line(v_ret);
    13 end;

    参考帮助

    http://docs.oracle.com/database/121/SPATL/toc.htm

    http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_sql_mm.htm#SPATL025

    http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objgeom.htm#SPATL120

  • 相关阅读:
    kubernetes 二进制安装v2
    Istio
    linux的history指令显示时间
    echarts折线图y轴刻度值按照某个值的倍数
    ubuntu下tesseract 4.0安装及参数使用
    chrome 浏览器下载大文件断掉的问题
    强化学习
    第十一篇 -- 2020总结以及2021期待
    字符串时间yyyyMMddHHmmss转成yyyy-MM-dd HH-mm-ss字符串格式
    windows安装mongodb,密码访问
  • 原文地址:https://www.cnblogs.com/weiweictgu/p/6749362.html
Copyright © 2020-2023  润新知