Sei sulla pagina 1di 12

Schema conceptuală a bazei de date folosite cu 3 tabele, dintre care minim o tabelă să conţină date

spaţiale:

Desenul cu obiectele spaţiale (varianta 1) sau datele spaţiale reale obţinute din diverse surse :
Scriptul de creare a tabelelor spaţiale:

create table companii

(cod_companie varchar(30) primary key,

denumire varchar2(30),

cod_adresa varchar(50),

forma_geom SDO_GEOMETRY,

CONSTRAINT fk_comp FOREIGN KEY (cod_adresa)

REFERENCES adrese (cod_adresa)

);

CREATE TABLE carduri

("ID_card" NUMBER PRIMARY KEY,

"ID_finantator" VARCHAR2(40),

"cod_companie" VARCHAR2(60),
"LOCALITATE" VARCHAR2(40),

"JUDET" VARCHAR2(30),

"LATITUDINE" NUMBER(15,12),

"LONGITUDINE" NUMBER(15,12),

"DATA" DATE,

"GEOM" "SDO_GEOMETRY",

CONSTRAINT fk_finc FOREIGN KEY ("cod_companie")

REFERENCES companii (cod_companie),

CONSTRAINT fk_card FOREIGN KEY ("ID_finantator")

REFERENCES finantatori (id));

Scripturile de adăugare a datelor spaţiale:

INSERT INTO companii VALUES(

'1', 'Sodexo','1',

SDO_GEOMETRY(

2003,

NULL,

NULL,

SDO_ELEM_INFO_ARRAY(1,1003,3),

SDO_ORDINATE_ARRAY(4,3, 10,7)

));

INSERT INTO companii VALUES(

'2', 'Edenred','2',

SDO_GEOMETRY(

2003,

NULL,

NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),

SDO_ORDINATE_ARRAY(2,2, 5,1, 4,6, 2,4,

1,3)

));

INSERT INTO companii VALUES(

'3', 'Up Romania','3',

SDO_GEOMETRY(

2003,

NULL,

NULL,

SDO_ELEM_INFO_ARRAY(1,1003,4),

SDO_ORDINATE_ARRAY(8,10, 7,11, 5,10)

));

INSERT INTO companii VALUES(

'4', 'Dejeuner','1',

SDO_GEOMETRY(

2003,

NULL,

NULL,

SDO_ELEM_INFO_ARRAY(1,1003,3),

SDO_ORDINATE_ARRAY(6,10, 5,12)

));

INSERT INTO companii VALUES(

'5', 'HP','1',

SDO_GEOMETRY(

2003,
NULL,

NULL,

SDO_ELEM_INFO_ARRAY(1,1003,3),

SDO_ORDINATE_ARRAY(1,5, 3,7)

));

INSERT INTO companii VALUES(

'6', 'Metro','4',

SDO_GEOMETRY(

2003,

NULL,

NULL,

SDO_ELEM_INFO_ARRAY(1,1003,4),

SDO_ORDINATE_ARRAY(8,15, 2,16, 5,10)

));

INSERT INTO companii VALUES(

'7', 'Adelina','5',

SDO_GEOMETRY(

2003,

NULL,

NULL,

SDO_ELEM_INFO_ARRAY(1,1003,1),

SDO_ORDINATE_ARRAY(2,2, 3,2, 13,10, 274,

1,3)

));
Insert into carduri values

(1, '1', '1', 'Bucuresti', 'Bucuresti', 46.327506, 27.06835, to_date('27-MAR-09','DD-MON-


RR'),MDSYS.SDO_GEOMETRY(2001, 8307,MDSYS.SDO_POINT_TYPE(27.06835, 46.327506, NULL),NULL,
NULL));

Insert into carduri values

(11, '1', '2', 'Bucuresti', 'Bucuresti', 44.4267674, 26.1025383, to_date('27-APR-10','DD-MON-


RR'),MDSYS.SDO_GEOMETRY(2001, 8307,MDSYS.SDO_POINT_TYPE(26.1025383, 44.4267674,
NULL),NULL, NULL));

Insert into carduri values

(2, '3', '7', 'Timisoara', 'Timis', 45.7494, 21.2272, to_date('30-JUN-19','DD-MON-


RR'),MDSYS.SDO_GEOMETRY(2001, 8307,MDSYS.SDO_POINT_TYPE( 21.2272, 45.7494, NULL),NULL,
NULL));

Insert into carduri values

