Tirex Tiel Expire-Time

Hallo zusammen,

nachdem ich nun einige Stunden gegooglt habe muss ich mich nun doch an euch wenden.

Ich habe mir ja einen eigenen Kachelserver unter verwendung von Mapnik / Tirex / Apache2 / mod_tile installiert,
soweit funktioniert auch alles bestens, nachdem ich meien pgsql datenbank richtig ans laufen gebracht habe, werden mir auch die kacheln ab Zoom 16 in 1-2 Sekunden geliefert.
die kacheln 0 - 15 habe ich für Deutschland vorrendern lassen.

Wenn nun meine Kacheln aber zu alt sind veranlasst tirex/mod_tile (ich weiß nicht welcher dafür verantwortlich ist) das neu rendern !!aller!! Kacheln (Alte kacheln werden angezeigt und neue werden gerendert).
nun ist das ja bei den niedrigen Zoomstufen ( in meinem anwendungsgebiet Z0-15 ) vollkommen unnötig. Da ich außerdem keine diffs von OSM einspiele brauche ich auch diese Zoomstufe nie neu rendern.

Was bei mir aber in Frage kommt: Ich füge in meine Datenbank unabhängig von OSM POIs ein, diese sollen natürlich neu gerendert werden da man diese POIs erst ab Z16 sieht, sollten diese kacheln spätestens nach 12-24Std als alt markiert werden, dabei ist es mir nicht wichtig das beim ersten abruf die kacheln schon aktuell sind, jedoch beim übernächsten abruf
( mod_tile zeigt noch einmal die alte Kachel an, verannlasst aber gleichzeit ein neurendern wenn die Expire-Time abgelaufen ist )

Wie kann ich nun mein Apache-Virtualhost (mod_tile) so confen, dass meine Zoomstufen 0-15 eine Expire-Time von 15552000 Sek. (6Monate) haben
und meine Zoomstufen 16-18 = 43200 Sek. (12Std)

Vielen Dank schon im voraus und einen schönen Abend.

Gruß
Patrick

In der Regel werden solche Sachen (also zusätzliche Objekte auf einer Karte anzeigen) über einen extra Layer erstellt. Als Beispiel wollte ich dir jetzt egtl. die OpenLinkMap empfehlen, aber die ist gerade ein wenig kaputt. Aber es gibt auch noch andere ähnliche Sachen: OpenGastroMap.

Die Daten für den Layer mit den Zusatzinfos kommen Live aus einer Datenbank.

Hi Henning,

ja, dieses verfahren mit den Overlays wende ich auch an.
Allerdings nur um dann an zu zeigen, was z.B. für aktuelle Veranstaltungen in den nächsten x tagen im umkreis von x km wo auf der Karte stattfinden, oder um ortsgebundene interessengruppen ( wie z.B. die mapper-treffen ) zu kennzeichnen, wenn ich irgendwelche sachen in die db eintrage, wo es schon feste tags für gibt möchte ich die natürlich auch im selben stil rendern wie gehabt, meist sind das ja auch statische sachen, die ne weile bleiben. Mit overlays wende ich dann zwei verschiedene verfahren für die gleiche sache an.

ich habe ja die vermutung das ich mit diesem con eintrag ans ziel komme:


ModTileCacheDurationLowZoom

allerdings weiß ich noch nicht wie und wo

Liebe Grüße
Patrick

Das expiry geschieht in mod_tile. Jedesmal wenn mod_tile eine Kachel ausliefert, entscheidet es ob die Kachel alt oder aktuell ist. Falls mod_tile denkt die Kachel ist alt, schickt es einen render auftrag an tirex das dann die Kachel neu berechnet. Mod_tile entscheidet ob eine Kachel alt oder neu ist indem es die Zeit zu der die Kachel auf die Festplatte geschrieben wurde mit der Zeit vergleicht wann mod_tile denkt das die Datenbank importiert wurde.

mod_tile kann allerdings nicht direkt wissen wann die Datenbank geschrieben wurde und verlaesst sich desshalb auf eine Zeitstaemple Datai “planet-import-complete”. Vermutlich fehlt diese Datei bei dir, so dass mod_tile nicht den Zeitpunkt des Datenbank imports erkennen kann. In diesem fall nimmt es an das es vor 3 Tagen war. Alle tiles aelter als 3 tage werden somit neu gerendert.

Wenn man nun diffs einspielt, will man nicht das alle Kacheln neuberechnet werden, insofern aendert man die Zeitstaemple Datei nicht. Da einzelne Kacheln aber dennoch neu berechnet werden muessen, gibt es ein programm “expire_tiles”, das die Zeit zu der eine Kachel angeblich geschrieben wurde auf das Jahr 2000 zuruecksetzt. Somit wurde die Datenbank definitiv erst spaeter importiert und mod_tile denkt die Kachel ist alt und rendert sie neu.

Das nur bestimmte Zoom level neuberechnet werden sollen, dann aber alle in der Zoomstufe ist derzeit in mod_tile nicht vorgesehen. Man muss also die Zeitstaemple aller Kacheln manipulieren. Entweder man setzt die Zeitstaemple der Z16 - Z18 in die Vergangenheit, oder man aktualisiert planet-import-complete und setzt die Zeitstaemple fuer alle z0-Z16 auf eine aktuelle Zeit.

ModTileCacheDuration beeinflusst lediglich was apache als “expiry header” an den Client zurueck gibt, beeinflusst also nur Client side caching und nicht das server seitige neuberechnen der Kacheln.

Hallo,

danke für den Tip :slight_smile:

habe mir nun ein script gebastelt das über einen CronJob in den gewünschten zeitabständen ausgeführt wird:

alle 24h wird die Aktuelle Systemzeit gesetzt (z0-15), damit sind die kacheln immer aktuell und werden nicht gerendert;


find /var/lib/tirex/tiles/example/0 -exec touch {} \; 
find /var/lib/tirex/tiles/example/1 -exec touch {} \;
find /var/lib/tirex/tiles/example/2 -exec touch {} \;
#usw... bis */15

alle 6Std wird für z16-18 eine Systemzeit X aus dem jahr 2000 gesetzt, alle kacheln werden dann bei abruf neu gerendert;


find /var/lib/tirex/tiles/example/16 -exec touch -t 200005101024 {} \;
find /var/lib/tirex/tiles/example/17 -exec touch -t 200005101024 {} \;
find /var/lib/tirex/tiles/example/18 -exec touch -t 200005101024 {} \;

Vielen Dank !!!
Gruß
Patrick

Man kann in mod_tile einstellen, wie alt die Tiles maximal werden dürfen, bevor sie neu berechnet werden müssen. Das kann man nach Zoomlevel-Gruppen tun. Stell doch einfach dort für die Zoomlevel die Du nicht aktualisieren willst eine sehr lange Zeit ein.

Das klingt nach der Einstellung “ModTileCacheDurationLowZoom”. Das ergibt aber wie oben beschrieben nicht das gewuenschte Ergebniss.