Unsere Basiskarte wird laufend um Informationen ergänzt (zum Beispiel ein Shapefile mit Skipisten). Nach einer solchen Ergänzung soll nicht der gesamte Karten-Cache (mod_tile/renderd) neu gerechnet werden, sondern nur der Ausschnitt in dem Veränderungen stattgefunden haben.
Lösung
Drei Schritte um die Kartenkacheln neu zu erzeugen:
Extent des Shapefiles ermitteln
ogrinfo -geom=SUMMARY pp.shp pp
...
Extent: (11.015149, 46.848712) - (11.085476, 46.911385)
...
Liste der Tiles für diesen Ausschnitt erzeugen
Die maximale Zoomstufe meiner Karte ist 17. Jetzt nur noch die Bounding Box des Shapefiles angeben und die gewünschte Ausgabe (nach grep und awk) in eine Datei umleiten.
./globalmaptiles.py 17 46.848712 11.015149 46.911385 11.085476 | grep __Goo | awk '{print $1}' > /tmp/expired.lst
Das globalmaptiles.py Script wurde ge-patched um die gewünschten „Google“-Coordinaten einfach auszulesen
--- globalmaptiles.py.orig 2014-02-06 00:36:01.021060820 +0100
+++ globalmaptiles.py 2014-02-06 00:15:42.459082600 +0100
@@ -427,7 +427,7 @@
print tilefilename, "( TileMapService: z / x / y )"
gx, gy = mercator.GoogleTile(tx, ty, tz)
- print "tGoogle:", gx, gy
+ print "%s/%s/%s __Google__" % (tz, gx, gy)
quadkey = mercator.QuadTree(tx, ty, tz)
print "tQuadkey:", quadkey, '(',int(quadkey, 4),')'
bounds = mercator.TileBounds( tx, ty, tz)
render_expired mit der Liste der Tiles aufrufen
Abschließend wird das Programm render_expired
mit der generierten Liste der Tiles aufgerufen. Um die unteren Zoomstufen kümmert sich das Script selbst.
render_expired -m snowhow -s /var/run/renderd/renderd.sock < /tmp/expired.lst