Stav addinu: v běžném provozu
Počet uživatelů (úřadů): 10+

Adresy – Veřejný dálkový přístup

Registr územní identifikace, adres a nemovitostí slouží k evidenci údajů o územních prvcích, údajů o územně evidenčních jednotkách, adresách, územní identifikaci a údajů o účelových územních prvcích. Jednotlivé prvky jsou zobrazovány na mapách státního mapového díla a digitálních mapách veřejné správy.

RÚIAN zprostředkovává i údaje o vlastnictví z informačního systému katastru nemovitostí. Jako jediný registr vede také nereferenční údaje, kterými jsou tzv. „technickoekonomické atributy“ budov (počet podlaží, výměra, připojení na plyn, kanalizaci, vodu, způsob vytápění …)

Je budován v gesci Českého úřadu zeměměřického a katastrálního (ČÚZK). Všechny adresy jsou definovány odkazem na adresní místo v RÚIAN. Tím lze zaručit, že se údaje neopakují a jsou vždy aktuální. Součástí tohoto projektu je tzv. „veřejný dálkový přístup“ (VDP), který slouží zdarma veřejnosti k nahlížení do dat v RÚIAN přes internet. Najdete jej na stránce http://vdp.cuzk.cz/vdp/ruian/vymennyformat/vyhledej


Činností addinu je obnovovat adresy u jednotlivých subjektů a v případě jakékoliv změny v databázi ČÚZK tutéž změnu udělat v místní databázi Evolio serveru.

První fáze

V první fázi dochází pouze ke stažení linku a zapsání změny. Addin se napojí na místní databázi s uloženými adresami a stáhne z webu URL adresu(link). V databázi mají dané záznamy ve sloupci Download hodnotu 1 a ve sloupci Done hodnotu 0. Poté addin provede „Začínám mazat už naimportované linky“, což jsou linky ve sloupci Done s hodnotou 1. Když jsou všechny smazány, vyhledá pouze ty, které nemají stav Done „Vyhledávám linky z tabulky AdresyLinky. Počet:“ a zobrazí si jejich poslední datum změny. K dříve staženým linkům přidá aktuální den, měsíc a rok. Ty následně s aktualizovanými daty uloží do databáze „Ukládám linky do databáze“, namísto starých informací. Pokud nastane problém s aktualizací dat addin zobrazí AdresyLinky obsahuje linky, které nebyli aktualizované s databází“.

Druhá fáze

V této fázi jsou addinem staženy adresy z linku, který získal v první fázi na paměťový disk. Jestliže ale program na začátku nalezne links.Count()=0 zobrazí „Ukončení práce protože nebyli nalezená žádná data na import do databáze“ a druhá fáze nezačne.  V opačné případě program z uložených linků získá soubor ZIP, který si sám odzipuje a uloží na předem dané místo na disku s cestou @“data.xml“. Poté ze souboru vybírají všechny kategorie, tak jak jdou po sobě a aktualizují. A to takto:

Obec


Obec je značena v odpovědi RuianObec. Je tedy uváděna ve tvaru RÚIAN kódu. Pokud v odpovědi tento kód je(RuianObec.Exists), vezme přednostně první nebo defaultní kód obce a zapíše jej do databáze. Jestliže ale Obec=null, tedy v odpovědi RÚIAN kód není, musí se založit obec nová a to s údaji:
Obec.okres_kod = item.Okres.First.Kod.First.Value;
Obec.nazev = item.Nazev.First.Value;
Obec.zkratka = (item.Nazev.First.Value.Length > 29) ? item.Nazev.First.Value.Substring(0, 29) : item.Nazev.First.Value;
Obec.stav = 1;
Obec.nuts5 = item.NutsLau.First.Value;
Obec.vznik_dne = (item.DatumVzniku.Exists) ? item.DatumVzniku.First.Value.Value : (DateTime?)null;
Obec.obec_kod = item.Kod.First.Value;


Takto import probíhá i u dalších částí odpovědi popsaných níže.

Část obce


Pokud je obec rozdělena na části, musí se aktualizovat i tyto údaje. Jednotlivé části jsou vedeny jako RuianCobce. Import probíhá stejně jako u Obce. Jen při založení jsou požadovány jiné informace:
Cobce.obec_kod = item.Obec.First.Kod.First.Value;
Cobce.nazev = item.Nazev.First.Value;
Cobce.zkratka = (item.Nazev.First.Value.Length > 20) ? item.Nazev.First.Value.Substring(0, 20) : item.Nazev.First.Value;
Cobce.stav = 1;
Cobce.vznik_dne = (item.DatumVzniku.Exists) ? item.DatumVzniku.First.Value.Value : (DateTime?)null;
Cobce.cobce_kod = item.Kod.First.Value;


