標籤:circle http nbsp mod 資料 null bsp sys number
Oracle Spatial由一坨的對象資料類型,類型方法,操作子,函數與過程組合而成。一個地理對象作為一個SDO_GEOMETRY對象儲存在表的一個欄位裡。空間索引則由普通的DDL和DML語句來建立與維護。
本章主要說了一些例子示範如何建立,查詢,索引空間資料。
簡單的插入,索引與查詢空間資料例子
本節示範一個很簡單建立空間表,插入,建立索引,查詢資料的過程。
情境是一個軟飲料公司,用地理資訊來表示他們的產品(可樂)在各個地區的情況。這些情況可以是:市場份額,競爭壓力,增長潛力等等。而地區可以是鄰近的市,州,省或國家。
我們要作的是:
1.建立一個表(COLA_MARKETS)來儲存空間資料
2.插入四個(cola_a, cola_b, cola_c, cola_d)地區的資料
3.升級USER_SDO_GEOM_METADATA視圖來反正這些地區的維度資訊
4.建立空間索引(COLA_SPATIAL_IDX)
5.進行一些空間查詢
[sql] view plain copy
- CREATE TABLE cola_markets (
- mkt_id NUMBER PRIMARY KEY,
- name VARCHAR2(32),
- shape SDO_GEOMETRY);
[sql] view plain copy
- INSERT INTO cola_markets VALUES(
- 1,
- ‘cola_a‘,
- SDO_GEOMETRY(
- 2003, -- two-dimensional polygon
- NULL,
- NULL,
- SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
- SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
- -- define rectangle (lower left and upper right) with
- -- Cartesian-coordinate data
- )
- );
- -- The next two INSERT statements create areas of interest for
- -- Cola B and Cola C. These areas are simple polygons (but not
- -- rectangles).
- INSERT INTO cola_markets VALUES(
- 2,
- ‘cola_b‘,
- SDO_GEOMETRY(
- 2003, -- two-dimensional polygon
- NULL,
- NULL,
- SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
- SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
- )
- );
- INSERT INTO cola_markets VALUES(
- 3,
- ‘cola_c‘,
- SDO_GEOMETRY(
- 2003, -- two-dimensional polygon
- NULL,
- NULL,
- SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
- SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
- )
- );
- -- Now insert an area of interest for Cola D. This is a
- -- circle with a radius of 2. It is completely outside the
- -- first three areas of interest.
- INSERT INTO cola_markets VALUES(
- 4,
- ‘cola_d‘,
- SDO_GEOMETRY(
- 2003, -- two-dimensional polygon
- NULL,
- NULL,
- SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle
- SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
- )
- );
需要寫將建立的表的空間圖層的資訊插入一條到USER_SDO_GEOM_METADATA
[sql] view plain copy
- INSERT INTO user_sdo_geom_metadata
- (TABLE_NAME,
- COLUMN_NAME,
- DIMINFO,
- SRID)
- VALUES (
- ‘cola_markets‘,
- ‘shape‘,
- SDO_DIM_ARRAY( -- 20X20 grid
- SDO_DIM_ELEMENT(‘X‘, 0, 20, 0.005),
- SDO_DIM_ELEMENT(‘Y‘, 0, 20, 0.005)
- ),
- NULL -- SRID
- );
[sql] view plain copy
- -- SRID
USER_SDO_GEOM_METADATA 在登陸PL/SQL後,Users→MDSYS→Objects→Views→USER_SDO_GEOM_METADATA
開啟可以查看到(我已經插入了2個空間表的記錄了)
可以看到這個插入的記錄,點擊紅色方框初的任意一個,會出現:
[sql] view plain copy
- SDO_DIM_ARRAY( -- 20X20 grid
- SDO_DIM_ELEMENT(‘X‘, 0, 20, 0.005),
- SDO_DIM_ELEMENT(‘Y‘, 0, 20, 0.005)
- ),
就是這句sql的意思了,其中SDO_DIMNAME是一個二維的最大值和最小值的描述,SDO_LB是在X上面最小值,SDO_UB是X上面的最大值,SDO_TOLERANCE是指誤差的大小,這裡就是指0.005內的資料都會預設為一個資料。
第四步就是,建立空間索引(COLA_SPATIAL_IDX)
[sql] view plain copy
- CREATE INDEX cola_spatial_idx
- ON cola_markets(shape)
- INDEXTYPE IS MDSYS.SPATIAL_INDEX;
建立索引的目的是增加查詢速度(理論上也可以不建立索引進行查詢,但是實際中基本無法查詢的出來)
建立好索引後會在tables中產生一個下面的表:
這個是個索引表:
可以在系統的索引表中找的到。
以上就建立完成了SDO_Geometry表了;可以開始空間分析了。
oracle 建立SDO_Geometry表