Rendering auf dem Clientrechner

Die OSM Wochennotiz hat es wieder in den Blickpunkt gerückt. Mit dem Projekt Tilemill http://tilemill.com/ gibt es wieder einen vielversprechenden Ansatz, den Server vom Rendering zu entlasten.
Ich wollte daher fragen, ob es hier bereits Erfahrungen damit gibt?
Gibt es noch andere ähnliche Projekte für Webserver? Besonderen Wert würde ich auf Installationsfreiheit legen. Die Datenbank oder Webspace wären kein Problem. Mittels php könnte auf die Daten zu gegriffen werden. Was fehlt ist quasi nur eine Möglichkeit die “Datenhäppchen” bereitzustellen und auf dem Client zu rendern.

Naja es gibt ja das Tiles@Home Projekt, das auf Osmarender aufsetzt.
http://wiki.openstreetmap.org/wiki/Tiles@home
Oder meintest du explizit nur TileMil?

Eigentlich hatte ich gedacht Ziel des Projektes ist es statt Rasterkarten nur noch Daten zu verschicken, welche dann im Browser erst zu einem Bild berechnet werden. Tiles@home verfolgt zwar auch das Rechnen auf dem Client, aber bereits im Voraus auf Vorrat.

hi,

das würde dann zwar den Servern vom Rendering entlasten, dafür würde er dann aber die ganze Zeit damit beschäftigt sein, die angeforderten Daten aus der Datenbank zu lesen und an den Client zu schicken. Diese Datenmengen dürften weitaus größer sein als die Rasterkarten und ich glaube nicht, daß es dadurch zu einer Entlastung des Servers kommt.

Grüße

Michael

Also es gibt zum Beispiel http://www.cartagen.org die die Karte streamen und per HTML5 rendern

Hallo Michael,

wenn man jede Anfrage an die Karte als Datenbankabfrage gestalten würde, dann schon. Aber man könnte ja auch Datenkacheln ausliefern. Das hat mehrere Vorteile. Es gibt nur noch ein Zoomlevel, denn alle Daten sind ja bereits enthalten und die Frage ist ob sie angezeigt werden oder nicht und das zweite ist, dass jeder selbst entscheiden kann wie er es angezeigt haben möchte und vor allem was.
Derzeit gibt es dafür nur wenige Möglichkeiten. Ich kann zwar auf der openptmap Busse und Straßenbahnen ansehen, wenn ich aber nur eines von beiden sehen will, habe ich Pech gehabt. Insbesondere in Bereichen wo andere Verkehrsmittel den Bus überlagern, habe ich bei Rasterkarten keine Chance.
Alternative wäre für jedes Verkehrsmittel einen Layer mit tranparenten Kacheln zu erstellen. Aber ob dies wirklich sparsamer mit traffic sein sollte, wage ich sehr zu bezweifeln.
Wenn dann später einmal noch das Problem gelöst wird, dass man über Kartengrenzen hinweg routen kann, dann hat der Clientrechner im Prinzip auch die Routingfunktion schon gleich lokal.

was meinst Du denn genau mit ‘Datenkacheln’?

Grüße

Michael

Heute werden einfach Bildkacheln ausgeliefert. Als xyz.png In Zukunft könnte man xyz.osm Dateien ausliefern oder welches Datenformat auch immer sich anbietet und dann würde der Client/Browser daraus die Karte zusammensetzen. Der Server kümmert sich nur noch darum dass die Daten aktuell sind und hat vielleicht ein paar Regelsätze zum schnellen betrachten. auf die Art und Weise bräuchte man dann auch kein X/JAPI mehr, weil man einfach den Bereich der interessiert herunterlädt. Das würde aber voraussetzen, dass man die Kacheln dann wieder Verlustfrei zusammensetzen kann.
Für Bildanwendungen ist das sicher problemlos, aber für Routing und andere Dinge wird es schwieriger. Auch wird es möglicherweise mit großen Flächen und Linienobjekten Probleme geben, welche das Gebiet nur streifen, aber selbst keinen Punkt in der Kachel haben. das aber wären denke ich lösbare/verschmerzbare Probleme. Wenn man sich zum Beispiel die Karten von GPSMID anschaut oder auch die Flashkarte von http://beta.flosm.de/mapthemes/pois1/ da wird das genau so gemacht.

Das wird nur in den hohen Zoomstufen funktionieren, weil ansonsten die Datenmenge zu groß ist.

Mhhh vielleicht hast du Recht, das Zoomlevel 1 ungeeignet ist. Auch ganz Europa möge sicher keiner runterladen, nur um einmal die georgrafischen grenzen zu sehen. Vielleicht macht man das mit drei oder vier Stufen. Stufe 1 OSM Kacheln nur mit Grenzen Land und Wasser. Vielleicht auch noch Hauptstädte. Die Welt in 8 Kacheln sollte dann doch möglich sein oder?
Stufe 2 ist dann mit Eisenbahnstrecken und Hauptstraßen Vielleicht auch mit Landuse Wood und Residential und ähnliche große Flächen.
Stufe 3 ist dann mit ersten POIs
und Stufe 4 könnte dann alles sein. Bei Zoomlevel 12 mit vergleichbarer Kachelgröße.

