Letecké mapy snadno a rychle

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.

xcsoar-screenshot

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).

tilemill-screenshot

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.

airspace

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.
airspace-closeupNakonec se data zobrazí na tabletu, ale o tom snad někdy příště.

Facebooktwittergoogle_plusredditpinterestlinkedin