User:Yggdrasil/kartenmacher

From OpenStreetMap Wiki
Jump to: navigation, search

Projekt Kartenmacher

Link zum Kartenmacher.

Oregon bike.jpg Kartenmacher 1.jpg

Kurzbeschreibung: Der Kartenmacher ist ein Programm, mit dem sich Karten für Garmin-Geräte im img Format erstellen lassen. Die Bedienung erfolgt per Web-Interface. Nach Abfrage einer beliebigen Region und der gewünschten Kartenart (Rad, Motorrad, ... - im Rahmen der unten beschriebenen Einschränkungen) werden dem Benutzer vorgefertigte Karten zum Download angeboten. Falls keine vorhandene Karte die Anforderungen erfüllt, kann die Karte generiert werden.

Momentan läuft der Kartenmacher im Probebetrieb, da zum Generieren neuer Karten mein Rechner laufen muss und die DSL-Kapazität nicht ausreichend ist. Wer bessere Infrastruktur zur Verfügung hat und Interesse, den Kartenmacher bei sich zu betreiben: den Code gebe ich gerne her, bitte mich einfach anscheiben. Vielleicht geht er irgendwann "richtig" online.

Was kann der Kartenmacher?

  • Routingfähige Garmin-Karten erstellen
  • Vom Benutzer eine gewünschte Region auswählen lassen (auch Multipolygon)
  • prüfen, ob anhand der Benutzervorgaben ("Beliebige Fahrradkarte der Rhön") evtl. eine Karte bereits vorhanden ist und zum direkten Download anbieten
  • Richtige Rohdaten mehrerer lokal vorhandener pbf-Dateien auswählen (Steuerung über lokalen pgsql)
  • Gewünschte Bereiche aus den Rohdaten ausschneiden
  • ein vorhandenes mkgmap-Style darauf anwenden und eine routingfähige Karte erstellen
  • Die erstellten Karten per ftp auf einen Server schieben (Parallelthread)
  • Multilayer-Karten erstellen (z. B. fixme-Overlay in der Radkarte)
  • Beliebige Styles einfach integrieren
  • Mehrere lokale pbf-Dateien aktuell halten
  • Einfache Bedienung (so hoffe ich doch!)
  • Gruppen von Styles zur Auswahl anbieten ("ich will einfach nur eine OpenStreetMap-Karte von Sri Lanka, egal was für eine", "ich bräuchte eine Radkarte der Alpen - mal schauen, welche gerade schon fertig angeboten werden")

Was nicht?

  • Große Karten über mehrere Kontinente
  • Eigene Styles per Web einbinden
  • Höhenlinien (todo...)
  • Permanent verfügbar sein (geht nur wenn mein Rechner samt Skripten läuft)

Offene Punkte / Schwierigkeiten

...die bisher erfolgreich verhindern, dass die Seite "richtig" aktiv wird

  • Infrastruktur. Der Kartengenerator läuft auf meinem Wohnzimmerrechner. Sobald jemand eine Karte haben möchte, raucht die Kiste, und die DSL2000er Leitung fängt an zu glühen. Ich sehe es nicht ein die Kiste rund um die Uhr laufen zu lassen und eine "dicke" SDSL Leitung zuzulegen. SSD und mehr RAM (aktuell 4 GB) wäre auch nicht schlecht...
  • Begrenzungen von MySQL / Postgresql, mangelnde Unterstützung von überlappenden Flächen. Zur Bewertung, welche Quelldaten genommen werden, wird standardmäßig von pgsql die outer-box genommen. box(polygon(...)) ergibt die umfassende Box. Wenn ein User eine Karte vom Elsass haben will, wird versucht die Rohdaten von Deutschland zu nehmen, weil die Region ja komplett innerhalb der bounding-box liegt. Dummerweise bleibt die Karte leer...
  • Schwierigkeiten / Gründe für Verzögerungen: 3 Programmiersprachen parallel : PHP, JavaScript / Openlayers (fluch!), SQL. Und das für jemanden der kein Informatikstudium hat.
  • Rechtliches. Darf ich einen fremden Style importieren? Wurde testweise durchgeführt, aber später wieder entfernt

Toolchain

Siehe auch: Skriptablauf

  • 2 parallele PHP-Skripte (lokal ausgeführt) + Webseite mit PHP
  • Lokaler Thread 1: permanentes pollen einer Tabelle "Karten". Sobald per Website eine neue Karte angefordert ist, wird diese gerendert, gezippt und in einem Temp-Verzeichnis abgelegt.
  • Lokaler Thread 2: überwachen des Temp-Verzeichnisses auf neue Dateien. Sobald Datei *.zip vorhanden, auf FTP-Server schieben und lokal löschen. Tabelle aktualisieren und Karte als "auf dem Server vorhanden" kennzeichnen. Weitere Aufgaben: Überwachen der lokalen pbf-Rohdaten auf Aktualität, ggf. updaten (per osmupdate)
  • Warum PHP? Einheitliche Programmiersprache für Web und lokale Skripte, Verfügbarkeit PostgreSQL und MySQL-Treiber, ftp

Wer Interesse hat, schreibt mich einfach an! Den Code gebe ich gerne her.