Professional Documents
Culture Documents
Tipovi Podataka I Prostorni Upiti
Tipovi Podataka I Prostorni Upiti
Sadraj
Indeksiranje prostornih podataka Upiti nad prostornim podacima Primeri indeksiranja i prostornih upita nad bazom podataka za katastar
12/12/2007
Oracle Spatial koristi indeksiranje pomou R-stabla. Indeksiranje pomou R-stabla pokazuje znaajno poboljanje performansi.
12/12/2007
Kvalitet R stabla
Na smanjenje kvaliteta R stabla utie veliki broj INSERT, UPDATE i DELETE operacija koje utiu na R-tree indeks. Smanjenje kvaliteta R stabla izaziva smanjenje performansi prilikom postavljanja prostornih upita.
12/12/2007
12/12/2007
Sadraj
Indeksiranje prostornih podataka Upiti nad prostornim podacima Primeri indeksiranja i prostornih upita nad bazom podataka za katastar
12/12/2007
Model upita
Oracle Spatial koristi dvoslojni model upita sa operacijama primarnog i sekundarnog filtera da bi razreio prostorne upite i prostorne spojeve. Termin se koristi da indicira da se dve razliite operacije izvode za svaki pojedinani upit. Rezultat ove dve kombinovane operacije je taan rezultujui skup datog upita. Ove dve operacije se nazivaju primarni i sekundarni filter.
12/12/2007
12/12/2007
Izraz SDO_FILTER(geometry1,geometry2) = 'TRUE' dodeljuje TRUE za parove objekata koji nisu nepovezani (disjoint), a inae dodeljuje FALSE.
12/12/2007
12/12/2007
Operator SDO_RELATE
SDO_RELATE operator implementira devetopreseni (nine-intersection) model za kategorizaciju binarnih topolokih relacija izmeu taaka, linija i poligona. Svaki prostorni objekat ima:
unutranjost (interior), granicu (boundary), spoljanjost (exterior).
Granice objekata
Granica se sastoji od taaka ili linija koje razdvajaju unutranjost od spoljanjosti. Granica linije se sastoji od njenih krajnjih taaka, meutim ako se one poklapaju (tj ako su ista taka), linija nema granicu. Granice multilinije su krajnje take svih linija komponenata, meutim ako se one poklapaju, samo kranje take koje se poklapaju neparan broj puta su granice. Granica poligona je linija koja opisuje njegov perimetar (obim). Unutranjost se sastoji od taaka koje su u objektu ali ne i na njegovoj granici, a spoljanjost se sastoji od taaka koje ne pripadaju objektu.
10
12/12/2007
Svaki par objekata ima devet moguih preseka izmeu njihovih komponenti. Parovi komponenti imaju kao rezultat preseka:
prazan (0) skup ili neprazan (1) skup.
Skup preseka izmeu dve geometrije je predstavljen pomou devetopresene matrice koja specificira koji parovi komponenti se seku a koji ne.
"101001111".
Topoloke relacije
DISJOINT: nepovezani granice i unutranjost se ne seku. TOUCH: dodiruje granice se seku ali se unutranjosti ne seku. OVERLAPBDYDISJOINT: preklopljen bez presecanja granica unutranjost jednog objekta preseca granicu i unutranjost drugog objekta, ali im se granice ne seku. Primer ove relacije je kada linija poinje izvan poligona a zavrava unutar poligona. OVERLAPBDYINTERSECT: preklopljen sa presecanjem granica granice i unutranjosti dva objekta se seku. EQUAL: jednaki dva objekta imaju istu granicu i unutranjost. CONTAINS: sadri unutranjost i granica jednog objekta su kompletno sadrani u unutranjosti drugog objekta. COVERS: pokriva unutranjost jednog objekta je kompletno sadrana u unutranjosti ili granici drugog objekta i njihove granice se seku. INSIDE: unutar suprotno od sadri (contains). A unutar B implicira B sadri A. COVEREDBY: pokriven sa suprotno od pokriva (covers). A pokriven sa B implicira B pokriva A. ON: na unutranjost i granica jednog objekta je na granici drugog objekta (i drugi objekat pokriva prvi objekat). Primer ove relacija je kada je linija na granici poligona. ANYINTERACT: interaguju objekti nisu nepovezani.
11
12/12/2007
Izraz SDO_RELATE(geometry1, geometry2, 'mask = <some_mask_val>') = 'TRUE' dodeljuje TRUE parovima objekata koji imaju topoloke relacije koje odgovaraju vrednosti zadate maske, a u suprotnom FALSE.
12
12/12/2007
13
12/12/2007
Operator SDO_WITHIN_DISTANCE
SDO_WITHIN_DISTANCE operator odreuje da li su dva prostorna objekta, A i B, unutar specificirane razdaljine jedan u odnosu na drugog. Ovaj operator prvo konstruie bafer razdaljine, Db, oko referentnog objekta B. On onda proverava da li su A i Db nepovezani. Bafer razdaljine objekta se sastoji od svih taaka unutar date razdaljine od tog objekta.
Izraz SDO_WITHIN_DISTANCE(arg1, arg2, arg3) = 'TRUE' dodeljuje TRUE parovima objekata koji su unutar specificirane razdaljine, a inae FALSE.
14
12/12/2007
15
12/12/2007
Operator SDO_NN
Operator SDO_NN se koristi da identifikuje najblie susede za datu geometriju. Operator SDO_NN vraa odreeni broj objekata iz kolone sa geometrijom koji su najblii datoj geometriji (na primer, pet najbliih restorana gradskom parku). U odreivanju koliko su blizu dve geometrije, koristi se najmanja mogua razdaljina izmeu bilo koje dve take na povrini.
16
12/12/2007
17
12/12/2007
ROWNUM <=2 ograniava da upit ne vrati vie od dva rezultata. Ako bi specificirali sdo_num_res=2 umesto ROWNUM <=2, a da pri tom sdo_batch_size nije specificiran, operator bi vratio dva najblia restorana bez obzira da li su kineski ili ne, a ako nisu kineski upit ne bi vratio nijedan rezultat.
18
12/12/2007
19
12/12/2007
20
12/12/2007
SDO_JOIN vraa objekat tipa SDO_ROWIDSET, koji se sastoji od tabele objekata tipa SDO_ROWIDPAIR, odnosno vraa parove identifikatora vrsta rowid1 i rowid2, gde je rowid1 rowid (identifikator vrste) iz table_name1, a rowid2 je rowid iz table_name2.
21
12/12/2007
Sadraj
Indeksiranje prostornih podataka Upiti nad prostornim podacima Primeri indeksiranja i prostornih upita nad bazom podataka za katastar
22
12/12/2007
Tabela KATASTARSKA_OPSTINA
Tabela PARCELA
23
12/12/2007
Tabela ZGRADA
24
12/12/2007
SDO_FILTER
Koje zgrade moda interaguju sa parcelom broj 800?
SELECT p.broj, z.broj, z.broj_parcele FROM parcela p, zgrada z WHERE SDO_FILTER(p.geometrija, z.geometrija)='TRUE' AND p.broj=800;
SDO_RELATE [1/5]
Koje zgrade interaguju sa parcelom broj 800?
SELECT p.broj, z.broj, z.broj_parcele FROM parcela p, zgrada z WHERE SDO_RELATE(p.geometrija, z.geometrija, mask=anyinteract)='TRUE' AND p.broj=800;
25
12/12/2007
SDO_RELATE [2/5]
Sa kojim parcelama, parcela broj 137, stoji u prostornom odnosu dodiruje?
SELECT p.broj FROM parcela p137, parcela p WHERE p137.broj = 137 AND SDO_RELATE(p.geometrija, p137.geometrija, mask=touch) = 'TRUE'; ILI SELECT p.broj FROM parcela p137, parcela p WHERE p137.broj = 137 AND SDO_TOUCH(p.geometrija, p137.geometrija) = 'TRUE';
SDO_RELATE [3/5]
Sa kojim zgradama parcela broj 800 stoji u prostornom odnosu sadri?
SELECT p.broj, z.broj FROM parcela p, zgrada z WHERE SDO_RELATE(p.geometrija, z.geometrija, mask=contains)='TRUE' AND p.broj=800; ILI SELECT p.broj, z.broj FROM parcela p, zgrada z WHERE SDO_CONTAINS(p.geometrija, z.geometrija)='TRUE' AND p.broj=800;
26
12/12/2007
SDO_RELATE [4/5]
Da li katastarska optina Popovi1 stoji u prostornom odnosu pokriva sa parcelom broj 291?
SELECT SDO_RELATE(k.geometrija, p.geometrija, mask=covers) FROM katastarska_opstina k, parcela p WHERE k.naziv = 'Popovi1' AND p.broj = 291; ILI SELECT SDO_COVERS(k.geometrija, p.geometrija) FROM katastarska_opstina k, parcela p WHERE k.naziv = 'Popovi1' AND p.broj = 291;
SDO_RELATE [5/5]
Koje parcele preklapa zadati pravougaonik?
SELECT p.broj, p.podbroj FROM parcela p WHERE SDO_RELATE(p.geometrija, SDO_GEOMETRY(2003, 31276, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(6602283.97,4959931.97, 6602359.48,4960016.78)), mask= overlapbdyintersect) = 'TRUE'; ILI SELECT p.broj, p.podbroj FROM parcela p WHERE SDO_OVERLAPBDYINTERSECT(p.geometrija, SDO_GEOMETRY(2003, 31276, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(6602283.97,4959931.97, 6602359.48,4960016.78)) ) = 'TRUE';
27
12/12/2007
SELECT z.broj, z.broj_parcele FROM zgrada z, zgrada z2 WHERE z2.broj_parcele=800 AND z2.broj=2 AND SDO_WITHIN_DISTANCE(z.geometrija, z2.geometrija, distance=10) = 'TRUE';
SELECT z.broj, z.broj_parcele FROM zgrada z, zgrada z2 WHERE z2.broj_parcele=800 AND z2.broj=2 AND SDO_WITHIN_DISTANCE(z.geometrija, z2.geometrija, distance=5) = 'TRUE';
28
12/12/2007
SDO_NN [1/4]
Kojih pet zgrada su najblie zgradi broj 2 na parceli 800?
Upotreba kljune rei sdo_num_res.
SELECT /*+ INDEX(parcela parcela_idx) */ z.broj, z.broj_parcele FROM zgrada z, zgrada z2 WHERE z2.broj_parcele=800 AND z2.broj=2 AND SDO_NN(z.geometrija, z2.geometrija, sdo_num_res=5) = 'TRUE';
SDO_NN [2/4]
Kojih pet zgrada su najblie zgradi broj 2 na parceli 800 i kolika je njihova razdaljina?
Upotreba kljune rei sdo_num_res.
SELECT /*+ INDEX(parcela parcela_idx) */ z.broj, z.broj_parcele, SDO_NN_DISTANCE(1) FROM zgrada z, zgrada z2 WHERE z2.broj_parcele=800 AND z2.broj=2 AND SDO_NN(z.geometrija, z2.geometrija, sdo_num_res=5, 1) = 'TRUE';
29
12/12/2007
SDO_NN [3/4]
Kojih pet zgrada su najblie zgradi broj 2 na parceli 800?
Upotreba kljune rei sdo_batch_size.
SELECT /*+ INDEX(parcela parcela_idx) */ z.broj, z.broj_parcele FROM zgrada z, zgrada z2 WHERE z2.broj_parcele=800 AND z2.broj=2 AND SDO_NN(z.geometrija, z2.geometrija, sdo_batch_size=5) = 'TRUE' AND rownum<=5;
SDO_NN [4/4]
Kojih pet zgrada su najblie zgradi broj 2 na parceli 800 i kolika je njihova razdaljina?
Upotreba kljune rei sdo_batch_size.
SELECT /*+ INDEX(parcela parcela_idx) */ z.broj, z.broj_parcele, SDO_NN_DISTANCE(1) FROM zgrada z, zgrada z2 WHERE z2.broj_parcele=800 AND z2.broj=2 AND SDO_NN(z.geometrija, z2.geometrija, sdo_batch_size=5, 1) = 'TRUE' AND rownum<=5;
30
12/12/2007
SDO_JOIN
Koje zgrade pripadaju kojoj parceli?
SELECT /*+ ordered */ a.broj, b.broj, b.broj_parcele FROM TABLE(SDO_JOIN('parcela', 'geometrija', 'zgrada', 'geometrija', 'mask=COVERS+CONTAINS')) c, parcela a, zgrada b WHERE c.rowid1 = a.rowid AND c.rowid2 = b.rowid ORDER BY a.broj;
Kraj prezentacije
Hvala na panji!
31