Difference between revisions of "Parcely"

From Wikivyuka
Jump to: navigation, search
m (Tabulka Vlastnik)
m (Tabulka PARCELA)
Line 76: Line 76:
 
  SDO_GEOMETRY(2003, NULL, NULL,  
 
  SDO_GEOMETRY(2003, NULL, NULL,  
 
  SDO_ELEM_INFO_ARRAY(1,1003,1), -- polygon
 
  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 ) )
+
  SDO_ORDINATE_ARRAY(5,10, 4,10, 2,10, 9,15, 9,16, 20,10, 5,10 ) )
 
  );
 
  );
 
   
 
   
Line 91: Line 91:
 
  );
 
  );
  
  INSERT INTO parcela VALUES(22, 'ova005',
+
  INSERT INTO parcela VALUES(23, 'ova005',
 
  SDO_GEOMETRY(2003, NULL, NULL,  
 
  SDO_GEOMETRY(2003, NULL, NULL,  
 
  SDO_ELEM_INFO_ARRAY(1,1003,1),  
 
  SDO_ELEM_INFO_ARRAY(1,1003,1),  
Line 97: Line 97:
 
  );
 
  );
  
  INSERT INTO parcela VALUES(22, 'ova005',
+
  INSERT INTO parcela VALUES(24, 'ova005',
 
  SDO_GEOMETRY(2003, NULL, NULL,  
 
  SDO_GEOMETRY(2003, NULL, NULL,  
 
  SDO_ELEM_INFO_ARRAY(1,1003,1),  
 
  SDO_ELEM_INFO_ARRAY(1,1003,1),  

Revision as of 17:35, 31 March 2014

Příklad Parcely

Představme si velmi jednoduchý systému pro evidenci parcel a jejich vlastníků. Vytvoříme jednoduchou datovou strukturu, pomocí které budeme evidovat vlastníka/vlastníky pozemku/ů. Připouštíme variantu, kdy jeden vlastník může vlastnit více parcel (současně i postupně v čase). Stejně jako jedna parcela může mít více vlastníků v daném okamžiku.

Rozborem situace zjistíme, že lze nadefinovat datové entity VLASTNIK a PARCELA, mezi kterými vznikne vztah typu M:N:

VLASTNIK m – VLASTNI – n  PARCELA

Strukturu entitních typů zapíšeme pomocí lineárního zápisu:

VLASTNIK(idVlastnik, jmenoVla, prijmeniVla, adresaVla),
PARCELA(idParcela, KU, tvarParcela),
VLASTNI(VLASTNIK, PARCELA, datumOd, datumDo) 

kde atributy s prefixem 'id' představují primární atributy, a vazba umožňuje sledovat kdo vlastnil parcelu v určitém období.

Před vytvořením struktury v databázi připravíme rozkladem této vazby vazební tabulku, jejíž záznamy budou představovat údaje o vlastníkovi parcely, včetně časového intervalu vlastnictví.

VLASTNIK 1 --- m VLASTNICTVI n---1  PARCELA

Vazební tabulka VLASTNICTVI bude mít primární atribut a dva atributy typu cizí klíč, a atributy vazby.

VLASTNICTVI(idVlastnictvi, idVlastnik, idParcela, datumOd, datumDo).

Vytvoření tabulek a vložení dat

Tabulky vytvoříme pomocí příkazu CREATE TABLE, kde uvedeme název tabulky, názvy a datové typy atributů, a omezení na atributy či tabulku.

Tabulka VLASTNIK

Před tvorbou samotné tabulky je vhodné ošetřit možnost existence tabulky se stejným názvem (například z důvodu předchozího nepovedeného příkazu).

DROP TABLE VLASTNIK;
CREATE TABLE VLASTNIK(
idVlastnik NUMBER PRIMARY KEY,
jmenovla VARCHAR2(25) NOT NULL,
prijmenivla VARCHAR2(25) NOT NULL,
adresavla VARCHAR2(30)
);

Do tabulky VLASTNIK vložíme několik záznamů pomocí příkazu INSERT INTO table_name VALUES (value1, value2, value3, ...), kdy je nutno dodržet pořadí vkládaných hodnot podle definice tabulky.

INSERT INTO vlastnik VALUES (1, 'Jan', 'Volný', 'Frýdek-Místek');
INSERT INTO vlastnik VALUES (2, 'Petr', 'Krátký', 'Frýdek-Místek');
INSERT INTO vlastnik VALUES (3, 'Jan', 'Bohustý', 'Frýdek-Místek');
INSERT INTO vlastnik VALUES (4, 'Jindřich', 'Volný', 'Ostrava');
INSERT INTO vlastnik VALUES (5, 'Jana', 'Volná', 'Ostrava');
INSERT INTO vlastnik values (6, 'Věra', 'Krásná', 'Frýdek-Místek');

Ověříme uložení dat kontrolním výpisem z tabulky: select * from VLASTNIK.

Tabulka PARCELA

Dále vytvoříme tabulku PARCELA podobným působem jako VLASTNIK.

DROP TABLE PARCELA;
CREATE TABLE PARCELA
(idParcela NUMBER PRIMARY KEY,
ku VARCHAR2(8) NOT NULL,
tvarParcela 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,'ova001',
SDO_GEOMETRY(2003, NULL, NULL, 
SDO_ELEM_INFO_ARRAY(1,1003,3), --obdelnik
SDO_ORDINATE_ARRAY(0,0, 1,10) )
);
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 ) )
);

INSERT INTO parcela VALUES(21, 'ova005',
SDO_GEOMETRY(2003, NULL, NULL, 
SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1) ) 
);

INSERT INTO parcela VALUES(22, 'ova005',
SDO_GEOMETRY(2003, NULL, NULL, 
SDO_ELEM_INFO_ARRAY(1,1003,1), 
SDO_ORDINATE_ARRAY(5,1, 5,7, 1,7, 1,1, 5,1) ) 
);
INSERT INTO parcela VALUES(23, 'ova005',
SDO_GEOMETRY(2003, NULL, NULL, 
SDO_ELEM_INFO_ARRAY(1,1003,1), 
SDO_ORDINATE_ARRAY(5,7, 5,10, 2,10, 1,9, 1,7, 5,7) ) 
);
INSERT INTO parcela VALUES(24, 'ova005',
SDO_GEOMETRY(2003, NULL, NULL, 
SDO_ELEM_INFO_ARRAY(1,1003,1), 
SDO_ORDINATE_ARRAY(5,10, 5,7, 8,6, 7,10, 5,10) ) 
);

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.

Tvorba vazební tabulky VLASTNICTVI

drop table VLASTNICTVI;
create table VLASTNICTVI(
idVlastnictvi NUMBER PRIMARY KEY,
idVlastnik NUMBER(6) NOT NULL, 
idParcela NUMBER(6) NOT NULLl,
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;


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