Region


Regiony jsou v databázi zapsány jako RuianOrp. K založení je potřeba doplnit:
ORP.nazev = item.Nazev.First.Value;
ORP.zkratka = (item.Nazev.First.Value.Length > 15) ? item.Nazev.First.Value.Substring(0, 15) : item.Nazev.First.Value;
ORP.stav = 1;
ORP.vznik_dne = (item.DatumVzniku.Exists) ? item.DatumVzniku.First.Value.Value : (DateTime?)null;
ORP.orp_kod = item.Kod.First.Value;


Obec s pověřeným obecním úřadem


Obec ve které je pověřený obecní úřad je zkrácena na RuianPou. Při založení jsou vyžadovány:
pou.nazev = item.Nazev.First.Value;
pou.zkratka = (item.Nazev.First.Value.Length > 15) ? item.Nazev.First.Value.Substring(0, 15) : item.Nazev.First.Value;
pou.stav = 1;
pou.orp_kod = item.Orp.First.Kod.First.Value;
pou.pou_kod = item.Kod.First.Value;


Správní obvod


Správní obvod na kterém působí správní úřad má zkratku RUIANSobvod. Jestliže správní obvod zakládáme, použijí se informace:
Sobvod.obec_kod = item.Obec.First.Kod.First.Value;
Sobvod.cislo = item.Nazev.First.Value.getNumberFromSobvod();
Sobvod.nazev = item.Nazev.First.Value;
Sobvod.zkratka = (item.Nazev.First.Value.Length > 15) ? item.Nazev.First.Value.Substring(0, 15) : item.Nazev.First.Value;
Sobvod.stav = 1;
Sobvod.sobvod_kod = item.Kod.First.Value;


Správní obvody Prahy


U Prahy je přidělena tato samostatná kategorie se zkratkou RUIANPobvod. Vyplňují jiné údaje než u správního obvodu:
mop.obec_kod = item.Obec.First.Kod.First.Value;
mop.nazev = item.Nazev.First.Value;
mop.zkratka = (item.Nazev.First.Value.Length > 15) ? item.Nazev.First.Value.Substring(0, 15) : item.Nazev.First.Value;
mop.stav = 1;
mop.pobvod_kod = item.Kod.First.Value;


Městský obvod a městská část


Městský obvod a městská část mají oficiální zkratku MOMC, v databázi je k uváděna jako RUIANMomc.  Při založení jsou požadovány informace:
mcast.sobvod_kod = (item.SpravniObvod.Exists) ? item.SpravniObvod.First.Kod.First.Value : (int?)null;
mcast.pobvod_kod = (item.Mop.Exists) ? item.Mop.First.Kod.First.Value : (int?)null;
mcast.obec_kod = item.Obec.First.Kod.First.Value;
mcast.nazev = item.Nazev.First.Value;
mcast.zkratka = (item.Nazev.First.Value.Length > 15) ? item.Nazev.First.Value.Substring(0, 15) : item.Nazev.First.Value;
mcast.stav = 1;
mcast.mcast_kod = item.Kod.First.Value;


Ulice


Název ulice je taktéž vyjádřen v RÚIAN kódu s databázovou zkratkou RuianUlice.  Zápis nové ulice probíhá s daty:
Ulica.obec_kod = item.Obec.First.Kod.First.Value;
Ulica.stav = 1;
Ulica.nazev = item.Nazev.First.Value;
Ulica.zkratka = (item.Nazev.First.Value.Length > 29) ? item.Nazev.First.Value.Substring(0, 29) : item.Nazev.First.Value;
Ulica.ulice_kod = item.Kod.First.Value;


Objekt


Jako pojem Objekt se uvádí objekt stavební. Před novým zápisem se kontroluje, zda část obce ve které se objekt nachází existuje. V databázové zkratce se vyskytuje pouze RuianObjekt. Jestliže objekt zakládáme, použijí se následující informace:
objekt.cobce_kod = item.CastObce.First.Kod.First.Value;
objekt.cisdom_typ = item.TypStavebnihoObjektuKod.First.Value;
objekt.cisdom_hod = item.CislaDomovni.First.CisloDomovni.First.Value;
objekt.stav = 1;
objekt.objekt_kod = item.Kod.First.Value;


