Post on 19-Jan-2016
description
transcript
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 ]
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 ]
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 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;
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 ]
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
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 TABLE TABULKA (
jméno_věci VARCHAR2(32),
geometrie MDSYS.SDO_GEOMETRY
);
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
);
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
);
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
);
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
);
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
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
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)
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
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');
18
Ukázka
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
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ěci
AND MDSYS.SDO_WITHIN_DISTANCE(
A.geometrie,
D.geometrie,
'distance=50') = 'TRUE';
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'
);
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 ]
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
);
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)
)
);
29
Manipulace
SDO_GEOR
SDO_GEOR_UTL
[ http://www.oracle.com/technology/sample_code/products/spatial/htdocs/georaster.html ]
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?