Mapnik

A Turistautak.hu wikiből
A lap korábbi változatát látod, amilyen bpeti68 (vitalap | szerkesztései) 2008. november 19., 21:08-kor történt szerkesztése után volt.

Rasztertérképek készítése a Turistautak.hu adatbázisából Mapnik eszközkészlettel

Ezen dokumentáció még fejlesztés alatt áll. Célja, hogy a megszerzett tapasztalatokat megosszam a Turistautak.hu közösségével és reprodukálhatóvá tegyem azt a folyamatot ameddig eljutottam. (--bpeti68)

Egy mintatérkép itt megtekinthető. Mivel az ftp elérése meglehetősen kaotikus és több mint 60 000 képkockát kell feltölteni az egész országrész lefedéséhez, így csak akkor frissítem, ha lényeges változásokat sikerül elérnem a megjelenésben.

Tartalomjegyzék

Használt oprendszer

Ubuntu8.10

A lenti csomagok nagyrésze MS Windows alá is megtalálható, de van köztük 1-2 aminek csak a forrása érhető el, így a fordítással magunknak kell bajlódni.

Szükséges csomagok

  • mapnik-utils
  • python-mapnik
  • mapnik-plugins
  • libmapnik0.5
  • gdal-bin
  • python2.5
  • postgreSQL
  • python-pygresql
  • postGIS
  • osm2pgsql
  • libgdal1-dev -ez csak a domborzatárnyékolás előállításához kell

Továbbá szükséges még szmi kolléga tuhu2osm.c programjának módosított változata Ennek fordítása: gcc tuhu2osm.c -o tuhu2osm

Mapnik környezet és térképleíró beállítása

TODO

  • POI-k konvertálása hiányzik a tuhu2osm scripből.
  • OSM.XML "térkép stílus leíró" rejtelmeinek feltárása.
  • turistajelzések megjelenítése a térképen.

Domborzat színezés és árnyékolás

Domborzatárnyékoláshoz le kell töltenünk az SRTM adatokat a következő helyről: ftp://e0srp01u.ecs.nasa.gov/srtm/version2/SRTM3/Eurasia/ Az adatok zipelve, 1x1 fokos szegmensekre osztva tartalmazzák a golyóbis magasságadatait. Minket tehát a következő állományok érdekelnek: ftp://e0srp01u.ecs.nasa.gov/srtm/version2/SRTM3/Eurasia/N45E016.hgt.zip ... ftp://e0srp01u.ecs.nasa.gov/srtm/version2/SRTM3/Eurasia/N48E023.hgt.zip

Szükségünk lesz még az srtm_generate_hdr.sh scriptre. Ha lent vannak az adatok, bontsuk ki őket a következő scripttel:

#!/bin/bash

PREP_TABLE="1"
for X in *.hgt.zip; do
    yes | ./srtm_generate_hdr.sh $X
    rm -f "${X%%.zip}"
	    
    # Import 10m contours
    rm -f "${X%%.hgt.zip}.shp" "${X%%.hgt.zip}.shx" "${X%%.hgt.zip}.dbf"
    gdal_contour -i 10 -snodata 32767 -a height "${X%%.hgt.zip}.tif" "${X%%.hgt.zip}.shp"
    [ "$PREP_TABLE" ] && shp2pgsql -p -I -g way "${X%%.hgt.zip}" contours | psql -q gis
    shp2pgsql -a -g way "${X%%.hgt.zip}" contours | psql -q gis
				    
    rm -f "${X%%.hgt.zip}.shp" "${X%%.hgt.zip}.shx" "${X%%.hgt.zip}.dbf"
    rm -f "${X%%.hgt.zip}.bil"
    rm -f "${X%%.hgt.zip}.hdr"
    rm -f "${X%%.hgt.zip}.prj"
#    rm -f "${X%%.hgt.zip}.tif"
    unset PREP_TABLE
done

A fenti script eredetileg betolta PostGIS adatbázisunkba a magasságvonalak rajzolásához szükséges adatokat, majd kitörölte a generált shape fájlokat. Az utolsó rm -f "${X%%.hgt.zip}.tif" parancs kiiktatásával azonban a tif-eket megőrizzük. Ezekre lesz szükségünk az árnyékolás és domborzatszínezés elkészítéséhez. Ezt a következő color_all nevű script hajtja végre.

#!/bin/bash

for X in N*.tif; do
  echo "Coloring $X"
  ./color-relief $X scale.txt "C_$X"
  echo "Shading $X"
  ./hillshade $X "H_$X"
done

TODO

  • geoTiff-ek összefűzése/darabolása
  • átlátszóság beállítása
  • OpenLayers réteg elkészítése a kezelésükhöz

Képek előállítása

  1. Töltsd le a régiók mp állományait zip-elve. Ehhez értelemszerűen rendelkezned kell a megfelelő jogosultságokkal.
  2. Csomagold ki és fűzd össze őket egyetlen mp-vé.
  3. Konvertáld át UTF-8 formátumba. (Ezt megteszi a tuhu2osm)
  4. Engedd rá a tuhu2osm programra: (tuhu2osm tuhu.mp data.osm)
  5. Importáld be a Postgres adatbázisba (osm2pgsql -m data.osm)
  6. Szerkeszd a set-mapnik-env file-t. Állítsd be az összes MAPNIK_* környezeti változót, hogy illeszkedjen a könyvtárrendszeredhez illetve adatbázis kapcsolatodhoz, majd futtasd a ./customize-mapnik-map >$MAPNIK_MAP_FILE parancsot. Ez létrehozza a rendszerednek megfelelő beállítású OSM.XML térképleíró állományt.
  7. Indítsd el a képkockák generálását (a mapnik könyvtárában kiadott ./set-mapnik-env ./generate_tiles.py paranccsal), vagy ha egyetlen képre akarod a térképet kirajzoltatni akkor a generate_image.py -t.

A 2-5 lépésekhez használhatod ezt a shell scriptet. A 7. lépés előtte a generate_tiles.py scriptben beállítandók a kívánt zoom szintek és a generálandó terület koordinátái, mivel a frissen telepített mapnik alapértelmezésben a teljes földgolyót le akarja gyártani.

A renderelő mechanizmus teljesítménye

Jelenleg egy középkategóriás gépen futtatom. Alaplap: ASUS P4P800-VM/S alaplap Processzor: Hyperthread-es 2800MHz-es Northwood mag, 800FSB Memória: 512MB

Ezzel a konfigurációval, magassági szintvonalak nélkül a teljes országot 7-15 -ös zoomszinten kb.13 óra alatt készíti el. Szintvonalakkal ez felment duplájára. Nyilván, ha egyszer be van állítva és egyszer már legenerálta a teljes országot, a változott kisebb régiókkal sokkal hamarabb végez. Jelenleg készítem azt a scriptet, amit paraméterezve indítva csak az adott régiót befoglaló négyzet kockáit generálja le.

Felhasznált dokumentációk

 Mapnik telepítése, használata

Domborzat színezés, árnyékolás

Forrás:

 GDAL-based DEM utilities
 [Mapnik-users Shaded Relief]
 DEMTOOLS fordítása Ubuntu8.10 alatt:
 g++ `gdal-config --cflags` hillshade.cpp -o hillshade `gdal-config --libs`
 g++ `gdal-config --cflags` color-relief.cpp -o color-relief.cpp `gdal-config --libs`
 g++ `gdal-config --cflags` aspect.cpp -o aspect `gdal-config --libs`
 g++ `gdal-config --cflags` slope.cpp -o slope `gdal-config --libs`