oracle spatial初探
一、Oracle Spatial簡介
Oracle 支援自定義的資料型別,可以用陣列,結構體或者帶有建構函式,功能函式的類來定義自己的物件型別。這樣的物件型別可以用於屬性列的資料型別,也可以用來建立物件表。而Oracle Spatial也正是基於此種特性所開發的一套空間資料處理系統。
Spatial 的自定義資料型別有很多,全部在MDSYS方案下,經常使用到的是SDO_GEOMETRY型別。SDO_GEOMETRY表示一個幾何物件,可以是點、線、面、多點、多線、多面或混合物件。
Spatial 在此資料型別的基礎上,實現了R樹空間索引和四叉樹空間索引,還以函式的形式實現了多種空間分析功能。
二、表的建立與應用(點型別)
-- 建立測試用表 CREATE TABLE "SPATIALTEST" ( "ID" VARCHAR2(20) NOT NULL, "NAME" VARCHAR2(100), "ADDRESS" VARCHAR2(200), "TELEPHONE" VARCHAR2(50), "LOCATION" "MDSYS"."SDO_GEOMETRY" )LOGGING; |
-- 建立主鍵約束 ALTER TABLE "SPATIALTEST" ADD CONSTRAINT "PK_SPATIAL" PRIMARY KEY("ID"); |
-- 根據使用者表填寫空間後設資料 INSERT INTO USER_SDO_GEOM_METADATA VALUES( 'SPATIALTEST', 'location', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('Longitude',-180,180,10), MDSYS.SDO_DIM_ELEMENT('Latitude',-90,90,10) ), 8307 ); |
-- 建立空間索引 CREATE INDEX SPATIAL_IDX ON SPATIALTEST(location) INDEXTYPE IS MDSYS.SPATIAL_INDEX; |
-- 匯入測試資料 INSERT INTO "SPATIALTEST" VALUES( 'dbeb7ea11eaf2b53a9b7', '小肥羊(天河店)', '廣州市天河區天壽路25號', '020-38217746', MDSYS.SDO_GEOMETRY( 2001, 8307, MDSYS.SDO_POINT_TYPE(113.3293658, 23.14338586, 0), NULL, NULL ) ); INSERT INTO "SPATIALTEST" VALUES( 'ef8393ef6273a72b2f70', '山東老家', '廣州市越秀區合群一馬路43號', '020-87778983', MDSYS.SDO_GEOMETRY( 2001, 8307, MDSYS.SDO_POINT_TYPE(113.2932474, 23.11883515, 0), NULL, NULL ) ); --其他INSERT INTO cola_markets VALUES( 2, 'cola_b', MDSYS.SDO_GEOMETRY( 2003, -- 2-dimensional polygon NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring) MDSYS.SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1) ) ); |
-- 屬性資訊查詢 SQL> select location from spatialtest;LOCATION(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES) -------------------------------------------------------------------------------- SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(113.329366, 23.1433859, 0), NULL, NULL)SQL> select s.location.SDO_POINT.x langtitude from spatialtest s;LANGTITUDE ---------- 113.329366 |
-- 空間分析查詢(113.2359818,23.16937253)周邊十公里資訊5條 SELECT B.id id, B.name name, B.dist dist FROM ( SELECT A.id id, A.name name, SDO_GEOM.SDO_DISTANCE(A.location,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),NULL,NULL),1) dist FROM spatialtest A WHERE SDO_WITHIN_DISTANCE(A.LOCATION,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),NULL,NULL),'distance=10000') = 'TRUE' ORDER BY A.name ) B WHERE ROWNUM <= 5 ; |
-- 空間分析查詢(113.2359818,23.16937253)附近的5條資訊 SELECT A.id id, A.name name,A.location.SDO_POINT.x langtitude, A.location.SDO_POINT.y latitude,MDSYS.SDO_NN_DISTANCE(1) distance FROM spatialtest A WHERE SDO_NN(A.LOCATION,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),null,null),'SDO_NUM_RES=5',1) = 'TRUE' ; |
-- Return the topological difference of two geometries. SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape, m.diminfo) FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' AND c_a.name = 'cola_a' AND c_c.name = 'cola_c'; |
三、MDYSYS.SDO_GEOMETRY結構
CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER, //表示幾何實體的型別 SDO_SRID NUMBER, //用來表示座標系(空間參考座標系),與幾何實體關聯 SDO_POINT MDSYS.SDO_POINT_TYPE, //使用X,Y,Z屬性值來定義物件型別 //它們都是NUMBER型別, //如果SDO_GEOMETRY的SDO_ELEM_INFO及SDO_ORDINATES陣列為 //空則SDO_POINT為非空,X和Y值就是點幾何實體的座標值 SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY, //使用變長NUMBER型陣列來表示。 //該屬性將告知如何解釋SDO_ORDINATES裡邊的座標值; SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY //儲存座標值 //形成空間物件的邊界 ); |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29212814/viewspace-1132978/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle spatialOracle
- Oracle Spatial 介紹Oracle
- oracle spatial 基礎知識之五Oracle
- oracle spatial之空間操作符Oracle
- Oracle Spatial中SDO_Geometry說明Oracle
- oracle spatial之基礎知識之一Oracle
- oracle spatial之基礎知識之二Oracle
- oracle spatial之基礎知識之三Oracle
- Java初探Oracle(轉)JavaOracle
- oracle spatial之基礎知識之四空間索引Oracle索引
- Oracle 20c 的 In-Memory 新特性 Spatial 和 Text 支援Oracle
- 初探Oracle Golden Gate(一)OracleGo
- Oracle 查詢轉換初探Oracle
- MySQL索引之空間索引(SPATIAL)MySql索引
- How to move Oracle Spatial objects from SYSAUX tablespace to a user defined tablespace [ID 1119758.1OracleObjectUX
- 初探oracle open初始化過程Oracle
- mysql索引型別:FULLTEXT、NORMAL、SPATIAL、UNIQUEMySql索引型別ORM
- 空間分析演算法——Spatial Jion演算法
- oracle12c的CDB和PDB初探Oracle
- Getting going quickly with Python, MongoDB and Spatial dataUIPythonMongoDB
- 【INDEX】Oracle19c 自動索引技術初探IndexOracle索引
- ORACLE中資料檔案大小及數量限制初探Oracle
- rhel4_oracle10g rac_ocfs2初探Oracle
- Entity Framework Tutorial Basics(33):Spatial Data type support in Entity Framework 5.0Framework
- Deno 初探
- ELK初探
- Nginx 初探Nginx
- Mobx 初探
- jQuery初探jQuery
- 初探IndexedDBIndex
- 初探PWA
- Puppeteer 初探
- Redis初探Redis
- 初探Firewalld
- Serverless初探Server
- Promise初探Promise
- Quantum 初探
- 初探TCPTCP