|
|
Line 10: |
Line 10: |
| Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad [[Parcely]] | | Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad [[Parcely]] |
| | | |
− | ==Příkládek==
| |
| | | |
− | Vytvořte jednoduchou strukturu dat, která založí evidenci Vlastníků a jejich Parcel. Promyslete tak, aby bylo možné vlastnit více parcel (současně i postupně v čase).
| |
− |
| |
− | === Vytvoření tabulek a vložení dat ===
| |
− |
| |
− | create table Vlastnik(
| |
− | id_vla NUMBER PRIMARY KEY,
| |
− | jmenovla varchar2(25) not null,
| |
− | prijmenivla varchar2(25) not null,
| |
− | adresavla varchar2(30)
| |
− | );
| |
− |
| |
− | insert into vlastnik values (1, 'Jan', 'Trčka', 'Frýdek-Místek');
| |
− |
| |
− | create table parcela
| |
− | (idParcela number primary key,
| |
− | ku varchar2(8),
| |
− | tvarParcely sdo_geometry
| |
− | );
| |
− |
| |
− | INSERT INTO parcela VALUES(
| |
− | 0,
| |
− | 'ova01',
| |
− | SDO_GEOMETRY(2003,
| |
− | NULL,
| |
− | NULL,
| |
− | SDO_ELEM_INFO_ARRAY(1,1003,3), --obdelnik
| |
− | SDO_ORDINATE_ARRAY(1,1,5,10)
| |
− | )
| |
− | );
| |
− |
| |
− | INSERT INTO parcela VALUES(
| |
− | 1,
| |
− | 'bu02',
| |
− | SDO_GEOMETRY(2003,
| |
− | NULL,
| |
− | NULL,
| |
− | SDO_ELEM_INFO_ARRAY(1,1003,3), --obdelnik
| |
− | SDO_ORDINATE_ARRAY(2,6, 9,9)
| |
− | )
| |
− | );
| |
− |
| |
− | INSERT INTO parcela VALUES(
| |
− | 20,
| |
− | 'ova005',
| |
− | SDO_GEOMETRY( 2003,
| |
− | NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1), -- polygon
| |
− | SDO_ORDINATE_ARRAY(5,10 , 4,10 , 2,10 , 9,15 , 9,16 , 20,10, 5,10 )
| |
− | )
| |
− | );
| |
− |
| |
− | create table vlastnictvi(
| |
− | idVlastnictvi number primary key,
| |
− | idVlastnik number(6) not null,
| |
− | idParcela number(6) not null,
| |
− | odVlastni date not null, -- datum nabyti parcely
| |
− | doVlastni date, -- datum pozbyti parcely
| |
− | constraints vla_vla foreign key (idVlastnik) references vlastnik,
| |
− | constraints vla_pa foreign key (idParcela) references parcela
| |
− | );
| |
− |
| |
− | Vložení záznamů do tabulky Vlastnictví - ukázka změn vlastnictví v čase. Tatáž parcela je postupně vlastněna jedním druhým a opět prvním vlastníkem. Pro vložení hodnot datumu je využita konverzní funkce ''to_date'', která umožňuje zadávat datum ve zvoleném formátu (zde DD-MM-YY).
| |
− |
| |
− | insert into vlastnictvi values(1, 2, 0, to_date('01-01-07', 'DD-MM-YY'), to_date('01-01-08', 'DD-MM-YY'));
| |
− | insert into vlastnictvi values((2, 4, 0, to_date('01-01-09', 'DD-MM-YY'),to_date('01-01-11', 'DD-MM-YY'));
| |
− | insert into vlastnictvi values(3, 2, 0, to_date('01-01-12', 'DD-MM-YY'),null);
| |
− |
| |
− | Vyhledání aktuálního vlastníka parcely s číslem id=0.
| |
− |
| |
− | select y.jmenovla, y.prijmenivla
| |
− | from vlastnictvi x, vlastnik y
| |
− | where x.id_vla = y.id_vla and x.doVlastni is null and x.id_par = 0;
| |
− |
| |
− | Vyhledání aktuálního vlastníka parcely s číselným označením 253.
| |
− |
| |
− | select y.jmenovla, y.prijmenivla
| |
− | from vlastnictvi x, vlastnik y, parcela z
| |
− | where x.id_par = z.id_par and x.id_vla = y.id_vla and x.doVlastni is null and z.cisloparcely = 253;
| |
− |
| |
− | === Tvorba prostorového indexu ===
| |
− |
| |
− | Nejprve je nutno "obeznámit" SŘBD s tím, že existuje tabulka s geometrickou složkou. Tyto informace se ukládají v systémové tabulce ''user_sdo_geom_metadata'', kam je nutno zapsat název tabulky, jméno sloupce obsahujícího geosložku, rámec prostoru, nad kterým bude vytvořen prostorový index a souřadnicový systém, ke kterému jsou data vztažena.
| |
− |
| |
− | insert into user_sdo_geom_metadata values ('parcela', 'tvarparcela',
| |
− | sdo_dim_array(sdo_dim_element('X',0,30,0.005),
| |
− | sdo_dim_element('Y',0,30,0.005)),
| |
− | null
| |
− | );
| |
− |
| |
− | Ověření správně uložených informací:
| |
− | select * from user_sdo_geom_metadata;
| |
− |
| |
− | Požadavek na prostorové zaindexování geometrie parcel:
| |
− |
| |
− | create index sp_par_idx on parcela(tvarparcela) indextype is mdsys.spatial_index;
| |
− |
| |
− | Teprve nyní je možné klást prostorové dotazy a zobrazit geometrickou složku v GeoRaptoru.
| |
− |
| |
− | === Dotazy nad daty o vlastnících a parcelách ===
| |
− |
| |
− | Jak bude vypadat průnik dvou parcel? Například, budu chtít postavit na dvou pozemcích (zakreslím si nový objekt přes hranice) a o kolik např. zemědělské půdy přijdu?
| |
− | select p1.cisloparcely, p2.cisloparcely, SDO_GEOM.SDO_INTERSECTION(p1.tvarparcela, p2.tvarparcela,0.005)
| |
− | from parcela p1, parcela p2
| |
− | where p1.cisloparcely = 1 AND p2.cisloparcely = xx; --xx je nový geoobjekt - tvar chystané stavby
| |
− |
| |
− | možná i sum
| |
− |
| |
− | vzdálenost mezi parcelami stejného typu - použít alter table a doplnit do Parcela nový sloupec
| |
− | ALTER TABLE table_name ADD column_name column-definition;
| |
− | ALTER TABLE Parcela ADD typParcela varchar2(15);
| |
− |
| |
− | další
| |
− | nakrelsit si v Georaptoru nějakou parcelu - napr trojuhelnik, kruh
| |
− | zkopirovat si hodnoty geometrie a vlozit do tabulky parcela, zjisti si definici vloženého prvku - zapsat do tabulky parcel = pomocí insert = ukázat propojení definice objektu a metod, které s nimi pracují
| |
− | spočítat si její obsah - create shape = dole je výsledek
| |
− | update obsahu prvně vložených parcel - přes výpočet GeoRaptor
| |
− |
| |
− | update parcela
| |
− | set vymera = 34
| |
− | where cisloparcely=253;
| |
− |
| |
− | dotázky - kolik je vech parcle, jak velké území zabírají, kolik pozemků ma jeden vlasník
| |
− |
| |
− | kolik pozemku vlastni jeden vlasnik?
| |
− | select count (*) from vlastnik group by id_vla;
| |
− |
| |
− | Protina se zamyslena stavba s moji parcelou?
| |
− |
| |
− | select SDO_GEOM.SDO_INTERSECTION(p1.tvarparcela, p2.tvarparcela, 0.005)
| |
− | from parcela p1, parcela p2
| |
− | where p1.cisloparcely = 258 AND p2.cisloparcely = 111; -- p1 = 253 je moje parcela, p2 = 111 stavba
| |
− |
| |
− | U kterých parcel dojde k záboru půdy při stavbě?
| |
− |
| |
− | select sdo_geom.sdo_intersection(p.tvarparcely,p2.tvarparcely,0.005) from parcela p, parcela p2
| |
− | where p2.cisloparcela=111;
| |
− |
| |
− |
| |
− |
| |
− | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze Zpět na stránku PDB]
| |
| | | |
| ==Cvičení 5 - Prostorové dotazy== | | ==Cvičení 5 - Prostorové dotazy== |
Princip práce s prostorovými daty v prostředí SŘBD Oracle.
Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad Parcely