Hungary/MTBO
Tájkerékpáros térkép készítése OSM adatokból
A tájkerékpáros térképeket általában tájfutó térképek felhasználásával készítik, de ha nem akarunk sok időt tölteni a térképezéssel (túrázáshoz vagy edzésre kell), vagy az adott területről nincs használható tájfutó térkép, akkor egy OSM-alapú tájbringa térkép is jól jöhet. A térkép készítéséhez szükségünk lesz a Maperitive programra. Ez egy ingyenes alkalmazás, amely OSM adatokból kiindulva tud térképet rajzolni, előre megadott szabályok szerint formázva a térkép egyes elemeit. Az így készült térképek három részből állnak:
- Úthálózat. Ez az OSM-ből jön, lehet exportálni (a JOSM térképszerkesztőből), .osm formátumban, és importálni a Maperitive-be, de az Overpass API használatával közvetlenül az OSM-ből is le tudjuk tölteni a kijelölt terület adatait.
- Domborzat. Ez nem az OSM-ből jön, hanem az Earthdata portálról, ahol ellőbb regisztrálnunk kell (ingyenes). A generált szintvonalak külön rétegre kerülnek, és nem szerkeszthetők.
- Turistautak. A szabvány MTBO térképeken ilyesmi nem szokott szerepelni, de ha saját célra készítünk térképet (pl. túrázáshoz), akkor ez az információ is hasznos lehet. Az OSM-ből bitmap formátumban (tile server) le lehet kérni egy olyan réteget, ami csak a turistautakat és jelzéseket tartalmazza, ezt azután, némi trükközéssel, rá lehet fektetni a kész tájkerékpáros térképre.
Maperitive
Töltsük le és telepítsük a program legújabb verzióját.
Ezen felül szükségünk van még a tájkerékpáros térképek formázásához használható szabályokra. Ezt a OSM-MTBO-Maperitive GitHub projectből lehet letölteni. A szabályokat első alkalommal telepíteni kell, a readme útmutatása szerint.
A térkép határainak kijelölése
Indítás után a Maperitive a Mapnik (bitmap alapú) térképet hozza be, amit később majd kikapcsolunk, hogy ne zavarjon, de indulásnál ennek segítségével tudjuk kiválasztani a készítendő térkép határait.
Jobb-klikk a térképen, majd Place Geometry Bounds Here – ekkor egy piros négyzetet kapunk, amelyet az egérrel mozgathatunk és át is méretezhetünk. A kijelölt területen belüli részről készül majd a térkép. Jobb-klikk a térképen, majd Place Printing Bounds Here – a nyomtatási tartomány határát jelölhetjük ki vele.
Érdemes a geometria határokat nagyobbra venni, mint amekkora területről ténylegesen térképet szeretnénk csinálni, mert ha egy zárt poligon objektumot (például lakott terület határai) kettévág a geometriai határ, akkor annak csak a fele fog letöltődni, így a poligon nyitott lesz, és a Maperitive nem fogja nekünk beszínezni a csonka területet.
OSM adatok letöltése
Map > Download OSM Data (Overpass API)
MTBO szabályok alkalmazása
Map > Switch to Rules > MTBO
Ha nem jelenik meg a szabályok között az MTBO menüpont, akkor a telepítéskor eltoltunk valamit.
Szintvonalak
A dokumentáció szerint öt különféle forrásból lehet letölteni domborzati adatokat, ezek közül azonban jelenleg (2017. szeptember) csak a SRTMV3R3 működik, de az is csak úgy, ha előbb regisztrálunk az Earthdata portálon, bejelentkezünk, majd a böngésző sütijei közül kikeressük a szerver által küldött tokent, és ezt megadjuk a Maperitive-nek. Ehhez a következő két parancsot kell kiadnunk a Maperitive parancssorában (az első a tokent állítja be, a második a domborzati adatbázis forrását):
set-setting name=user.earthdata-auth-token value=<token> set-dem-source name=SRTMV3R3
Az egész folyamat lépésről lépésre el van magyarázva itt.
A szintvonalak generálására van parancs a menüben is, de annak nem lehet megadni az alapszintközt. Ha ezt is szeretnénk mi magunk megadni, akkor a Maperitive parancssorába kell begépelnünk a következő parancsot (ha tíz méteres alapszintközt szeretnénk):
generate-contours interval=10
Parancsfájl
Ha az egymás után végrehajtani kívánt parancsokat beírjuk egy szövegfájlba, és .mscript kiterjesztéssel látjuk el, akkor a program az egészet egyben is le tudja futtatni (File > Run Script…), nem kell külön-külön begépelnünk őket. A következő parancsfájl 1:25 000 léptékű térképet generál a Börzsönyről, 15 méteres alapszintközzel:
clear-map set-geo-bounds 19.052702017220906, 48.050823397897751, 18.790984591938507, 47.815604007201536 set-print-bounds-geo download-osm-overpass generate-contours interval=15 use-ruleset location=Rules/MTB_Orienteering-hadry.mrules as-alias=MTBO apply-ruleset zoom-map-scale 25000
Turistautak réteg
A Maperitive Web Map-nak hívja azt, amit az OSM szerkesztője (JOSM) légifotónak. A lényeg mind a kettőnél ugyanaz: egy URL segítségével bitmap formátumú képi adatokat tudunk letölteni egy távoli szerverről, és megjeleníteni egy külön rétegen. A Maperitive alapból tud 14 ilyen webtérképet, sajátot sajnos csak egy Python script segítségével lehet hozzáadni. Nyissuk meg a Samples/Python/AddWebMapCustom.py fájlt, és a végére írjuk be a következő sort:
Map.add_web_map_custom("TuHuCsakJelzesek", ["http://a.tile.openstreetmap.hu/tt/" ])
Az így módosított scriptet futtassuk le a Maperitive parancssorából:
run-python Samples/Python/AddWebMapCustom.py
Ha minden jól megy, megjelennek a turistajelzések, és az útvonalak, pirossal áthúzva. A web map a legalsó rétegbe kerül, ezért a térkép egyes részletei (például a műutak) letakarják a jelzést. Némi trükközéssel (lásd alább) fel lehet hozni a turistajelzéseket a felső rétegbe, de akkor meg az útminősítés nem látszik a piros vonaltól. Mérlegelni kell, hogy az adott térképen melyik a fontosabb.
Turistautak réteg hozzárendelése beépített Web Maphoz
Ha mégis szeretnénk, hogy a jelzések réteg felül legyen, a következőket kell tennünk:
1. Töröljük a Maperitive\Cache\WebTiles\Lonvia Hiking könyvtár tartalmát 2. Írjuk be a Windows/system32/drivers/etc/host fájlba az alábbi bejegyzést:
127.0.0.1 tile.waymarkedtrails.org
Ennek következtében a Lonvia Hiking beépített Web Map http hívásai az internet helyett a mi gépünkön kötnek ki.
3. Indítsuk el a gépen az alábbi web szervert (a futtatáshoz Perl 5-re van szükség, és valószínűleg a HTTP::Server::Simple is kézzel kell telepítenünk):
#########################################################################################
# Translate Maperitive WebMap requests to use a different provider for built-in WebMaps.
#
# Some features (inensity, background) are not available for custom maps in the
# v2.4.1 version, and if you want to use any of these, you need to piggyback on
# a built-in WebMap, by rerouting Maperitive's http requests to the intended
# tile server.
#
# This script is a bare bones webserver that hijacks outgoing WebMap requests,
# sends the request to a different site and returns the response to Maperitive
# as if it were coming from the original site.
#
# With minor modifications, this script may be used for tile servers that do not
# follow the URL syntax expected by Maperitive.
#
# IMPORTANT: Edit the Windows/System32/Drivers/etc/hosts file and
# define the IP address of your original site as 127.0.0.1. You may
# need to use WireShark to determine the name of the host Maperitive
# uses for accessing a built-in WebMap provider.
#########################################################################################
use strict;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
use LWP::UserAgent;
my $ORIG_URL = 'http://tile.waymarkedtrails.org/hiking';
my $TRANS_URL = 'http://a.tile.openstreetmap.hu/tt';
my $AGENT = LWP::UserAgent->new();
{
my $pid = WebMapTranslator->new(80)->background();
}
package WebMapTranslator;
use base qw(HTTP::Server::Simple::CGI);
sub handle_request
{
my($self, $cgi) = @_;
#######################################################
#
#######################################################
my $orig_url = $cgi->url() . $cgi->path_info();
if( $orig_url =~ /$ORIG_URL/ )
{
my $trans_url = $TRANS_URL . $';
my $resp = $AGENT->get($trans_url);
print STDERR "\n\nIN : $orig_url";
print STDERR "\nOUT: $trans_url";
if( $resp->is_success() )
{
print STDERR " - ", $resp->message();
print "HTTP/1.0 200 OK\r\n",
$cgi->header('image/png'),
$resp->content();
}
else
{
print STDERR "\n", $resp->message();
print "HTTP/1.0 ", $resp->code(), "Server Error\r\n",
print $cgi->header('text/html'),
$cgi->start_html('Server Error'),
$cgi->h1($resp->message()),
$cgi->end_html;
}
}
else
{
print "HTTP/1.0 404 Not found\r\n",
$cgi->header('text/html'),
$cgi->start_html('Not found'),
$cgi->h1('Unable to translate URL: ' . $orig_url),
$cgi->end_html;
}
}
4. Ha mindez megvan, indítsuk el a Maperitive-t és a parancssorból adjuk ki ezt a a parancsot:
add-web-map provider=lonvia.hiking intensity=0.8 background=false
Ha minden jól megy, ettől megjelenik a Loniva Hiking réteg, de az eredeti Lonivás csempék helyett a turistautak csempéit rakja fel, letakarva az alsó rétegeket. Az intensity paraméterrel lehet halványítani a réteget, ha 1 helyett 0,8-ra vesszük, ahogy a példában is van, akkor valamennyire látszani fog alatta az útminősítés is. Sajnos így a jelzések is halványabbak lesznek, de 0,8-nál talán még épp ki lehet őket venni.
Nyomtatás (exportálás)
Közvetlenül nem lehet nyomtatni a programból, a térképet ki kell exportálnunk valamilyen fomátumban, és egy másik programból kinyomtatni.
Bitmap
Tapasztalataim szerint bitmapba exportálás során próbálgatással kell belőni a méretarányt, mert az alapártelmezett paraméterekkel készített bitmap mérete egy kissé torz. Ennek az az oka, hogy a méretarányt pixel-per-inch (PPI)-ben számolja, ami monitoronként eltérő lehet. Az exportált kép kép méretét finomhangolni lehet a dpi paraméter értékének változtatásával. Első kísérletként exportáljuk ki a képet 100-as értékkel:
export-bitmap file=output/borzsony-terkep-25000.png dpi=100
A próbanyomaton mérjük meg a lépték vonalzó (jobb alsó sarok, ha bekapcsoltuk a Map > Show Map Scale opciót) hosszát. Ezt összevetve a ponos értékkel, kiszámíthatjuk a dpi paraméter korrigált értékét. A kísérleteim során az 25 ezres térkép akkor lett pontos méretű, ha a dpi értéket 122-re vettem.
SVG
Két különféle verziójú SVG-t lehet előállítani, az egyiket az Adobe Illustratorhoz lehet használni, a másikat az Inkscape-hez. Én ez utóbbival próbálkoztam, de miután az Inkscape folyton összeszakadt a térkép mozgatása közben, végül feladtam a további próbálkozást.