Prostorové databáze

30
Dušan kolář Petr Chmelař UIFS FIT VUT PDB Spatial OR koncept Vytvoření tabulky Dotazy a operace GeoRaster 1 / 30 Prostorové databáze PDB demonstrační cvičení Oracle [ http://www.fit.vutbr.cz/~chmelarp/pdb/ ] [ http://www.fit.vutbr.cz/study/courses/PDB ]

description

Prostorové databáze. PDB demonstrační cvičení Oracle [ http://www.fit.vutbr.cz/~chmelarp/pdb/ ] [ http://www. fit.vutbr.cz /study/courses/PDB ]. Objekty v databázi. CREATE TYPE Person AS OBJECT ( name VARCHAR(30) , birthdate DATE , MEMBER FUNCTION getAge RETURN NUMBER ) NOT FINAL; - PowerPoint PPT Presentation

Transcript of Prostorové databáze

Page 1: Prostorové databáze

Dušan kolář

Petr Chmelař

UIFS FIT VUT

PDB

Spatial

OR koncept

Vytvoření tabulky

Dotazy a operace

GeoRaster

1 / 30

Prostorové databáze

PDB demonstrační cvičení

Oracle

[ http://www.fit.vutbr.cz/~chmelarp/pdb/ ]

[ http://www.fit.vutbr.cz/study/courses/PDB ]

Page 2: Prostorové databáze

2

Objekty v databázi

CREATE TYPE Person AS OBJECT (

name VARCHAR(30),

birthdate DATE,

MEMBER FUNCTION getAge RETURN NUMBER

) NOT FINAL;

CREATE TYPE Employee UNDER Person (

salary NUMBER,

manager REF Employee,

MEMBER PROCEDURE incrSalary (increment NUMBER)

);

SELECT REF(p) INTO x FROM person_tab p WHERE ...

… p.manager.name … ;

[ Kuba ]

Page 3: Prostorové databáze

3

Objektově relační schizofrenie

CREATE TABLE person_tab OF Person;

INSERT INTO person_tab

VALUES ( 'Jim Smith', '15 Jun 1965' );

INSERT INTO person_tab

VALUES ( Person( 'Jim Smith', '15 Jun 1965‘ ) );

INSERT INTO person_tab

VALUES ( Employee( 'Jim Smith', '15 Jun 1965', 5000 ) );

Page 4: Prostorové databáze

4

Kolekce

CREATE TYPE WeekDays AS VARRAY(7) OF VARCHAR(10);

CREATE TYPE PhoneNumberTable AS TABLE OF PhoneNumber;

CREATE TYPE Person AS OBJECT (

...

phoneNumbers PhoneNumberTable

);

=

CREATE TABLE person_tab OF Person

NESTED TABLE phoneNumbers STORE AS phoneNumbers_tab;

Page 5: Prostorové databáze

Dušan kolář

Petr Chmelař

UIFS FIT VUT

PDB

Spatial

OR koncept

Vytvoření tabulky

Dotazy a operace

GeoRaster

5 / 30

Vytvoření tabulky

Tabulka s metadaty

Vložení metadat

Vytvoření tabulky s prostorovými daty

Vložení dat

Vytvoření indexu

[

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14255.pdf ]

Page 6: Prostorové databáze

6

Tabulka s metadaty

Nevytváří se, od verze 9.X.Y již součástí systému (pohled v MDSYS)

CREATE TABLE USER_SDO_GEOM_METADATA (

TABLE_NAME VARCHAR2(30),

COLUMN_NAME VARCHAR2(30),

DIMINFO MDSYS.SDO_DIM_ARRAY,

SRID zadává se NULL

); Listing Information about Schema Objects

ALL_OBJECTS, USER_OBJECTSALL_CATALOG, USER_CATALOG ALL_TABLES, USER_TABLES ALL_TAB_COLUMNS, USER_TAB_COLUMNS ALL_TAB_COMMENTS, USER_TAB_COMMENTS ALL_COL_COMMENTS, USER_COL_COMMENTS ALL_VIEWS, USER_VIEWS ALL_MVIEWS, USER_MVIEWS ALL_INDEXES, USER_INDEXES ALL_IND_COLUMNS, USER_IND_COLUMNS USER_CLUSTERS USER_CLU_COLUMNS ALL_SEQUENCES, USER_SEQUENCES ALL_SYNONYMS, USER_SYNONYMS ALL_DEPENDENCIES, USER_DEPENDENCIES

Page 7: Prostorové databáze

7

Vložení metadat

Nutné zaregistrovat informace o tom, kde jsou prostorová data – neděje se

automaticky, jako u relačních dat

INSERT INTO USER_SDO_GEOM_METADATA VALUES (

'TABULKA',

'geometrie',

MDSYS.SDO_DIM_ARRAY(

MDSYS.SDO_DIM_ELEMENT( 'X', 0, 400, 0.005 ),

MDSYS.SDO_DIM_ELEMENT( 'Y', 0, 300, 0.005 )

),

NULL

); CREATE TABLE USER_SDO_GEOM_METADATA ( TABLE_NAME VARCHAR2(30), COLUMN_NAME VARCHAR2(30), DIMINFO MDSYS.SDO_DIM_ARRAY, SRID zadává se NULL);

Page 8: Prostorové databáze

8

Vytvoření tabulky

Jméno a sloupec musí korespondovat s metadaty

CREATE TABLE TABULKA (

jméno_věci VARCHAR2(32),

geometrie MDSYS.SDO_GEOMETRY

);

Page 9: Prostorové databáze

9

SDO_GEOMETRY

Předdefinováno jako:

CREATE TYPE SDO_GEOMETRY AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY

);

Page 10: Prostorové databáze

10

SDO_GTYPE

4 číslice: dltt d: dimenze (1-4 (2)) l: lineární reference (0) tt: typ (00-07)

00: neznámý 01: bod 02: úsečka / křivka 03: polygon 04-07: viz manuál

CREATE TYPE SDO_GEOMETRY AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY

);

Page 11: Prostorové databáze

11

SDO_SRID

Souřadný systém

Euklidovský typicky NULL

CREATE TYPE SDO_GEOMETRY AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY

);

Page 12: Prostorové databáze

12

SDO_POINT

Objekt – bod

X, Y, Z

Jen pokud „l“ z GTYPE je 0

Typicky ve 2D

Další dvě položky MUSÍ být NULL

Pokud geometrie není bod je NULL

CREATE TYPE SDO_GEOMETRY AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY

);

Page 13: Prostorové databáze

13

CREATE TYPE SDO_GEOMETRY AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY

);

SDO_ELEM_INFO

Pole trojic Offset v dalším parametru SDO_ORDINATES Typ elementu Interpretace

1-1 Bod

2-1 Řetězec úseček

1003/2003-1 Polygon

1003/2003-3 Obdélník (rovnoběžný)

1003/2003-4 Kružnice

Page 14: Prostorové databáze

14

CREATE TYPE SDO_GEOMETRY AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY

);

SDO_ORDINATES

Pole (n-tic)

Seznam bodů, které tvoří objekt definovaný v SDO_ELEM_INFO

X, Y, Z

Důležitý offset

Musí odpovídat definici

Page 15: Prostorové databáze

15

Příklad dat

Obdélník

INSERT INTO TABULKA VALUES (

'PC',

MDSYS.SDO_GEOMETRY (

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY( 1,1003,3 ),

MDSYS.SDO_ORDINATE_ARRAY( 40,20, 110,90 )

)

);

A = 40,20

B = 110,90

exterior rectangleETYPE = 1003 E_INTERPRETATION = 3MDSYS.SDO_ORDINATE_ARRAY(A,B)

Page 16: Prostorové databáze

16

Příklad dat

Kružnice

INSERT INTO TABULKA VALUES (

'Kvetinac1',

MDSYS.SDO_GEOMETRY(

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY( 1,1003,4 ),

MDSYS.SDO_ORDINATE_ARRAY( 75,15, 75,95, 115,55,)

)

);

A = 75,15

B = 115,55

exterior circleETYPE = 1003 E_INTERPRETATION = 4MDSYS.SDO_ORDINATE_ARRAY(A,B,C)

C = 75,95

Page 17: Prostorové databáze

17

Vytvoření indexu

Až po vložení dat

Ne nad prázdnou tabulkou

Detaily viz dokumentace

CREATE INDEX TABULKA_I ON TABULKA(geometrie)

INDEXTYPE IS MDSYS.SPATIAL_INDEX;

CREATE INDEX TABULKA_I ON TABULKA(geometrie)

INDEXTYPE IS MDSYS.SPATIAL_INDEX

PARAMETERS('SDO_LEVEL = 6, SDO_NUMTILES=12');

Page 18: Prostorové databáze

18

Ukázka

Page 19: Prostorové databáze

Dušan kolář

Petr Chmelař

UIFS FIT VUT

PDB

Spatial

OR koncept

Vytvoření tabulky

Dotazy a operace

GeoRaster

19 / 30

Dotazování a operace

SQL

Funkce z objektů prostorové nadstavby nad objektově-

relačním schématem

Operátory

Geometrické funkce

Agregační funkce

Nelze bez indexu

Page 20: Prostorové databáze

20

Ukázka operací

SDO_GEOM.SDO_AREA(geom, tol, [,unit])

geom je geometrie (jak ji ukládáme do DB) vytažená z DB dotazem, nebo

je to konstanta stejného tvaru

tol je číselná přesnost, s jakou se má pracovat v rámci sítě bodů (zásadně

stejná, nebo hrubější, než jak je objekt uložen)

nepovinná je textová položka udávající jednotky

Výsledek:

Výsledkem je číselná hodnota udávající plochu 2D polygonu.

Page 21: Prostorové databáze

