WikiProject Hungary/MTBO

From OpenStreetMap Wiki
Jump to: navigation, search

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.