Difference between revisions of "Ds"

From Wikivyuka
Jump to: navigation, search
m
m
 
(17 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.9)
+
  SDO_ORDINATE_ARRAY(2,6, 9,9)
 
  )
 
  )
 
  );
 
  );
  
 
  INSERT INTO parcela VALUES(
 
  INSERT INTO parcela VALUES(
  2,
+
  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
 
  );
 
  );
  
  insert into vlastnictvi values(1, 1, 1, to_date('01-01-07', 'DD-MM-YY'),null);
+
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:
  
  select mp.name as moje_parcela, cp.name as cizi_stavba, SDO_GEOM.SDO_INTERSECTION(p1.tvarparcela, p2.tvarparcela,0.005)
+
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  
 
  from parcela p1, parcela p2  
  where p1.cisloparcely = 1 AND p2.cisloparcely = xx;
+
  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

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;


Zpět na stránku PDB