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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM