Stručný popis
Program Map Generator
vytváří geografické statistické mapy.
Geografická statistická mapa (dále jen zkráceně mapa) slouží ke grafickému znázornění určité veličiny v podobě mapy
s barevným podkladem, kde barva podkladu v daném místě vyjadřuje intenzitu veličiny vzhledem ke zvolené škále.
Mapa obsahuje jednak barevný podklad, dále pomocné informace (hranice, města, místa měření, atd.) a legendu s barevnou škálou a rozsahy hodnot, kterým přísluší jednotlivé barvy podkladu.
Základní informace
Souřadný systém
Generátor map používá interně Kartézský souřadný systém . Systém je bezjednotkový - na použitých jednotkách v podstatě nezáleží. Pouze je potřeba nadefinovat vztah mezi jednotkou souřadného systému a pixelem výsledné bitmapy (měřítko mapy).
Pro tvorbu map České Republiky používáme souřadný systém Gauss-Krüger S-42 . Dále je možno použít jakýkoliv jiný souřadný systém, který lze transformovat do dvojrozměrných kartézských souřadnic, např. WGS 84 .
Veličina
Veličina je typ údajů, zobrazovaných v mapě – může to být v podstatě jakýkoliv statistický údaj, např. procentní míra nezaměstnanosti, naměřená koncentrace látky, teplota, množství srážek a podobně.
Vstupní data
Vstupní data jsou prvotní hodnoty, jejichž zpracováním vznikne mapa. Pokud chceme vytvořit mapu, musíme mít vstupní data. Každý údaj vstupních dat musí mít následující informace:
- Geografickou pozici místa, kde byl údaj zjištěn nebo naměřen
- Název místa, kde byl údaj zjištěn – např. název měřicí stanice
- Hodnota zjištěného nebo naměřeného údaje
Vstupní data lze do programu načítat z XML souborů, nebo pomocí rozšíření napojit program na libovolný externí zdroj.
Barevná škála
Barevná škála je tabulka, pro převod učitého rozsahu hodnot na barvu.
Matrix
Matrix, nebo také grid je dvojrozměrná matice hodnot, která je základní jednotkou zpracování dat v generátoru map. Pro naše potřeby dělíme matrixy na:
- Vstupní matrixy obsahují předpřipravená data jako např. výškopis, hustotu obyvatel, apod. Načítají se ze souboru, nebo z databáze.
- Počítaný matrix obsahuje data, která jsou produktem interpolace vstupních dat
- Výsledkový matrix obsahuje data, která jsou produktem kombinace hodnot jiných matrixů
Všechny matrixy, které spolu vstoupí do procesu generování mapy musí mít stejné rozměry (rozměr buňky a počet buněk v obou osách) a geografickou pozici levého dolního rohu.
Zpracování dat
Při generování mapy jsou vstupní data zpracována pomocí různých algoritmů.
Interpolace
Úkolem interpolace je dosadit do jednotlivých buněk matrixu hodnoty v závislosti na vstupních datech. Každý vstupní matrix musí mít přiřazen zdroj dat a interpolační algoritmus. V současné době je implementován algoritmus IDW.
Na obrázku vidíte matrix, který obsahuje v několika buňkách vstupní hodnoty. Ostatní buňky jsou prázdné - jejich hodnoty neznáme, protože v těchto místech nebyly zjištěny (nebo naměřeny) vstupní data.
Pro každou z prázdných buněk je pomocí IDW spočítán vážený průměr ze vstupních dat, kde váhu tvoří vzdálenost mezi středem počítané buňky a místem kde byla zjištěna vstupní hodnota. Bližší vstupní hodnoty ovlivní výslednou hodnotu více, vzdálenější méně. Tento popis IDW je ovšem velmi zjednodušený.
Modifikace
Úkolem modifikace je projít jednotlivé buňky jednoho nebo více matrixů, provést výpočet podle daného algoritmu a výsledek uložit do původního nebo nově vytvořeného matrixu.
Takto lze upravovat hodnoty matrixů - provádět jejich korekce, kombinace apod.
Rendering
Úkolem rendrování je vytvořit z matrixu, který obsahuje finální data barevný podklad mapy. Hodnota každé buňky je pomocí škály převedena na příslušnou barvu a zapsána do odpovídajícího bodu (pixelu) na mapě.
Další fází je překrytí barevného podkladu vektorovými vrstvami jako hranicemi, legendou, měřicími stanicemi a podobně. Výsledkem je obrázek ve formátu PNG. Podporovány jsou také další formáty (BMP, GIF, JPG) a pomocí Java API lze sloučit více půběhů generování map do animovaného GIFu.
Řízení zpracování dat
Proces generování mapy může být velmi flexibilní. Některé mapy vznikají z více matrixů, jiné pouze z jednoho. Také další algoritmy jsou volitelné a plně konfigurovatelné.
Existují dva způsoby, jak řídit proces generování map:
- Pomocí XML souboru (tzv. Runsetu)
- Pomocí API
XML Runset
Runset řídí zpracování dat generátorem od načtení vstupních dat, přes jejich interpolaci do matrixů, kombinaci, modifikaci, rendering až po zapsání výsledné mapy do souboru nebo do databáze.
Runset je tvořen XML souborem, ve kterém jednotlivé XML elementy reprezentují příslušné objekty generátoru map. Změnou obsahu runsetu je možné flexibilně měnit činnost generátoru map a přizpůsobit tak výsledek svým požadavkům.
Java API
MapGenerator je vytvořen na platformě Java SE .
Pomocí jazyka Java (případně Groovy) je možné řídit generování mapy. Můžete si vytvořit vlastní Java projekt například
ve vývojovém prostředí Eclipse a
do tohoto projektu přidat MapGenerator.jar
. Voláním API v třídách MapGeneratoru je možné přímo řídit
proces vytvoření mapy.
Řozšiřování programu
Při vývoji MapGeneratoru byl kladen velký důraz na flexibilitu a rozšiřitelnost. MapGenerator je schopen generovat statistické mapy z jakékoliv oblasti a jeho schopnosti lze rozšiřovat. Lze si doprogramovat vlastní interpolační, kombinační a modifikační algoritmy, zdroje vstupních dat, zapisovače map, grafické objekty (shapes) atd.
Tato rozšiřitelnost je v praxi zajištěna pomocí schopnosti Javy nahrávat třídy za běhu programu pomocí classloaderu .
Většina objektů v XML Runsetu má atribut class
, který určuje název Java třídy, která zajistí vykonání požadované
funkcionality.
Pokud by například uživateli modulu MapGenerator nevyhovoval žádný současný interpolační algoritmus, je možné si naprogramovat vlastní
a v Runsetu na příslušném místě vyměnit název dosavadní class="idea.map.interpolator.IDWInterpolator"
za identifikaci své třídy.
Jedinou podmínkou je, že uživatelská třída musí dědit z třídy idea.map.interpolator.AbstractInterpolator
,
aby byl dodržen kontrakt mezi třídou vytvořenou uživatelem a zbytkem programu.
ISKO MapGenerator
Příkladem rozšíření MapGeneratoru je projekt ISKO MapGenerator, který jsme vyvinuli pro ČHMÚ Praha . Tento program generuje mapy znečištění ovzduší na základě dat z databáze ISKO 2.
Mapy jsou v hodinovém intervalu generovány z dat v DB ISKO2 a ukládány zpět to této databáze. Dva výpočetní servery si mezi sebou kooperativně dělí tuto práci. V případě výpadku jednoho z nich, druhý vytváří mapy podle priority ve veškerém dostupném čase.
Pro prezentaci slouží JSF aplikace IskoPollutionMapView na aplikačním serveru.
MapGenerator SDK
SDK je určen uživatelům ovládajících jazyk Java. Obsahuje dokumentaci k API tříd Map Generátoru a
Eclipse projekt MapGeneratorExtension
s příklady uživatelských tříd. Tento zdrojový kód může být použit
jako startovní bod pro výuku rozšiřování Map Generátoru o vlastní funkcionalitu.
UserModificator.java | Příklad uživatelského modifikačního algoritmu - upraví jeden matrix |
UserCombinator.java | Příklad uživatelského modifikačního algoritmu - zkombinuje tři matrixy do jiného |
UserInterpolator.java | Kostra uživatelského interpolačního algoritmu |
MapWriterToFtp.java | Zapisovač mapy, provede upload mapy na FTP server |
DataValuesFromPgSQL.java | Načte vstupní data z tabulky v PostgreSQL |
ColorScaleFromPgSQL.java | Načte barevnou škálu z tabulky v PostgreSQL |
TextWithShadow.java | Příklad jednoduchého uživatelského grafického objektu - stínovaného textu |
Hamburg.java | Příklad složeného uživatelského grafického objektu - město Hamburg |
RotatedRectangles.java | Demonstruje otáčení bodů v kartézských souřadnicích |
SegmentedPolygon.java | Demonstruje otáčení bodů v polárních souřadnicích |
AdministrativeAreaFromKML.java | Uživatelský grafický objekt, dynamicky vytvořený z KML souboru. Používá Java API for KML - JAK |
RunSet1.xml | Příklad Runsetu, ukázka použití uživatelských tříd DataValuesFromPgSQL and ListColorScaleFromPgSQL |
RunSet2.xml | Příklad Runsetu, ukázka použití uživatelských grafických objektů |
HamburgPM10.xml | Příklad Runsetu, ukazuje vytvoření mapy znečištění |
CzechRepublicFromKML.xml | Příklad Runsetu, ukazuje použití AdministrativeAreaFromKML, vytvoří mapu České Republiky z KML souborů |
GermanyFromKML.xml | Příklad Runsetu, ukazuje použití AdministrativeAreaFromKML, vytvoří mapu Německa z KML souborů |
MapGeneratorExtension.java | Rozšiřuje třídu MapGenerator o připojení k databázi PostgreSQL |
Demo1.java | Demonstruje dosažení stejného výsledku jako RunSet1.xml ale pomocí Java API |
Demo2.java | Demonstruje dosažení stejného výsledku jako RunSet2.xml ale pomocí Java API |
RunMapGeneratorExt.java | Vstupní bod aplikace |
Dalším učebním projektem je MapGeneratorWeatherSample
- ukazuje použití jazyka Groovy pro vytvoření
jednoduché mapy počasí, ve třech krocích:
- Načte soubor airports.xml ze vstupního adresáře
- Získá aktuální data o počasí na letištích z Internet Weather source
- Vizualizuje tato data pomocí Map Generatoru
airports.xml | Zde jsou kódy letišť, názvy a geografické polohy |
Airport.groovy | Obsahuje data o letištích z XML a informaci o počasí |
Weather.groovy | Obsahuje informaci o počasí - dekódovaný METAR |
DataValueWithMetar.groovy | Obsahuje hodnotu tlaku vzduchu a původní METAR |
WeatherDataValues.groovy | Hodnoty pro vizualizaci na mapě - tlaku vzduchu (QNH) a dále METAR pro tooltipy |
MyHtmlImageMapItems.groovy | Přidává METAR do standardních HTML tooltipů |
Main.groovy | Vstupní bod, vytvoření mapy |
Pokud máte zájem o rozšíření MapGeneratoru (např. o napojení na vlastní databázi), a nemáte k dispozici potřebné znalosti Javy - kontaktujte nás.
Chcete vytvářet vlastní mapy ?
S použitím Map Generatoru můžete vytvářet vlastní mapy. Budete potřebovat následující:
- Být seznámen s XML - musíte být schopni vytvářet a modifikovat Runsety
- Pochopit, jak Map Generator pracuje - přečtěte si 'User Guide'
- Být seznámen s GIS - musíte vědět jak fungují geografické souřadnicové systémy
- Mít vstupní (naměřená) data v XML formátu
- Mít GIS data pro oblast ve které vytváříte mapu, tedy hranice státu, měst, atd.
- Získat některou verzi Map Generatoru
- Pro programování vlastních rozšíření Map Generatoru je potřeba znalost jazyka Java nebo Groovy
Nebo tuto práci můžete svěřit nám ...
Licence
Program MapGenerator je dostupný v těchto variantách:
- Free edition - Zdarma pro nekomerční použití nebo pro vyzkoušení. Umožňuje řízení programu pomocí XML Runsetu.
- Standard edition - Umožňuje vytvářet mapy pro použití ve vlastní firmě/organizaci. Obsahuje MapGenerator SDK pro vytváření vlastních rozšíření.
- Professional edition - umožňuje prodávat řešení založené na Generátoru map jiným firmám/organizacím.
Pokud máte zájem o získání kterékoliv varianty, kontaktujte nás.
Dokumentace
Stažení dokumentace.
Galerie map
Mapa koncentrace SO2
Koncentrace SO2, hodinový průměr, generováno z databáze ISKO2.
Prach nad střední Evropou
24 března 2007 pronikl nad naše území prach, pocházející z východní Ukrajiny.
Zdroj dat - ČHMÚ
Teplotní inverze a kvalita ovzduší
Studio ČT24 - Počasí ve světě 19.1.2009
Vliv zimní teplotní inverze na kvalitu ovzduší v České republice.