Map Generator

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:

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:

  1. Vstupní matrixy obsahují předpřipravená data jako např. výškopis, hustotu obyvatel, apod. Načítají se ze souboru, nebo z databáze.
  2. Počítaný matrix obsahuje data, která jsou produktem interpolace vstupních dat
  3. 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:

  1. Pomocí XML souboru (tzv. Runsetu)
  2. 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:

  1. Načte soubor airports.xml ze vstupního adresáře
  2. Získá aktuální data o počasí na letištích z Internet Weather source
  3. 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í:

Nebo tuto práci můžete svěřit nám ...


Licence

Program MapGenerator je dostupný v těchto variantách:

  1. Free edition - Zdarma pro nekomerční použití nebo pro vyzkoušení. Umožňuje řízení programu pomocí XML Runsetu.
  2. Standard edition - Umožňuje vytvářet mapy pro použití ve vlastní firmě/organizaci. Obsahuje MapGenerator SDK pro vytváření vlastních rozšíření.
  3. 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.