Od té doby co lítam letadlem si vyrábím aplikaci na mobil nebo tablet, která by mi byla přesně na míru. Mimoto jsem měl možnost věnovat tomu čas v práci a to jak na fakultě (při práci na projektu), tak v Red Hatu (při pronikání do tajů postigsu).
Je možné použít hotovou aplikaci jako je XCSoar, která umí spoustu věcí. V podstatě víc než potřebuju. Nebo si můžeme zkusit všechno vyrobit po svém, malinko si to přiohnout a třeba se u toho něco naučit.
Bude potřeba databáze, nějaký vykreslovací software a to vše se má zobrazovat na tabletu. Pro geografické data se hodí Postgis. Na vykreslování mapy se dá použít třeba Tile Mill. Pro zobrazení na tabletu se použije třeba komponenta PinchMap z programu AGTL.
Prvním předpokladem je instalace PostgreSQL. Pro fedoru jsme společně s kolegy vyrobili návod jak projít prvními kroky nastavení. Je to malinko jiné než v Debianu a jiné než instalace MariaDB. Kromě yum install je potřeba udělat nějaké další nastavení. Tenhle návod se to prostě snaží nějak shrnout.
Instalace Postgisu je potom další krok.
$ createuser -s lenny # potřebujeme privilegovaného uživatele $ psql -d osm # CREATE EXTENSION postgis;
Informace o leteckých prostorech jsou k dispozici v OpenAir formátu na soaring webu. Tento formát je dobře popsaný a je docela i čitelný. Naštěstí je tu nástroj ogr2ogr, který s ním umí pracovat a importuje ho do databáze.
$ ogr2ogr -f PostgreSQL PG:dbname='osm' host='localhost' port='5432' user='lenny' password='leonard' CZ_combined_2014_05_01.txt
Ideální by bylo používat data přímo z Řízení Letového Provozu. Z nejmenovaných zdrojů vím, že by je měli poskytovat v strojově čitelném AIXM od roku 2018. Navíc by tam měli být i dočasné prostory jako třeba Vrbětice (předpokládam, že výbuch muničáku v r. 2014 a následné zabezpečování nikomu neuniklo).
Bohužel ogr2ogr momentálně nefunguje se vzdušným prostorem České Republiky, takže je potřeba příslušný OpenAir soubor upravit ručně.
Pro vykreslení mapy do dlaždic se používá spostu software. Jedním z nich je Tile Mill. Bohužel není zabalíčkovaný ve Fedoře, takže instalace může být složitější. V repozitářích je například qgis. Tím lze jednoduše ověřit, že jsou data v databázi.
Pro definici toho co se má jak vykreslovat TileMill využívá vrstvy (Layers), kterými se definuje zdroj dat (tabulka v databazi nebo sql dotaz) a ten se následně pojmenuje. Dále je potřeba definovat styl zobrazení. TileMill k tomuto používá jazyk CartoCSS.
CartoCSS je odnož jazyka CSS. Lze v něm definovat proměnné a psát podmínky podobně jako v LessCSS.
@airspace_CTR: #000080; // proměnná s barvou prostoru CTR // podmínky jsou v hranatých závorkách [zoom>4] { // zoom je proměnná tilemill #airspace [class='CTR'] { // class je sloupec tabulky line-color: @airspace_CTR; line-dasharray: 10, 3; polygon-fill: @airspace_CTR; polygon-opacity: 0.1; } }
Pro nakreslení okraje ukazujícího dovnitř polygonu se vykreslí druhá čára posunutá od středu. Vzdálenost je o polovinu, protože výchozí poloha je střed čáry. Předpokladem je pravotočivý polygon (Postgis umí vynutit SQL funkcí ST_ForceRHR).
#airspace [class='C'], #airspace [class='D'] { ::outline { line-color: @airspace_D; } ::bigoutline { line-color: @airspace_D; line-join: bevel; line-opacity: 0.3; line-width: @hatch_len6; // šířka čáry line-offset: -1 * (@hatch_len6 / 2); // posune se o polovinu } }
Dvě dvojtečky umožní vykreslit totéž podruhé. Obvykle druhý výskyt definice vlastnosti způsobí její přeplácnutí. Šrafování se udělá jako přerušovaná čára.
line-dasharray: 1, 3;
Při vykreslování se použije výchozí vrstva OpenStreetMap, přes ni se zobrazí vrstva se stínováním kopců (hill shading) a nově vytvořená vrstva se vzdušnými prostory.
Nakonec se data zobrazí na tabletu, ale o tom snad někdy příště.