1 / 30

Prostorové databáze

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;

flower
Download Presentation

Prostorové databáze

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Prostorové databáze PDB demonstrační cvičení Oracle [ http://www.fit.vutbr.cz/~chmelarp/pdb/ ] [http://www.fit.vutbr.cz/study/courses/PDB]

  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)); SELECTREF(p) INTO xFROM person_tab pWHERE ...… p.manager.name … ; [ Kuba ]

  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 ));

  4. Kolekce CREATE TYPE WeekDays ASVARRAY(7) OFVARCHAR(10); CREATE TYPE PhoneNumberTable AS TABLE OF PhoneNumber; CREATE TYPE Person AS OBJECT (...phoneNumbers PhoneNumberTable); = CREATE TABLE person_tab OF PersonNESTED TABLE phoneNumbers STORE AS phoneNumbers_tab;

  5. 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 ]

  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_OBJECTS ALL_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

  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);

  8. Vytvoření tabulky Jméno a sloupec musí korespondovat s metadaty CREATE TABLETABULKA (jméno_věciVARCHAR2(32),geometrieMDSYS.SDO_GEOMETRY);

  9. SDO_GEOMETRY Předdefinováno jako: CREATE TYPE SDO_GEOMETRY AS OBJECT (SDO_GTYPENUMBER,SDO_SRID NUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);

  10. SDO_GTYPE CREATE TYPESDO_GEOMETRY AS OBJECT (SDO_GTYPENUMBER,SDO_SRID NUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); 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

  11. SDO_SRID CREATE TYPESDO_GEOMETRY AS OBJECT (SDO_GTYPENUMBER,SDO_SRID NUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); Souřadný systém Euklidovský typicky NULL

  12. SDO_POINT CREATE TYPESDO_GEOMETRY AS OBJECT (SDO_GTYPENUMBER,SDO_SRID NUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); 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

  13. SDO_ELEM_INFO CREATE TYPESDO_GEOMETRY AS OBJECT (SDO_GTYPENUMBER,SDO_SRIDNUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFOMDSYS.SDO_ELEM_INFO_ARRAY,SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); 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

  14. SDO_ORDINATES CREATE TYPESDO_GEOMETRY AS OBJECT (SDO_GTYPENUMBER,SDO_SRIDNUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,SDO_ORDINATESMDSYS.SDO_ORDINATE_ARRAY); Pole (n-tic) • Seznam bodů, které tvoří objekt definovaný v SDO_ELEM_INFO • X, Y, Z • Důležitý offset • Musí odpovídat definici

  15. A = 40 , 20 B = 110 , 90 exterior rectangle ETYPE = 1003 E _ INTERPRETATION = 3 MDSYS . SDO _ ORDINATE _ ARRAY ( A , B ) 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)));

  16. A = 75 , 15 B = 115 , 55 C = 75 , 95 exterior circle ETYPE = 1003 E _ INTERPRETATION = 4 MDSYS . SDO _ ORDINATE _ ARRAY ( A , B , C ) 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,)));

  17. Vytvoření indexu Až po vložení dat • Ne nad prázdnou tabulkou Detaily viz dokumentace CREATE INDEXTABULKA_I ONTABULKA(geometrie)INDEXTYPE IS MDSYS.SPATIAL_INDEX; CREATE INDEXTABULKA_I ONTABULKA(geometrie)INDEXTYPE IS MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL = 6, SDO_NUMTILES=12');

  18. Ukázka

  19. 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

  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.

  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).

  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ů.

  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ů.

  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ěciAND MDSYS.SDO_WITHIN_DISTANCE(A.geometrie,D.geometrie,'distance=50') = 'TRUE';

  25. Ukázka dotazu SELECT 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.GIDAND 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' );

  26. 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 ]

  27. Vytvoření tabulky CREATE TABLE georaster_table( georid VARCHAR2(32),georaster SDO_GEORASTER ); CREATE TYPE SDO_GEORASTERAS OBJECT(rasterTypeNUMBER,spatialExtentMDSYS.SDO_GEOMETRY,rasterDataTable VARCHAR2(32),rasterID NUMBER,metadata SYS.XMLType);

  28. Vytvoření rastru CREATE TABLE rasterDataTable_1 OF SDO_RASTER(PRIMARY KEY (rasterID, pyramidLevel, bandBlockNumber,rowBlockNumber, columnBlockNumber))TABLESPACE geor_tbs NOLOGGINGLOB(rasterBlock) STORE AS rdt_1_rbseg(TABLESPACE geor_tbs_2CHUNK 8192CACHE READSNOLOGGINGPCTVERSION 0STORAGE (PCTINCREASE 0) ));

  29. Manipulace • SDO_GEOR • SDO_GEOR_UTL [ http://www.oracle.com/technology/sample_code/products/spatial/htdocs/georaster.html ]

  30. Díky Otázky?

More Related