Zum Hauptinhalt springen

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

obergurgl_blog_rerender