České vysoké učení technické v Praze Fakulta stavební Katedra mapování a kartografie Dokumentace Projekt - Informatika 2 Program pro práci s daty projektu OC10011 Vladimír Holubec Nikola Němcová 29. května 2012
Obsah 1 Zadání 3 2 Program PMView 3 2.1 Externí knihovny................................ 4 2.1.1 Microsoft.NET............................. 4 2.1.2 WPF Toolkit.............................. 5 2.1.3 WPF................................... 5 2.1.4 Excel Library.............................. 6 2.1.5 XML................................... 6 2.2 Tvorba GUI................................... 7 2.3 Popis tříd.................................... 9 2.3.1 Třída about win............................ 9 2.3.2 Třída DB conn win2.......................... 10 2.3.3 Třída Dotazy.............................. 12 2.3.4 Třída MainWindow........................... 13 2.3.5 Třída napln graf win.......................... 19 2.3.6 Třída Prohlizec............................. 22 2.3.7 Třída QueryBuilder........................... 23 2.3.8 Třída App................................ 25 2.4 Výpis funkcí................................... 25 3 Program PMView - uživatelské rozhraní 27 3.1 Práce s databází................................ 28 3.1.1 Připojení k databázi.......................... 28 3.1.2 SQL dotazy............................... 29 3.2 Práce s daty................................... 31 3.3 Graf....................................... 31 3.4 Nápověda a podpora.............................. 32 2
3.5 Web browser................................... 32 4 Závěr 33 3
1 Zadání Cílem projektu bylo vytvoření aplikace, kterou budou využívat studenti v rámci řešení projektu týkající se vývoje urbánních tříd. Dalším cílem projektu bylo naučit se programovat v jazyku C#, seznámit s možnostmi WPF. Případně vyzkoušet knihovny ArcObjects pro.net. Tento program byl zpracováván jako součást projektu OC10011 Modelování urbanizovaných území s cílem snížit negativní vlivy lidské činnosti (2010 2012, MSM/OC), jehož hlavním řešitelem je doc. Ing. Lena Halounová CSc. Z FSv ČVUT v Praze. Celý projekt se zabývá vývojem funkčních ploch v 50-ti městech ČR od roku 1950 do současnosti. Tato data byla ještě donedávna uchovávána v tabulkách Microsoft Excel a v databázi na MS SQL Server 2008 R2 (dále jen Server). Výsledný program by měl sloužit studentům, kteří zpracovávají jednotlivá města. Měl by jim umožnit připojit se k tomuto serveru a získat z něj potřebná data pro svou práci. Program by měl data zobrazovat ve formě tabulky, dále je exportovat ( například do formátu XML, či CSV) a vizualizovat některá data ve formě grafu. Program je psán v jazyce.net (C#). Dotazování na Server probíhá pomocí jazyka T-SQL. 2 Program PMView Tento program byl vytvořen jako nástroj pro práci s daty projektu COST (OC10011). Slouží jako databázový klient, který na základě T-SQL dotazu získá a vizualizuje data z databáze. Získaná data může dále exportovat do formátů XML a XLS, a zobrazovat do grafů. Exportovaná data ve formátu XML umí dále zpětně načíst, tedy je možné tyto data vizualizovat v grafu i bez stálého připojení k internetu. SQL dotazy je možné zadávat dvěma způsoby a to vybráním statického dotazu a nebo sestavením hlavního dotazu pomocí integrovaného Query Builderu. Doplňkovými prvky programu je integrovaný prohlížeč pro webovou aplikaci projektu COST (autoři 4
H.Kadlecová a J.Kratochvíl). Program je distribuován ve dvou verzích. Verze Pro má plnou funkcionalitu, včetně betaverzí prvků, a verzi NoArc. Verze pro obsahuje oproti verzi NoArc, prohlížeč shapefilů, k jehož spuštění je ale potřeba mít na počítači nainstalován ArcGIS licence manager spolu s platnou licencí na ArcInfo, a emailového klienta, který je teprve v rané fázi vývoje. Celý projekt byl naprogramován v jazyce C# v prostředí Microsoft Visual Studio 2010. Grafická část byla navržena na platformě Windows Presentation Foundation. Dotazy byly psány v jazyku Microsoft T-SQL (Transact-SQL). Ve výsledku je program publikován do tzv. One-Click instalátoru, který program instaluje do složky AppData (bez možnosti volby uživatele), nicméně je velmi jednoduchý na použití a to včetně možnosti online aktualizací programu z nastavené složky. Aktuální verzi programu je možné stáhnout na stránkách http://geo1.fsv.cvut.cz/cost/actual release/. Aplikace je vytvářena pod Microsoft Framework 4.0. 2.1 Externí knihovny Pro vývoj byly použity knihovny frameworku Microsoft.NET, dále knihovna WPF Toolkit a knihovna ExcelLibrary. 2.1.1 Microsoft.NET Srdcem platformy.net je jádro nazvané.net framework. Toto jádro se stará o tři základní úkoly: Je run-time prostředím pro běh aplikací, tzn. že, aplikace pro něj napsané jsou s ním pevně spjaty a bez tohoto prostředí je nelze spustit. 5
Poskytuje možnosti pro tvorbu ASP.NET stránek i webových služeb. Obsahuje velmi širokou řadu knihoven, objektově orientovaných tříd usnadňujících řadu úkolů (bezpečnost, komunikaci, práce s databázemi a datovými zdroji)..net framework přináší vylepšené mechanismy správy paměti tzv. Garbage Collector monitorující pamět a zdroje, které jsou v aplikaci použity a dle potřeb je vrací zpět systému. Toto ošetření podstatně zlepšuje práci například se špatně napsaným kódem, kdy by nemělo dojít k totálnímu vyčerpání systémových prostředků a následnému vyřazení serveru. 2.1.2 WPF Toolkit WPF Toolkit je sada ovládacích prvků určených pro Windows Presentation Foundation, které jsou zdarma dostupné, včetně zdrojových kódů. Jedná se o funkce,které jsou kandidáty na to, stát se plnohodnotnými funkcemi další verze.net Frameworku. Pro aplikaci PMView - vykreslování grafů byl nainstalován WPF Toolkit z stránek http://wpf.codeplex.com/. 2.1.3 WPF Windows Presentation Foundation (WPF) je podmnožinou.net Frameworku od verze 3.0, který používá značkovací jazyk XAML pro vytvoření uživatelsky bohatého rozhraní (RUI). Předchůdcem Windows Presentation Foundation (WPF) jsou Windows Forms (Win- Forms). WPF nabízí nové možnosti hlavně v oblasti grafického zpracování aplikace, které například v jeho předchůdci - WinForms nejsou možné. WPF je zaměřeno na uživatelsky bohaté aplikace. Uživatel může využít následujících možností vektorové grafiky - umožňuje graficky bezestrátovou změnu velikosti prvků, barevné gradienty, používání geometrických tvarů 6
animace - časová nebo za použití framů, rotace, přechod barev, 3D animace a mnoho dalších multimédia - práce s audiem a videem (avi, mpeg, wmv) efekty - stíny, záře, rozostření, průhlednost nebo zrcadlení interaktivní 3D aplikace - poskytuje podmnožinu funkcní z Direct3D zaměřenou na multimédia, dokumenty a uživatelské rozhraní DataBinding - provázání dat v aplikaci 2.1.4 Excel Library Cílem tohoto projektu je poskytnout původní.net řešení pro vytváření, čtení a úpravu souborů Excel bez použití COM interop nebo OLEDB connection. V současné době je formát.xls (BIFF8) implementován, v budoucnu bude podporován také formát.xlsx (Excel 2007). Umí číst listy v sešitu a buňky v listu. Dále umí číst obsah buněk (text, číslo, datum nebo chyba) a formát buňky (písmo, zarovnání, linestyle, pozadí atd.). Excel library umí také zaregistrovat obrázky v souboru, získat informace o velikost obrázku, pozici, formátu. Může vytvořit sešit a uložit do souboru. 2.1.5 XML XML (Extensible Markup Language) je obecný značkovací jazyk, který byl vyvinut a standardizováan konsorciem W3C. Jazyk je určen především pro výměnu dat mezi aplikacemi a pro publikování dokumentů, u kterých popisuje strukturu z hlediska věcného obsahu jednotlivých částí. XML není závislý na operačním systému. Syntaxe spočívá v používání tagů (podobně jako html). Prvky tagů jsou definovány slovníky. Soubory XSD. Ty vlasttně zajišt ují onu 7
velkou variabilitu. Tudíž použití jednoho slovníku může jazyk XML sloužit pro zápis polohových informací - zjednodušená představa o formátu GML, či právě naopak o jazyku XAML. 2.2 Tvorba GUI Mimo klasického kódové tvorby uživatelského rozhraní známého jako WinForms dává Microsoft vývojářův možnost vytvořit svá GUI na platformě Windows Presentation Foundation (WPF) v jazyce XAML. A právě na ní byla založena grafická část tohoto programu. XAML je značkovací jazyk vycházejí z jazyka XML. Microsoft přišel s první verzi v roce 2003. Od té doby možnosti WPF značně rozšířil například o Interaktivní 3D, podpora více dotykového ovládání, nové prvky jako kalendář a, DataGrid atd. Díky XAML je možné psát funkční grafické rozhraní programu bez nutnosti používat Visual Studio. To je patrné v ukázce jednoduchého tlačítka. <Button xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation Content = OK /> Pokud bychom tento kód uložili jako XAML a načetli ho do Internet Explorer, zobrazí se nám toto tlačítko. Z příkladu je vidět, jak jednoduché tedy je vytvořit GUI pomocí XAML, jedná se pouze o určitou XML strukturu, kde jednotlivé elementy jsou prvky GUI. Další velkou výhodou je propojení XAML a C# kódu, kdy můžeme u elementu XAML napsat jeho událost (například Click) a tu pak pouze rozepsat v C#. <Button xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation Content = OK Click= button click /> Základem GUI je element Window, v případě tohoto programu RibbonWindow, jehož pod elementy jsou různé skupinové prvky jako například Stack Panel, Grid, Wrap Paenl, 8
atd., ve kterých jsou umístěný prvky jako je Combo Box, Buton aj. Ukázka kódu: <Window x:class="pm$\_$view.about$\_$win" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="O Programu" Height="181" Width="614" ResizeMode="NoResize"> <Grid> <TextBlock Height="23" Margin="133,12,134,0" Name="Program"... <TextBlock Margin="33,80,152,0" Name="Sestaveni"... </Grid> </Window> V ukázce nejprve definujeme prvek okna a jméno třídy, která ho v kódu reprezentuje <Window x:class= PM view.about win Dále definujeme slovníky XMAL xmlns= http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x= http://schemas.microsoft.com/winfx/2006/xaml Základní charakteristiky okna jako jméno velikost a možnost změny velikosti: Title= O Programu Height= 181 Width= 614 ResizeMode= NoResize > Nakonec definujeme prvek, do kterého budeme ovládací prvky ukládat - zde se jedná o GRID - <Grid>. Uvnitř pole pak definujeme jednotlivé prvky jako napříkald zde textové pole <TextBlock Height= 23 Margin= 133,12,134,0 Name= Program... V ukázce je nastavována velikost, odsazení od jednotlivýhc krajů GRIDu a jméno. Dále 9
zde můžeme nastavit napříkald text, viditelnot, či různé události například událost změny Textu uvnitř pole - TextChange. 2.3 Popis tříd Program se skládá z těchto tříd (pokud je za názvem třídy uvedeno v závorce W - znamená to, že třída má vlastní okno definované v souboru s příponou XAML): about win (W) DB conn win2 (W) Dotazy MainWindow (W) napln graf win (W) Prohlizec (W) QueryBuilder (W) App (W) 2.3.1 Třída about win Třída definuje Okno, které podává informace o programu název, verze, datum sestavení, kdo vytvořil. Dědí od třídy Window. Metody třídy : public about_win() 10
Konstruktor, který má výpis informací o programu na starosti. V bloku try catch je ošetřena možnost, kdy aplikace je z určitého důvodu spouštěna bez řádné instalace. V té chvíli se nezobrazuje verze programu. 2.3.2 Třída DB conn win2 Třída definující okno slouží k nastavení připojovacího řetězce k SQL serveru Dědí od třídy Window. Metody třídy : public DB_conn_win2() { implicitní kontruktor pripoj_db_click(object sender, RoutedEventArgs e) Událost definující chování po stisknutí tlačítka pro nastavení připojení k databázovému serveru. private void local_radio_checked(object sender, RoutedEventArgs e) Událost, která popisuje připojení, pokud je vybráno připojení k lokálnímu serveru. Nejprve jsou lokální servery vyhledány. V případě, že není žádný lokální server nalezen, metoda tuto skutečnost zahlásí a navrátí se do stavu po inicializaci okna. private void remote_radio_checked(object sender, RoutedEventArgs e) Událost popisuje případ, kdy je vybráno připojení na MS SQL Server nainstalovaný na serveru FSv ČVUT - geo1. Je zde ošetřeno, že pokud není zadané žádné uživatelské jméno, 11
není možné nastavit připojení. private void other_remote_radio_checked(object sender, RoutedEventArgs e) Událost popisuje případ, kdy je vybráno připojení na jiný vzdálený MS SQL server. Je zde ošetřeno připojení a to tak, že není možné do doby, než jsou vyplněny položky serveru a přihlašovacího jména. Pokud je pole vymazáno, zápis hesla, uživatel a připojení k databázi je opět zakázán. private void name_of_user_textchanged(object sender, TextChangedEventArgs e) Událost se zavolá, pokud je změněn text pole uživatele. Povolí zápis hesla a zároveň je povoleno tlačítko pro potvrzení výběru volby MS SQL serveru Pokud je pole vymazáno, zápis hesla a připojení k databázi je opět zakázáno (podmínka, že délka textu uživatele musí být 0). private void local_servers_selectionchanged(object sender,selectionchangedeventargs e) Událost, povolí tlačítko připojení k lokálnímu serveru, pouze tehdy, je-li vybrán nějaký Server ze seznamu. private void server_text_string_textchanged(object sender, TextChangedEventArgs e) Událost, která pro připojení k libovolnému MS SQL Serveru povolí vyplnění položky uživatele. Funkcionalita podobná události - name of user TextChanged. 12
private void VycistPole() Metoda, která v případě změny volby typu serveru (změna volby radio buttonu) vyčistí textová pole a seznam lokálních serverů proto, aby zde pro přehlednost nezůstávaly elementy vyplněné v předešlém kroku. 2.3.3 Třída Dotazy Třída definuje a zároveň obsahuje statické SQL dotazy, které se zobrazují v Combo- Boxu hlavního okna. Proměnné třídy : Dictionary<string, string> SlovnikDotazu = new Dictionary<string, string>() Slovník definující SQL dotaz pro Combo Box První string je hodnota, která se uživateli ukáže v Combo Boxu, jedná se o klíčovou hodnotu, není možné jí zde mít dvakrát. Nicméně vzhledem k tomu, že není možné dotazy dynamicky přidávat, nahrávat, není nutné tuto skutečnost kontrolovat pomocí bloku Try Catch. Druhý string definuje vlastní dotaz. Metody třídy : public Dictionary<string, string> naplnslovnik() Metoda, která po zavolání vrací slovník naplněný daty uvedenými v těle. Příklad naplnění: SlovnikDotazu.Add("Vyber vše z roku 1965", @"SELECT * FROM [COST_mesta].[dbo].[1965]"); 13
2.3.4 Třída MainWindow Definuje třídu MainWindow, která je odvozená od Ribbon Window. Tato třída definuje hlavní okno programu. Proměnné třídy : string zbytek = ""; - proměnná, do které se ukládají data pro připojovací řetězec k SQL serveru. public Dictionary<string, int> data_paru = new Dictionary<string, int>(); - slovník, do kterého se kopírují páry z okna pro nastavení grafu. public Dictionary<string, double> data_paru2 = new Dictionary<string, double>(); - slovník párů, které se předávají pro zobrazen grafu. public List<string> nazev_sl = new List<string>(); - list názvů sloupců, které se používají v metodě pro zobrazení grafů. napln_graf_win okno_graf; - deklarace okna grafů. 14
Prohlizec webprohlizec; - deklarace webového prohlížeče. QueryBuilder query; - deklarace okna query builderu. Dotazy SQLdotaz = new Dotazy(); - deklarace třídy dotazů. DataSet dset = new DataSet(); - deklarace datasetu, který je z SQL dotazu naplněn. int pocet_sloupcu2 = 0; int pocet_radku2 = 0; - proměnné, které hlídají, zda je okno grafů již něčím naplněné nebo ne. Metody třídy : public MainWindow() 15
Konstruktor hlavního okna. Při inicializaci definuje napojení třídy Dotazů na prvek ComboBox pro výběr statických dotazů. Inicializuje objekt okna pro zobrazení grafů - inicializován je zde z výkonnostních důvodů. DataSet Pripojeni(string retezec_pripojeni, string dotaz) Metoda provádějící připojení k databázi, vracející naplněný dataset. private void vizualizujdata(dataset data) Metoda, která vrácený dataset z připojení vizualizuje v tabulce. Zobrazí pomocí Ellipse fill červené / zelené kolečka (semafor) signalizujícího, zda je dataset naplněn nějakými daty. private void CB_dotazy_SelectionChanged(object sender, SelectionChangedEventArgs e) Událost, která provede dotaz na databázi, při změně ComboBoxu. Provede dotaz, jehož Alias je vybrán. private void Menu_ClearTab_Click(object sender, RoutedEventArgs e) Událost, která vymaže obsah tabulky. Nastaví semafor na červenou. Zakáže sama sebe, načtení grafu a exporty do XLS a XML. Pokud je zobrazen graf vymaže ho. private void create_xml_click(object sender, RoutedEventArgs e) 16
Událost stisknutí tlačítka, která následně provede pro export tabulky do XML. private void create_xls_click(object sender, RoutedEventArgs e) Událost stisknutí tlačítka, která následně provede export tabulky do Excelu Pro export je externí knihovna ExcelLibrary.dll. public static void CreateWorkbook2(String filepath, DataSet dataset) Metoda pro export do excelu metoda, která se nachází ve výše zmíněné knihovně, musela být opravena a explicitně napsána. Důvodem bylo ošetření případů pro DB NULL hodnoty. private void spojenidb() Metoda, které zobrazí okno pro výběr typu připojení, z okna přebere argumenty a nastaví proměnná připojení (cestu, heslo, username). Je možnost 3 typů připojení na: FSV server v GEO1 Lokální server Libovolný jiný server. private void zobraz_data(napln_graf_win okno_graf) Metoda pro zobrazení grafu. Přebírá hodnoty z okna grafů. 17
private void nacti_graf_click(object sender, RoutedEventArgs e) Událost, která zobrazí okno pro tvorbu grafů grafu. Je zde varianta, že pokud není v grafu nic načteno, projde celá tato procedura to znamená, že do tabulky možných proměnných v okně grafu jsou načteny prvky. V případě, že již nějaká data načtena jsou, je předpoklad, že okno je jen schováno (HIDE), tudíž je přeskočeno načítání obsahu a okno se jen zobrazí. private void load_xml_click(object sender, RoutedEventArgs e) Událost, která načítá XML soubor. Otevře Dialog pro otevření souborů, načtený XML soubor se načte do datasetu a zobrazí v tabulce. Dále se s daty může pracovat jako v případě výsledku z SQL dotazu. Je to zde z důvodu, pokud uživatel chce pracovat s již jednou generovanými daty, které má uloženy na disku. Pro zobrazení grafu nastaví proměnné, aby se graf nově otevřel. private void smaz_graf_click(object sender, RoutedEventArgs e) Událost stisknutí tlačítka, která smaže vytvořený graf. private void check_tab_checked(object sender, RoutedEventArgs e) Událost po zaškrtnutí zobrazí tabulku. private void check_tab_unchecked(object sender, RoutedEventArgs e) Událost po odškrtnutí se tabulka schová. 18
private void check_graf_checked(object sender, RoutedEventArgs e) Událost po zaškrtnutí zobrazí graf. private void check_graf_unchecked(object sender, RoutedEventArgs e) Událost po odškrtnutí se graf schová. private void export_graf_click(object sender, RoutedEventArgs e) Událost,pokud je nějaký graf aktivní, je po stisku exportován do png Pokud je graf prázdný, uživatel je na to upozorněn. private void graf_export(int sirka, int vyska, string obr_cesta) Metoda pro vlastní export obrázku do png. Vstupuje zde rozměr obrázku a cesta k němu. private void check_web_checked(object sender, RoutedEventArgs e) Událost,po zaškrtnutí se objeví okno s webovou prohlížečkou nastavenou na projekt Kadlecová Kratochvíl. private void uncheck() Metoda, která je přidána do prohlížeče jako delegát, která říká, že po odškrtnutí se okno webového prohlížeče zavře. 19
private void QueryBuild_DB_win_Click(object sender, RoutedEventArgs e) Událost stisknutí tlačítka, otevře okno Query Builderu. private void Hlavni_okno_SizeChanged(object sender, SizeChangedEventArgs e) Událost, při změne rozměru hlavního okna, která hlídá to, aby při zapnutých grafech a tabulce měly oba prvky maximálně polovinu celého prostoru Událost počítá s různými eventualitami zaškrtnutých checkboxů. private void About_Click(object sender, RoutedEventArgs e) Událost stisknutí tlačítka, otevře okno a zobrazí informace o programu. private void Help_Click(object sender, RoutedEventArgs e) Událost stisknutí tlačítka, zobrazí okno nápovědy. 2.3.5 Třída napln graf win Třída, které definuje okno prvků pro výběr veličin a nastavení, tvorbu a vizualizaci grafů, dědí od třídy Window. Proměnné třídy : 20
private Dictionary<string, int> dvojice = new Dictionary<string, int>(); Prozatim je public, ale chce to nechat private a doplnit vlastnost. private List<string> sloupce = new List<string>(); private int typgrafu; Metody třídy : public napln_graf_win() Hlavní konstruktor třídy, inicializuje okno a vyčistí ho. private Dictionary<string, int> dvojice = new Dictionary<string, int>(); private List<string> sloupce = new List<string>(); private int typgrafu; Třídí proměnné, definující vybrané dvojice do grafu, pomocná proměnná sloupec grafu a typ grafu. public Dictionary<string, int> d public List<string> s public int t Vlastnosti, které nastavují public přístup k členský proměnným třídy - slovníku dvojic, listu sloupců a typu grafu. Tyto vlastnosti dovolí jen hodnotu získat, a nikoliv nastavit, což mimo třídu nepotřebujeme. 21
private void addpair_click(object sender, RoutedEventArgs e) Událost stisku tlačítka, která přidává dvojice do listboxu dvojic. private void hotovo_close_click(object sender, RoutedEventArgs e) Událost stisku tlačítka, které jen zavře toto okno, čímž umožní doběhnout volací metodu ze souboru MainWindow.cs. Doběhnutí je umožněno voláním ShowDialog, takto dojde k zobrazení grafu. V podmínce If je ošetřen případ, kdy nejsou vybrány žádné dvojice. private void radio_hist_checked(object sender, RoutedEventArgs e) Vybráním tohoto radiobutton nastaví uživatel typ grafu na histogram (vertikální sloupce). private void radio_sl_checked(object sender, RoutedEventArgs e) Vybráním tohoto radiobutton nastaví uživatel typ grafu na sloupcový (horizontální sloupce). private void radio_pie_checked(object sender, RoutedEventArgs e) Vybráním tohoto radiobutton nastaví uživatel typ grafu na koláčový. private void radio_point_checked(object sender, RoutedEventArgs e) Vybráním tohoto radiobutton nastaví uživatel typ grafu na bodový. 22
private void radio_line_checked(object sender, RoutedEventArgs e) Vybráním tohoto radiobutton nastaví uživatel typ grafu na liniový. private void radio_vypln_lin_checked(object sender, RoutedEventArgs e) Vybráním tohoto radiobutton nastaví uživatel typ grafu na liniový, s výplní pod linií. private void remove_all_click(object sender, RoutedEventArgs e) Událost stisku tlačítka, vymaže všechny vybrané dvojice. private void remove_pair_click(object sender, RoutedEventArgs e) Událost stisku tlačítka, odebere vybranou dvojici z ListBoxu dvojic. Pokud uživatel stiskne tlačítko (v případě, že není vybrána žádná dvojice), zobrazí se mu příslušná varovná zpráva. private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) Událost, která uměle vyřadí zavírání okna při stisknutí křížku v pravém horním rohu okna. Pokud uživatel okno zavře, tak ho ve skutečnosti jen schová, tudíž je možné po znovu otevření pokračovat s již nastavenými hodnotami. 2.3.6 Třída Prohlizec Tato třída, která dědí od Window, neobsahuje žádný kód, jen v XAML kódu je definovaný Webový prohlížeč se staticky nastavenou URL, na projekt PIN 2 skupiny Bc. 23
Hany Kadlecové a Bc. Jiřího Kratochvíla. Není pro tento projekt nijak podstatný, jako plán do budoucna, nicméně je zde ponechán jako zajímavost, kterak lze jednoduše vytvořit Webový broswer. Prozatím se zde mohou objevovat problémy s ArcGIS JavaScriptem! Z výše uvedených důvodů neošetřeno. Nicméně ani tak použitelnost není ovlivněna. 2.3.7 Třída QueryBuilder Definice okna pro sestavování uživatelských SQL dotazů. Uživatel si může výsledný SQL dotaz upravit v okně Výsledný dotaz, nicméně to není doporučováno vzhledem k tomu, že zde není možná validace SQL dotazů. Třída dědí od Windows. Metody třídy : public QueryBuilder() - implicitní kontruktor třídy. private void treeview1_mousedoubleclick(object sender, MouseButtonEventArgs e) Událost, která vybírá prvky, do SELECT a nebo WHERE boxu. Na prvek je nutné pro výběr udělat dvou-klik! V případě, že uživatel klikne na jméno tabulky, je tato výjimka zachycena v catch bloku. private void aktualizace() Tato metoda při každém svém zavolání zobrazí v příslušném poli aktuální stav dotazu, zároveň změna povolí tlačítko provedení dotazu, nebot se předpokládá, že nebude-li uživatel 24
dotaz nijak upravovat, měl by být platný. private void button15_click(object sender, RoutedEventArgs e) Událost stisknutí tlačítka, zavře okno kontroluje zde je v dotazu nějaký text. Délka je vybrána z toho důvodu, že musí jít minimálně o text: Select * From a, cože je právě alespoň 15 znaků. Do budoucna zde bude umístěn validátor. private void checkbox1_checked(object sender, RoutedEventArgs e) Přepne výběr z tabulek z prvku SELECT na podmínku WHERE (jen v případě, že je již v SELECT nějaký prvek vybrán, do té doby je tento checkbox zakázán). private void delbtn_click(object sender, RoutedEventArgs e) Tlačítko, které smaže vše a uvede okno do stavu jako při spuštění. private void checkbox1_unchecked(object sender, RoutedEventArgs e) Při odškrtnutí Where checkboxu, se smaže celá oblast podmínky Where, to jak z jeho boxu, tak i z výsledného dotazu, a vybrané prvky se budou opět zapisovat do SELECT. Nakonec box sám sebe zakáže. Dále je zde oblast popisující 27 událostí pro jednotlivá tlačítka, která jsou vstupem pro zápisky podmínky Where. Jedná se o čísla 0-9, matematické znaky +, -, =,, *,,, 25
složené jednoduché závorky () a dále pak operátory IS, NOT, NULL, BETWEEN, LIKE, SUM, COUNT, AVG. Události jsou ve tvaru: private void buttonprvek_který_má_být_zobrazen_click(object sender, RoutedEventArgs e) { WhereBox.Text = WhereBox.Text + "PRVEK"; } 2.3.8 Třída App Jedná se tak trochu o specifickou třídu. Generuje se automaticky s projektem. Dědí od Application a je specifická z toho důvodu, že neobsahuje žádné viditelné metody ani proměnné. Jedná se o jakýsi startovací bod programu. Přes tento soubor je možné nastavit chování programu. Metoda Main náleží této třídě, nicméně je do ní generována až při samotné kompilaci. 2.4 Výpis funkcí Základní výpis funkcí programu PMView. připojení k databázi (lokální a vzdálený server) provedení dotazu zavření okna vyčištění tabulky a opětovné připojení 26
dotaz z databáze lze exportovat do XML a XSL (zde pomocí externí knihovny ExcelLibrary). zobrazuje data z databáze na WPF DataGrid datagrid je možné zobrazit nebo zavřít pomocí checkboxu, to samé platí i pro graf možnost simultáního zobrazení grafu a tabulky volba dotazu v TextBoxu základní kreslení grafu kreslení grafu - několik dvojic barevným kruhem se znázorňuje zda je dataset prázdný nebo ne exportuje graf do png ve verzi PRO si uživatel může načíst a pracovat s MXD a Shapefily, pokud má licenci internetový prohlížeč na webovou aplikaci projektu COST (prozatím jen město Jihlava) atraktivní Ribbon Menu, s možností použití klávesových zkratek přes klávesu Alt automatická aktualizace - při každém spuštění se kontroluje na webu nová verze Query Builder import do datasetu z XML html Help 27
3 Program PMView - uživatelské rozhraní Po spuštění programu se otevře základní okno, v němž probíhá následná veškerá práce s databází. Okno je rozděleno na tři části. V horní části se nachází ribbon. Ribbon (česky označovaný jako pás karet ) je panel obsahující tlačítka a ikony, který je umístěný v horní části okna aplikace. Panel obsahuje veškeré funkce, které program poskytuje, uspořádané do záložek. Ribbon byl vytvořen hlavně proto, aby byly uživateli jednotlivé funkce aplikace snadněji a rychleji přístupné za použití menšího množství kliknutí. Tím, že jsou všechny funkce a příkazy aplikace sloučeny do souvisejících skupin a umístěny pouze v jednom, snadno rozeznatelném místě, uživatel už nemusí prohledávat několikaúrovňová menu a množství nástrojových lišt, aby nalezl požadovaný příkaz. Menu ve formě ribbonu bylo využito v programu Office 2007. Pod ribbonem se nachází okno Stav dat, zobrazující stav připojení k databázi, a okno Zobraz, kde je možné zvolit typy výstupů dat. 28
Ve spodní části se pak nachází Zobrazovací oblast, kde se vykreslí graf nebo tabulka. 3.1 Práce s databází Po zvolení záložky Práce s databází se zobrazí menu, kde je možné nastavit připojení k SQL serveru či vytvářet SQL dotazy. 3.1.1 Připojení k databázi Pro jakoukoliv práci s daty je nutné se nejprve připojit k databázi. Po kliknutí na ikonu Nastavte připojení k SQL serveru se otevře okno Připojení k serveru. Uživatel zvolí z nabídky znázorněné pomocí radioboxů Lokální server, FSv server či Jiný vzdálený server. Po zvolení Lokálního serveru se aktivuje Seznam lokálních serverů, ve kterém jsou vypsány všechny dosažitelné servery. K připojení se k FSv serveru je nutné mít přihlašovací údaje, které se zadají do aktivovaných polí. V případě zvolení Jiného vzdáleného serveru se zadá adresa vzdáleného serveru. Pro zvolení jakéhokoliv serveru je pak již nutné jenom stisknout tlačítko Připoj k DB. 29
3.1.2 SQL dotazy Pro získání dat z databáze je možné vybrat si jeden z předem formulovaných dotazů nebo si vytvořit nový SQL dotaz pomocí Query Builderu. Základní dotazy se vyberou z comboboxu, přičemž se ve vedlejším okně vypíše daný SQL dotaz. Pro sestavení vlastního SQL dotazu se stiskne na ikonu Vytvořte SQL dotaz, otevře se okno QueryBuilder. V Seznamu tabulek a sloupců se vyberou sloupce. V případě, že chce uživatel 30
zadat podmínku pro výběr, se zaškrtne checkbox Za podmínky, která aktivuje okno Zápis podmínky, do které se zapíše podmínka. Celý dotaz se zobrazí do spodního okna Výsledný dotaz. Stisknutím tlačítka Proved dotaz se vypne okno QueryBuilder, vybraná data se zobrazí v tabulce. 31
3.2 Práce s daty Po zvolení záložky Práce s daty se objeví ikony, které umožní exportovat či importovat data. Vybraná data je možné exportovat do formátů.xls a.xml. Import je možné provést z formátu.xml. 3.3 Graf Vybraná data je možné znázornit pomocí grafu. Sisknutím ikony Graf se otevře Okno pro tvorbu grafu. Z nabídky si uživatel vybere veličiny a město, pro které chce zobrazit hodnoty, dále zvolí typ grafu (histogram, sloupcový, koláčový, bodový, liniový, liniový s výplní). Vybrané dvojice se po stisknutí tlačítka Přidej dvojici vypíší ve spodním okně, po ukončení výběru se stiskne tlačítko Hotovo/Zobraz. V pravé části Zobrazovací oblasti se vykreslí požadovaný graf. 32
Graf je možné exportovat do formátu.png stisknutím ikony Exportuj graf. 3.4 Nápověda a podpora V záložce Nápověda a podpora se nachází ikony Nápověda a O programu. Ty slouží uživateli k získání informací o programu a jeho užívání. 3.5 Web browser K dispozici je také webový prohlížeč dat projektu OC10011 Modelování urbanizovaných území s cílem snížit negativní vlivy lidské činnosti, v současné době jen pro město Jihlava. Prohlížeč slouží k znázornění dat Land Use pro Jihlavu, především rozvoj obytných, výrobních, dopravních, rekreačních a ostatních ploch od roku 1970 do roku 2010. Mapy jsou zpracovány pro jádrové území, zachycují vývoj hranic města a hlavně hranic in- 33
travilánu. Data byla zpracována také statisticky a je možné zobrazit koláčové grafy vývoje ploch. 4 Závěr Cílem projektu bylo vytvořit program, který by využívali studenti při zpracovávání svých bakalářských a diplomových prací v rámci projektu OC10011 Modelování urbanizovaných území s cílem snížit negativní vlivy lidské činnosti (2010 2012, MSM/OC), jehož hlavním řešitelem je doc. Ing. Lena Halounová CSc. Aplikace pracuje s databází na serveru geo1.fsv.cvut.cz, je možné získávat z ní potřebná data, zobrazuje základní statistiku dat ve formě grafů, exportuje tabulky do formátu.xls a.xml, grafy do formátu.png. Na webu geo1.fsv.cvut.cz je možné stáhnout z příslušných složek odladěné jednotlivé Release verze. V aktuální verzi PMView 1.0.0.0 se nachází několik chyb, které budou postupně odstraněny. Jedna z chyb nastává při importu souborů ve formátu.xml, u některých souborů se aplikace chová nestandartně. Tento nedostatek bude odstraněn ve verzi 1.0.0.1. V plánu 34
jsou pak ještě další úpravy. Aplikace by tak v budoucnu měla obsahovat animace, dále by se měla zpracovávat statistika pomocí MS SQL Serveru. V Praze dne 29. května 2012 35
Reference [1] Svět hostingu Co je.net framework. [online]. 2012, [cit:2012-5-22]. Dostupné z URL: http://svet-hostingu.cz/2009/10/12/co-je-net-framework/ [2] Wikipedie Windows Presentation Foundation. [online]. 2012, [cit:2012-5-22]. Dostupné z URL: http://cs.wikipedia.org/wiki/windows_presentation_foundation [3] ŠTURALA, A. Začínáme s WPF. [online]. 2012, [cit:2012-5-22]. Dostupné z URL: http://www.vyvojar.cz/series/3-zaciname-s-wpf.aspx [4] Wikipedie Extensible Markup Language. [online]. 2012, [cit:2012-5-22]. Dostupné z URL: http://cs.wikipedia.org/wiki/extensible_markup_language [5] NATHAN, A. WPF 4 Unelashed. SAMS, 2011.[cit:2012-5-22]. ISBN-10 : 0-672- 33119-5 [6] MAREŠ, A. 1001 tipů a triků C# 2010.Computer Press, 2011. [cit:2012-5-22]. ISBN 978-80-251-3250-0. [7] PRATT, S. Mistrovství v C++. Computer Press, 2007. [cit:2012-5-22]. EAN 9788025117491 [8] SHARP, J. Microsoft Visual C# 2008. Computer Press, 2009. [cit:2012-5-22]. [9] AGARWAL, V. V., HUDDLESTON, J. Databáze v C# 2008: průvodce programátora. Computer Press, 2009.[cit:2012-5-22]. ISBN 9788025123096 [10] Stackoverflow.com Steps to construct WPF ribbon based applications. [online]. 2012, [cit:2012-5-22]. Dostupné z URL: http://stackoverflow.com/questions/4766980/steps-to-construct-wpf-ribbon -based-applications 36