Mapnik tiles für einen Ausschnitt neu erzeugen
·215 Wörter·2 min
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