alter table tablename add(shape mdsys.sdo_geometry); --新增空間字段
insert into user_sdo_geom_metadata values ('表名','shape--欄位名',sdo_dim_array(sdo_dim_element('x',-180,180,0.005),sdo_dim_element('y',-90,90,0.005)),4326); -- 插入空間元資料
create index 索引名 on 表名(空間欄位名) indextype is mdsys.spatial_index;--建立空間索引
create type sdo_geometry as object (
sdo_gtype number, //點線面 2001,2002,2003......
sdo_srid number,//座標參考係 4326
sdo_point sdo_point_type,//點元素,如果不是點型別,這個欄位為null,面和線元素的座標存在下面2個字段
sdo_elem_info sdo_elem_info_array,
sdo_ordinates sdo_ordinate_array);
mdsys.sdo_point_type(
110.349168777466,
20.0563142371321,
0)
mdsys.sdo_geometry(
2001,
4326,
mdsys.sdo_point_type(
110.349168777466,
20.0563142371321,
0),null,
null)
常用的oracle空間函式
- st_geometry型別的線元素的長度:直接 shape.length
- sdo_geometry型別的線元素的長度,或者面元素的周長:
sdo_geom.sdo_length(shape,0.05,'unit=m')
- 計算兩個sdo_geometry型別的點元素間的長度:
sdo_geom.sdo_distance(shape1,shape2,0.05,'unit=m')
sdo_geom.sdo_area(shape,0.05)
sdo_relate(
shape1,
shape2,
'mask=anyinteract+touch querytype=window')='true'
sdo_util.circle_polygon(
110.349168777466,--圓心座標
20.0563142371321,
500,--半徑
5),
oracle空間欄位shape維護
首先說以shape欄位在oracle中會被自動解析為5個子字段,分別是shape.sdo gtype,型別分為點,線,麵等,點是指只有一組座標代號為2001,線就是兩個點了也就是有兩組座標2002後面的應該都知道了,然後就是shape.sdo srid,shape.sdo point.x,shape...
Oracle中空間字段建立索引
建立表 create table testspatial id varchar2 20 not null,name varchar2 100 address varchar2 200 telephone varchar2 50 location sdo geometry 插入資料 insert in...
Oracle欄位占用物理空間測試
建立測試表 create table amwu graderecord sno varchar2 255 sname varchar2 255 dormitory varchar2 255 grade int 插入110w條資料,只插入grade欄位 insert into amwu gradere...