oracle 的 SDO_GEOMETRY
Posted 漂泊雪狼的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于oracle 的 SDO_GEOMETRY的主要内容,如果未能解决你的问题,请参考以下文章
使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)
oracle12c 上的休眠空间 - sdo_geometry 对象在 em.merge 上变为空