Ja genau so in etwa habe ich mir das vorgestellt. Nur scheint das noch sehr langsam zu sein. Die Adresse welche du schriebst führt nur zu einem downloadserver.
Wer etwas sehen will schaut einfach hier: http://cartagen.org/

Japs, wie schon genannt 123 Map macht das auch.

Nur sind eben leider nicht alle Probleme dadurch gelöst, dass man Datenkacheln ausliefert. Deren Inhalte variieren je nach Anwendung (Rendering, Routing, …) und Einstellungen (Render Style, Fahrprofil,…). Die Probleme sind auch nicht zu vernachlässigen (hattest du ja schon gesagt), im professionellen Umfeld kenne ich nur Map24 die so eine Technologie nutzen sowie WFS Dienste natürlich.

Ich bin ebenfalls auf der Suche nach Lösungen für clientseitiges Rendering und bin kürzlich über einen Blog-Post auf TileStache (Python Server) und Polymaps (JavaScript Karten-Bibliothek) gestoßen. Tilestache kann GeoJSON Vector Tiles liefern, die nach dem OSM Tile Schema aufteteilt sind und auch gecached werden können. Je nach Konfiguration (clipping) werden die Geometrien an der Kachelgrenze aufgetrennt oder komplett geliefert. Mit Polymaps können die Daten im Browser gerendert werden (per SVG und CSS).

Ähnliches wird es auch bei Mapnik2 mit dem MetaWriter geben, siehe Demo von Hermann Kraus. Ist aber wohl eher als Ergänzung zu den Raster-Tiles gedacht.

Ich bin dabei, das mal anzutesten. Mein Ansatz ist, Tilestache mit dem PostGeoJSON Provider (für PostgreSQL) zusammen mit OpenLayers und der Grid.js aus der MetaWriter Demo zu verwenden. Für das Styling hab ich mal versucht, mit mapnik2geotools den Mapnik Stil nach SLD zu konvertieren, das teilweise auch von OpenLayers unterstützt wird. Da stößt man aber schnell an Grenzen, OpenLayers hat halt (noch?) keinen kompletten Renderer dabei.

Die Lösung, um eine komplette Karte zu rendern, ist das wohl noch nicht, geht aber schon mal in die richtige Richtung. Im mobilen Bereich hört sich MapsForge noch gut an, das gibt’s aber momentan nur für Android.

Bis auf das es sich bei dem Server um Python handelt klingt das schon sehr gut.
Allerdings hatte ich das schon vor längerere zeit mal gesehen, das Mapnik GeoJSON Tiles erstellen kann. Aber das war mir damals nicht wirklich klar wie ich da anfangen sollte. Irgendwann war ich froh einfach eine Karte gerendert zu bekommen. Und das war nur mit Hilfe einer virtuellen Maschine, welche freundlicher Weise zum Download stand.

Man kann alles machen aber es hängt davon ab welche Anforderungen man an die Karte stellt. GeoServer oder PostGIS können auch Vektordaten liefern und OpenLayers lässt zu darauf rumzupannen und -zoomen. Sieht aber eben ganz anders aus als Mapnik oder so und erfordert mehr Aufwand sich das zurechtzumachen.

Weiß nicht, ob Ihr die englischen Listen mitlest: auf talk und dev wurde heute Kothic JS vorgestellt - ein vollständiger JavaScript Renderer. Die Demo ist sehr beeindruckend (aber wohl dem Ansturm nicht immer gewachsen).

Bei mir läuft der überhaupt nicht. Ich schaffe es nicht, aus dem Bereich mal heraus zu zoomen. Sobald ich das Mausrad bewege, wird die Karte grau. Nach 30 Sekunden Volllast kommt irgendwann mal wieder eine Karte. Diese baut sich aber Kachelartig auf. Und mal so weit haus zu zoomen, daß man erkennen könnte, wo diese Stadt liegt, ist unmöglich. Dafür ist der Arbeitsspeicherverbrauch vom Browser gerade auf 1,1 GB Ram gestiegen.

Mmmh, in der Titelzeile meines Browsers lese ich
A canvas Map of Minsk
Wo könnte diese Stadt wohl liegen? :wink:

Ciao,
Frank

Also bei mir läuft die Demo. Allerdings scheint es mit dem nachladen der Daten beim Verschieben etwas zu klemmen. in der Startansicht stand bei mir in der Mitte blass Minck. Der Firefox genehmigt sich auch nur um die 400 MB Hauptspeicher
Ich finde das schon einen sehr genialen Ansatz.

Minsk liegt in Potsdamm: http://www.openstreetmap.org/?lat=52.3886798322201&lon=13.0640584230423&zoom=18 :wink: