ROWID CODE |MAXCODE .GROUPCODE | META
2. Làm một thí nghiệm
2.2. Ví dụ về việc Inserting, Indexing và truy vấn cơ sở dữ liệu
spatial.
Phần nay sẽ đưa ra một vi dụ đơn giản về tao bảng trong
không gian, chèn dữ liệu và tạo ra các chỉ mục index trong không
gian và thực thi các câu lệnh truy van dữ liệu. Vi dụ này dựa vảo
bối cảnh lấy ví dụ về nhà máy sản xuất nước uống có gas để họ có thể xác định nơi nào về mặt địa lý có hứng thú với các sản pham của họ (nước uống cola). Vi dụ này có thể biểu diễn bat kỳ điều kiện nào người sử dụng đặt ra ví dụ : Nơi nào cola có thị phan nhiều nhất, nơi nào đang phải chịu áp lực từ đối thủ, v .vwv..
Mỗi vùng như vậy có thể là một thành phó, tỉnh thành, hoặc là một đất nước.
Ví dụ này sẽ thực hiện các công việc sau:
© Tao bảng COLA_MARKETS để chứa dữ liệu không gian.
Trang 31
© Chèn vào bảng 4 nơi hứng thú việc uống cola đó là vùng
cola_a, cola b, cola_c, cola_ d.
o Cập nhật USER_ SDO GEOM METADATA view để phản
ảnh kích thước của những phân vùng.
© Tạo chỉ mục không gian (COLA_SPATIAL_IDX).
o Thực thi một vài câu lệnh truy van csdi không gian.
Ví dụ:
Tạo bang COLA_MARKETS
CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY, --> là khóa chính va có kiểu số name VARCHAR2(32), --> có kiểu varchar2
shape MDSYS.SDO_GEOMETRY); --> có kiểu
MDSYS.SDO_GEOMETRY
Chèn vào bảng 4 phân vùng cola_a, cola_b, cola_c và cola_d
INSERT INTO cola_markets VALUES(
1, --> giá trị của mkt_id
'cola_a', ~> giá trị của name
MDSYS.SDO_GEOMETRY(--> giá trị của shape
2003, --> giá trị cho biết là đây là đa giác 2 chiều
NULL,
NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3), -- hinh chữ
nhật (1003 = mặt ngoài)
Trang 32
MDSYS.SDO_ORDINATE_ARRAY(1, 1, 5, 7) ) — chỉ cần khai
báo 2 tọa độ là dưới trái và trên phải.
}
INSERT INTO cola_markets VALUES(
2, ơ> giỏ trị của mkt_id
'cola _b', --> giá trị của name
MDSYS.SDO_GEOMETRY(--> giá trị của shape
2003, —> giá trị cho biết là đây là đa giác 2 chiều
NULL, --> SRID
NULL, --> SDO_POINT
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), -- 1 da giác (vòng đa giác mat ngoài)
MDSYS.SDO_ORDINATE_ARRAY(5, 1. 8, 1, 8, 6, 5, 7, 5, 1) --
> tọa độ
))
INSERT INTO cola_markets VALUES(
3,
‘cola_c’,
MDSYS.SDO_GEOMETRY(
2003, -- 2-dimensional polygon NULL,
NULL,
MDSYS.SDO_ELEM_INFO_ARRAY‘(1, 1003, 1),
MDSYS.SDO_ORDINATE_ARRAY(3, 3, 6, 3, 6, 5, 4, 5, 3, 3)
) );
Trang 33
INSERT INTO cola_markets VALUES(
4,
'cola_ đ,
MDSYS.SDO_GEOMETRY(
2003, — 2-dimensional polygon NULL,
NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 4), ---> hình tròn MDSYS.SDO_ORDINATE_ARRAY(8, 7, 10, 9, 8, 11) --> tọa độ
Cập nhật USER_SDO_GEOM_METADATA view dé phan anh
kích thước của những phan vùng
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
‘cola_markets’,
shape’,
MDSYS.SDO DIM ARRAY( --> lưới 20x20, tolerance gan bang 0
MDSYS.SDO_DIM_ELEMENT('X’, 0, 20, 0.005), MDSYS.SDO_DIM_ELEMENT('Y’, 0, 20, 0.005)
),
NULL -- SRID
):
--> Việc cập nhật nay là cần thiết trước khi tao chỉ mục không
gian.
Trang 34
Tạo chỉ mục không gian (COLA_SPATIAL_IDX)
CREATE INDEX cola_spatial_idx ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS(SDO_LEVEL = 8’);
Thực thi một vai câu lệnh truy van csdl không gian
— Trả về kết quả là đường giao giữa 2 đường cola_a và cola_c.
SELECT SDO_GEOM.SDO_INTERSECTION(c_a shape,
m.diminfo, c_c.shape, m.diminfo)
FROM cola_markets ca, cola_markets gó,
user_sdo_geom_metadata m
WHERE mtabe name = 'COLA MARKETS' AND m.column_name = 'SHAPE'
AND c_a.name = 'cola_a’ AND c_c.name = 'cola_c'.
-- Giữa 2 vùng cola_b và cola_d có mối quan hệ nao trong không
gian?
SELECT SDO_GEOM.RELATE(c_b.shape, m.diminfo,
‘anyinteract’,
c_d.shape, m.diminfo)
FROM cola_markets c_b, cola_markets c_d,
user_sdo_geom_metadata m
WHERE m.table name = ‘'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c_b.name = 'cola_b' AND c_d.name = 'cola_d’;
Trang 35
~ Trả vẻ tên của tắt cả các thị phần nước giải khát cola.
SELECT c.name, SDO_ GEOM.SDO_AREA(c.shape, m.diminfo) FROM cola_markets c, user_sdo_geom_metadata m
WHERE mtabe name = ‘COLA_MARKETS' AND
m.column_ name = 'SHAPE:
-- Trả về tên của thị phần cola _a.
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE mtable name = ‘COLA_MARKETS' AND
m.column_ name = 'SHAPE' AND c name = 'cola_a;
~ Trả về khỏang cách giữa 2 vùng.
SELECT SDO GEOMSDO DISTANCE(c b.shape, m.diminfo,
c_d.shape, m.diminfo)
FROM cola_markets c_b, cola_markets c_d,
user_sdo_geom_metadata m
WHERE mtable name = ‘COLA_MARKETS' AND
m.column_name = 'SHAPE'
AND c_b.name = 'cola b' AND c_d.name = ‘cola_d’;
Trang 36
Kiểm tra tinh hợp lệ của 1 vùng.
SELECT c.name, SDO_GEOM.VALIDATE_ GEOMETRY(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE mtable name = ‘COLA _MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_c’;
-- Kiểm tra hợp lệ của cột shape (tao bang dé lưu dữ liệu result)
CREATE TABLE validation results (mkt_id number, result
varchar2(10));
EXECUTE SDO_GEOM.VALIDATE_LAYER(COLA_MARKETS',
‘SHAPE’, 'MKT_ ID,
'VALIDATION_RESULTS');
SELECT * from validation_results;