21

Ukázka operací

SDO_GEOM.SDO_CENTROID(geom, tol)

geom je geometrie (jak ji ukládáme do DB) vytažená z DB dotazem, nebo

je to konstanta stejného tvaru

tol je číselná přesnost, s jakou se má pracovat v rámci sítě bodů (zásadně

stejná, nebo hrubější, než jak je objekt uložen)

Výsledek:

Výsledkem je geometrie – bod. Jedná se o těžiště a je aplikovatelné na

polygon, multi-polygon, bod, bodový shluk (cluster).

Page 22: Prostorové databáze

22

Ukázka operací

SDO_GEOM.SDO_DISTANCE(geom1, geom2, tol, [,unit])

geom1/geom2 je geometrie (jak ji ukládáme do DB) vytažená z DB

dotazem, nebo je to konstanta stejného tvaru

tol je číselná přesnost, s jakou se má pracovat v rámci sítě bodů (zásadně

stejná, nebo hrubější, než jak je objekt uložen)

nepovinná je textová položka udávající jednotky

Výsledek:

Výsledkem je číselná hodnota udávající vzdálenost dvou nejbližších bodů,

nebo segmentů daných objektů.

Page 23: Prostorové databáze

23

Ukázka operací

SDO_GEOM.SDO_INTERSECTION(geom1, geom2, tol)

// UNION, XOR, DIFERENCE

geom1/geom2 je geometrie (jak ji ukládáme do DB) vytažená z DB

dotazem, nebo je to konstanta stejného tvaru

tol je číselná přesnost, s jakou se má pracovat v rámci sítě bodů (zásadně

stejná, nebo hrubější, než jak je objekt uložen)

Výsledek:

Výsledkem je geometrický obrazec daný topologickým průnikem obou

zadaných objektů.

Page 24: Prostorové databáze

24

Ukázka dotazu

SELECT A.jméno_věci

FROM TABULKA A, TABULKA D

WHERE D.jméno_věci='Kvetinac3'

AND A.jméno_věci<>D.jméno_věci

AND MDSYS.SDO_WITHIN_DISTANCE(

A.geometrie,

D.geometrie,

'distance=50') = 'TRUE';

Page 25: Prostorové databáze

25

Ukázka dotazuSELECT V.GID, W.GID, SDO_GEOM.SDO_DISTANCE(V.geometrie,

W.geometrie, 0.005) "Vzdalenost”

FROM VECIKDE V, VECIKDE W

WHERE W.GID <> V.GID

AND W.GID IN (

SELECT A.GID

FROM VECIKDE A, VECIKDE C

WHERE C.GID='Stul'

AND A.GID<>C.GID AND

SDO_RELATE(A.geometrie, C.geometrie, 'mask=anyinteract') = 'TRUE'

)

AND V.GID IN (SELECT A.GID

FROM VECIKDE A, VECIKDE C

WHERE C.GID='Stul'

AND A.GID<>C.GID AND

SDO_RELATE(A.geometrie, C.geometrie, 'mask=anyinteract') = 'TRUE'

);

Page 26: Prostorové databáze

Dušan kolář

Petr Chmelař

UIFS FIT VUT

PDB

Spatial

OR koncept

Vytvoření tabulky

Dotazy a operace

GeoRaster

26 / 30

GeoRaster

Rastrová data (grid, buňky, pixely)

Vzdálené pozorování

Fotogrammetrie

Mapové podklady

GIS

[

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14254.pdf ]

Page 27: Prostorové databáze

27

Vytvoření tabulky

CREATE TABLE georaster_table (

georid VARCHAR2(32),

georaster SDO_GEORASTER

);

CREATE TYPE SDO_GEORASTER AS OBJECT (

rasterType NUMBER,

spatialExtent MDSYS.SDO_GEOMETRY,

rasterDataTable VARCHAR2(32),

rasterID NUMBER,

metadata SYS.XMLType

);

Page 28: Prostorové databáze

28

Vytvoření rastru

CREATE TABLE rasterDataTable_1 OF SDO_RASTER (

PRIMARY KEY (rasterID, pyramidLevel, bandBlockNumber,

rowBlockNumber, columnBlockNumber))

TABLESPACE geor_tbs NOLOGGING

LOB(rasterBlock)

STORE AS rdt_1_rbseg(

TABLESPACE geor_tbs_2

CHUNK 8192

CACHE READS

NOLOGGING

PCTVERSION 0

STORAGE (PCTINCREASE 0)

)

);

Page 29: Prostorové databáze

29

Manipulace

SDO_GEOR

SDO_GEOR_UTL

[ http://www.oracle.com/technology/sample_code/products/spatial/htdocs/georaster.html ]

Page 30: Prostorové databáze

Dušan kolář

Petr Chmelař

UIFS FIT VUT

PDB

Spatial

OR koncept

Vytvoření tabulky

Dotazy a operace

GeoRaster

30 / 30

Díky

Otázky?