Adresa


Update adresy nejsložitější částí celého bloku. V databázi je uváděna jako RuianAdresa. Jako první se přepíše první uvedené PSČ v odpovědi.
posta ArdPosta = new posta();
ArdPosta.psc = item.Psc.First.Value;
ArdPosta.stav = 1;
psc.Add(ArdPosta.psc);
Následuje kontrola objektu na dané adrese. Pokud je objekt na neexistující adrese, založí se nová adresa:
adresa.objekt_kod = item.StavebniObjekt.First.Kod.First.Value;
adresa.psc = item.Psc.First.Value;
adresa.stav = 1;
adresa.acisdom_hod = (item.CisloDomovni.Exists) ? item.CisloDomovni.First.Value : 0;
adresa.cisor_hod = (item.CisloOrientacni.Exists) ? item.CisloOrientacni.First.Value : (int?)null;
adresa.cisor_pis = (item.CisloOrientacniPismeno.Exists) ? item.CisloOrientacniPismeno.First.Value : null;
adresa.ulice_kod = (item.Ulice.Exists) ? item.Ulice.First.Kod.First.Value : (int?)null;
adresa.adresa_kod = item.Kod.First.Value;



a navíc se pokračuje vypočítáváním GPS souřadnice:
double x1 = Convert.ToDouble(position.First(), CultureInfo.InvariantCulture) * -1;
double y1 = Convert.ToDouble(position.Last(), CultureInfo.InvariantCulture) * -1;
double p1 = GpsConverter.ComputeFi(x1, y1);
double p2 = GpsConverter.ComputeLambda(x1, y1);



adresa.x = (decimal)p1;
adresa.y = (decimal)p2;
string ol = GpsConverter.EncodeGPS(p1, p2);


Adresní místo


Jako poslední addin provádí upřesnění adresního místa. V databázi je uvedeno jako AdresniMisto a spadá pod RuianAdresa. V nejlepším případě existují záznamy ve všech třech kategoriích adresního místa(CisloOrientacni, CisloOrientacniPismeno  a CisloDomovni), provede se následující činnost:
var cislo_dom_hod = (item.CisloDomovni.Exists) ? item.CisloDomovni.First.Value : (int?)null;
var cisor_hod = (item.CisloOrientacni.Exists) ? item.CisloOrientacni.First.Value : (int?)null;
var cisor_pis = (item.CisloOrientacniPismeno.Exists) ? item.CisloOrientacniPismeno.First.Value : null;



V případě chybějícího domovního čísla cislo_dom_hod != null, se provede:
var querry = string.Format(@„update dbo.adresa set
acisdom_hod = {0}
where adresa_kod ={1}„, cislo_dom_hod, item.Kod.First.Value);



Pokud je nulová hodnota v čísle orientačním cisor_hod != null:
var querry = string.Format(@„update dbo.adresa set
cisor_hod = {0}
where adresa_kod ={1}„, cisor_hod, item.Kod.First.Value);



Jestliže se nulová hodnota objeví v posledním, čísle orientačním písmenu cisor_pis != null, změní se tyto hodnoty:
var querry = string.Format(@„update dbo.adresa set
cisor_pis = ‚{0}‘
where adresa_kod ={1}„, cisor_pis, item.Kod.First.Value);


Třetí fáze

Následující fáze má z úkol aktualizaci databáze z dat která uložil na disk v druhé fázi. Jestliže ale program na začátku nalezne links.Count()=0 zobrazí „Ukončení práce protože nebyli nalezená žádná data na import do databáze“ a třetí fáze nezačne. Pokud je vše v pořádku, addin zobrazí z databáze všechny linky s vlastnostmi Downloaded=true a x.Done=false, které se seřadí abecedně dle URL. Následně nalezna všechny linky které jsou se stavem Done. Poté si načte do operační paměti data o adresách z uložiště @“data.xml“, která následně z tohoto disku smaže a začíná import aktualizovaných adres do databáze namísto adres s linkem ve stavu Done.

Po úspěšné aktualizaci všech adres se u jejich linků změní link.Done= true a link.Data= null, proto aby mohl addin následující den poznat tuto adresu jako zastaralou a umožnit tak její aktualizaci.