(22, '1', '7', 'Arad', 'Arad', 46.19, 21.32, to_date('01-FEB-12','DD-MON-


RR'),MDSYS.SDO_GEOMETRY(2001, 8307,MDSYS.SDO_POINT_TYPE(21.32, 46.19, NULL),NULL, NULL));

Insert into carduri values

(3, '5', '5', 'Cluj-Napoca', 'Cluj', 46.7667, 23.6, to_date('07-JUL-13','DD-MON-


RR'),MDSYS.SDO_GEOMETRY(2001, 8307,MDSYS.SDO_POINT_TYPE(23.6, 46.7667, NULL),NULL, NULL));

Insert into carduri values

(33, '4', '6', 'Drobeta', 'Mehedinti', 44.4267674, 26.10253839, to_date('25-SEP-14','DD-MON-


RR'),MDSYS.SDO_GEOMETRY(2001, 8307,MDSYS.SDO_POINT_TYPE(26.10253839, 44.4267674,
NULL),NULL, NULL));

Insert into carduri values

(4, '4', '1', 'Sibiu', 'Siubiu', 44.4267674, 26.1025383, to_date('15-OCT-18','DD-MON-


RR'),MDSYS.SDO_GEOMETRY(2001, 8307,MDSYS.SDO_POINT_TYPE(26.1025383, 44.4267674,
NULL),NULL, NULL));
Actualizarea tabelei de metadate spaţiale:

INSERT INTO user_sdo_geom_metadata

(TABLE_NAME,

COLUMN_NAME,

DIMINFO,

SRID)

VALUES (

'companii',

'forma_geom',

SDO_DIM_ARRAY(

SDO_DIM_ELEMENT('X' , 0, 20, 0.005 ),

SDO_DIM_ELEMENT('Y', 0, 20, 0.005)

),

NULL

);

INSERT INTO user_sdo_geom_metadata

(TABLE_NAME,

COLUMN_NAME,

DIMINFO,

SRID)

VALUES

('carduri',

'geom',

SDO_DIM_ARRAY(

SDO_DIM_ELEMENT('Longitude', -180, 180, 0.5),

SDO_DIM_ELEMENT('Latitude', -90, 90, 0.5)

),
8307

);

Crearea indecşilor spaţiali:

CREATE INDEX idx_companie ON companii(forma_geom)

INDEXTYPE IS MDSYS.SPATIAL_INDEX;

CREATE INDEX carduri_spatial_idx

ON carduri(geom)

INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Vizualizarea datelor spaţiale în Map View, sub diverse criterii:


Interogările spaţiale (cerinţe, codul SQL şi PL-SQL ):

--1. Să se afişeze distanţa dintre companiile ce au codurile 1 şi7.

select SDO_GEOM.SDO_DISTANCE (c1.forma_geom, c2.forma_geom, 0.005 ) as distanta

from companii c1, companii c2

where c1.cod_companie ='1' and

c2.cod_companie ='7';

--2. Să se determine dacă există vreo relaţie spaţială între zona magazinelor ce au codurile 1 şi respectiv
7

select SDO_GEOM.RELATE (c1.forma_geom, 'anyinteract',c2.forma_geom, 0.005 ) relate

from companii c1, companii c2

where c1.cod_companie ='1' and

c2.cod_companie ='7';

--3. Să se determine dacă există vreo relaţie spaţială între zona magazinelor ce au codurile 1 şi respectiv
7 (Verifică dacă există geometrii - relația topologică COVEREDBY - geometrie specificată.)
select SDO_GEOM.RELATE (c1.forma_geom, 'COVEREDBY',c2.forma_geom, 0.005 ) relate

from companii c1, companii c2

where c1.cod_companie ='1' and

c2.cod_companie ='7';

--4. Următorul exemplu selectează geometriile care pot să interacționeze cu o fereastră de interogare (
un dreptunghi cu coordonatele din stânga-jos, din dreapta sus 4,6, 8,8)

SELECT *

FROM companii c

WHERE SDO_FILTER(c.forma_geom,

SDO_GEOMETRY(2003, NULL, NULL,

SDO_ELEM_INFO_ARRAY(1,1003,3),

SDO_ORDINATE_ARRAY(4,6, 8,8))

) = 'TRUE';
--5. Următorul exemplu găsește îngrijirea geometrică în interior INSIDE cu o fereastră de interogare (un
dreptunghi cu coordonatele din stânga jos, din stânga sus 5,6, 12,12)

--.

SELECT c.*

FROM companii c

WHERE SDO_INSIDE(c.forma_geom,

SDO_GEOMETRY(2003, NULL, NULL,

SDO_ELEM_INFO_ARRAY(1,1003,3),

SDO_ORDINATE_ARRAY(5,6, 12,12))

) = 'TRUE';

--6. Următorul exemplu găsește geometriile care au relația OVERLAPBDYINTERSECT cu o fereastră de


interogare ( un dreptunghi cu coordonatele 4,6, 8,8 din stânga jos, stânga)

SELECT c.*

FROM companii c

WHERE SDO_OVERLAPBDYINTERSECT(c.forma_geom,
SDO_GEOMETRY(2003, NULL, NULL,

SDO_ELEM_INFO_ARRAY(1,1003,3),

SDO_ORDINATE_ARRAY(4,6, 8,8))

) = 'TRUE';

Potrebbero piacerti anche