Difference between revisions of "Ds"
m |
m |
||
(19 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | ==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 | create table parcela | ||
(idParcela number primary key, | (idParcela number primary key, | ||
Line 23: | Line 38: | ||
NULL, | NULL, | ||
SDO_ELEM_INFO_ARRAY(1,1003,3), --obdelnik | SDO_ELEM_INFO_ARRAY(1,1003,3), --obdelnik | ||
− | SDO_ORDINATE_ARRAY(2,6, 9 | + | SDO_ORDINATE_ARRAY(2,6, 9,9) |
) | ) | ||
); | ); | ||
INSERT INTO parcela VALUES( | INSERT INTO parcela VALUES( | ||
− | + | 20, | |
'ova005', | 'ova005', | ||
SDO_GEOMETRY( 2003, | SDO_GEOMETRY( 2003, | ||
Line 40: | Line 55: | ||
idVlastnik number(6) not null, | idVlastnik number(6) not null, | ||
idParcela number(6) not null, | idParcela number(6) not null, | ||
− | odVlastni date not null, | + | odVlastni date not null, -- datum nabyti parcely |
− | doVlastni date, | + | doVlastni date, -- datum pozbyti parcely |
constraints vla_vla foreign key (idVlastnik) references vlastnik, | constraints vla_vla foreign key (idVlastnik) references vlastnik, | ||
constraints vla_pa foreign key (idParcela) references parcela | 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] |
Latest revision as of 05:50, 4 March 2014
Contents
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;