bis jetzt nutze ich für meine Karte (OpenLayers, Mapnik, osm2pgsql) eine selbst geschriebene Update-Strategie, die sich rein auf Lesezugriffe stützt. In Zukunft würd ich gern eine Standard-Lösung einsetzen. Dabei bin ich natürlich über Tirex und Mod Tile gestolpert und hab versucht, die betreffenden Wiki-Seiten zu verstehen.
Was ich suche, ist ein Tool, das Folgendes ermöglicht:
Metatiles
Tile-Update auf Grundlage eines Diff-Files
Ist es in diesem Fall egal, ob ich Tirex oder Mod Tile verwende? Muss ich zwingend beides installieren, oder langt eines davon?
Kennt sich jemand damit näher aus?
mod_tile und tirex sind zwei unterschiedliche Dinge die jedoch meist zusammen gehoeren.
mod_tile ist ein apache modul, das bereits gerenderte metatiles ausliefert, bzw veraltete oder nicht vorhandene tiles an einen hintergrund rendering server weiterleitet.
tirex ist dieser hintergrund rendering server, jedoch kein webserver.
Insofern benoetigt man beides. Es gibt noch eine alternative zu tirex namens renderd. Renderd liegt im source code im gleiche Verzeichnis wie mod_tile, sodass es dort manchmal unklarheiten gibt welche Komponente gemeint ist (und moeglicherweise das ist was du mit mod_tile meinst). Man benoetigt nur entweder renderd oder mod_tile.
Bezueglich der update Strategie: Osm2pgsql kann eine Liste von veraenderten tiles waerend der Diff-verarbeitung generieren. Diese Liste kann dann per render_expired entweder direkt rendern lassen, oder als “dirty” markieren, so das mod_tile die tile dann per renderd/tirex neuberechnen laesst das naechste mal das jemand diese tile anschaut.
Danke, das klingt hervorragend. Ich hätte gern, dass die Tiles in denen sich Daten geändert haben, sofort neu gerendert werden. Das heißt, ich brauch Tirex und Mod tile, ja?
Ich stell bestimmt später nochmal dumme Fragen, wenns dann drum geht, das Zeug korrekt zu parametrieren.
Fuer das Aktualisieren von Tiles, die sich geaendert haben, gibt es drei (mehr oder weniger) verbreitete Techniken:
Liste aus osm2pgsql generieren lassen und dann in die Render-Queue einstellen (z.B. mit dem Utility render_expired, das man mit tirex und renderd nutzen kann)
Vor ein paar Tagen hat Tim Alder auf der talk-de-Mailingliste ausserdem geschrieben, dass er an einem Update-Verfahren arbeitet, das auch die Tile-Abrufe mit beruecksichtigt.
Also, wenn ich diff-Files (z.B. .osc) auswerten will, um Tiles gezielt rendern zu lassen, dann brauche ich ein zusätzliches Script, weil das bei Tirex, Renderd, oder Mod_Tile nicht dabei ist?
Damit scheiden aber Vorschläge 1 und 3 von Frederik aus. Von Ruby hab ich keinen Schimmer, aber notfalls arbeite ich mich halt ein bisschen ein.
Frederik, hast du einen alternativen Link für 2.? Der von dir gepostete meldet nur “No node /applications/utils/export/tile_expiry) at revision 26412”.
Es sind alles verschiedene Arten um festzustellen welche Tiles neu gerendert werden muessen. Diese Liste an tiles muessen dann durch einen Renderer Gerendert werden. Das kann z.B. Tirex oder Renderd sein, es kann aber auch ein anderer Renderer deiner Wahl sein der eine Liste von tiles rendern kann.
Mod_tile und renderd/tirex alleine erledigen das nicht. Aber um die Daten up-to-date zu halten benoetigt man eh osm2pgsql und das Ergebniss dann mit einem zusaetzlichen Programm wie render_expired zu verarbeiten sollte ein Problem sein. Wohl gemerkt render_expired nimm lediglich die Liste und reicht diese dann an renderd/tirex weiter reicht. Das eigentliche rendern erledigt also weiterhin renderd/tirex und passt damit sehr gut in das normale rendering flow von mod_tile.
Nach dem “Vorberechnen” http://wiki.openstreetmap.org/wiki/DE:HowTo_Mapnik_%26_Tirex#Vorberechnen
sind im Tile-Verzeichnis /var/lib/tirex/tiles/osm keine Tiles zu finden. Auch das Verzeichnis “osm” fehlt, es sind nur die beiden Verzeichnisse “example” und “test” vorhanden.
Mapnik läuft - das habe ich bereits getestet.
Das Tirex-Log sieht so aus:
2011-08-08T21:37:20 id=1312832240_42580152 map=osm x=8 y=8 z=4 prio=25 request_time=1312832240 expire= sources= render_time=0 success=
tirex-Status bringt das hier:
Tirex Master Status (updated=2011-08-08 21:49:53)
Master server:
started=2011-08-08 21:34:16 pid=485
Statistics:
count_error=192
count_expired=0
count_requested=192
count_timeouted=0
Queue:
Prio Size Maxsize Age
25 0 1
all 0 1
Buckets: (load=0.04)
Name Priority Rendering MaxRend Maxload Active Can Queued Age
live 1- 9 0 4 20 yes yes 0
important 10- 19 0 3 8 yes yes 0
background 20- 0 2 4 yes yes 0
Currently rendering: (num=0)
Map X Y Z Prio Age
Renderers:
Name Port Procs Path
mapnik 9331 3 /usr/lib/tirex/backends/mapnik
test 9330 2 /usr/lib/tirex/backends/test
Maps:
Name Renderer Zoom Tiledir
example mapnik 0- 4 /var/lib/tirex/tiles/example
osm mapnik 0-18 /var/lib/tirex/tiles/osm
surveillance mapnik 0-18 /var/lib/tirex/tiles/surveillance
test test 0-10 /var/lib/tirex/tiles/test