Um Karten so auf einer Webseite anzeigen zu können, dass man sie scrollen und zoomen kann, muss es einen sogenannten Tile-Server geben, der die Kartenbilder ausliefert. Die Karte wird dazu in Kacheln (engl. "tiles") unterteilt, die nach einem bestimmten Schema benannt sind. Für sehr kleine Kartenausschnitte (so wie meine Karten von Langenfeld in der Galerie) kann man die nötigen Kacheln mit einem passenden Programm lokal erstellen und einfach auf einem Webserver ablegen. Für größere Karten kann man allerdings die benötige Menge an Kacheln nur recht aufwändig und umständlich lokal vorberechnen und regelmäßig aktualisieren. Dann kann man entweder Server-Software einsetzen, die das online macht (die aber nicht mehr auf einem einfachen Webserver laufen kann, sondern einen meist teureren "echten" Server erfordert) oder man verwendet einen fremden Tile-Server. Viele kleine Projekte machen letzteres und verwenden dazu den Tile-Server, der auch die Hauptkarte unter www.openstreetmap.org bedient, da dieser einer der wenigen Server ist, die kostenlos zur Verfügung stehen. Allerdings kostet natürlich auch dieser Server Geld und wird dazu aus Spenden finanziert. Für den produktiven Einsatz ist er daher gar nicht gedacht und es gibt die sogenannte "Tile Usage Policy" (https://operations.osmfoundation.org/policies/tiles/), die regelt, wie intensiv man diesen Server nutzen darf. Diese Regeln zielen zwar eher auf Massendownloads durch einzelne, große Projekte, aber auch viele kleine Projekte können den Server natürlich irgendwann überlasten. Daher ist es sinnvoll, sich über Möglichkeiten Gedanken zu machen, wie man den Server etwas entlasten kann.
Eine Möglichkeit zur Entlastung ist ein sogenannter Proxy, der bei einer Anfrage eine Kachel vom Tile-Server abholt, auf dem eigenen Server zwischenspeichert und von dort für die Webseite ausliefert. Durch die Zwischenspeicherung kann er spätere Anfragen für dieselbe Kachel direkt beantworten und der Tile-Server wird weniger belastet. Erst nach einiger Zeit hält der Proxy dann seine Zwischenspeicherung für veraltet und holt sich bei der nächsten Anfrage eine frische Kachel vom Tile-Server. Netter Nebeneffekt ist, dass der Proxy auch dann noch alte Kacheln ausliefern kann, wenn der Tile-Server gerade nicht erreichbar ist.
Im OSM-Wiki gab es schon unter https://wiki.openstreetmap.org/wiki/ProxySimplePHP und https://wiki.openstreetmap.org/wiki/ProxySimplePHP5 zwei in PHP geschriebene Proxies, die ich für meine Zwecke erweitert habe. Mein Code sieht nun so aus:
Der Code macht im Wesentlichen die folgenden Dinge:
Um den Proxy auf einem Webserver einzusetzen, sind die folgenden Schritte nötig:
Damit ist schon alles eingerichtet und startklar. Ein Aufruf auf "/mapproxy/tiles/{z}/{x}/{y}.png" (wobei {x}, {y} und {z} Platzhalter nach dem oben erwähnten speziellen Namensschema für Kacheln sind) liefert dann die gewünschte Kachel aus, sofern der Aufruf von einer in der Konfiguration zugelassenen Webseite kommt. Ein Aufruf auf "/mapproxy" oder "/mapproxy/tiles" ohne weitere Angaben zeigt dagegen die Statusseite an.