[Talk-de] Bitte um kurzfristige (Leaflet)Unterstützung (Fahrdaten in Karte für Spendenrallye)
Lars Lingner
gislars+list at googlemail.com
Mo Jul 13 08:20:26 UTC 2015
Hallo Sven,
mir fehlt für eine ausführliche Antwort jetzt leider die Zeit. In
Norwegen hat aber jemand etwas ähnliches vorgehabt und umgesetzt. Dies
ist in seinem Blog [1] ausführlich beschrieben und den Code hat er auf
github [2] veröffentlicht.
Er benutzt auch CartoDB und Leaflet. Vielleicht kannst du davon einiges
ableiten...
Viele Erfolg
Lars
[1]
http://blog.thematicmapping.org/2015/04/real-time-satellite-tracking-of-your.html
[2] https://github.com/turban/nordryggen
On 12.07.2015 23:10, Sven wrote:
> Hallo,
>
> mein Teampartner und ich nehmen in Kürze an einer Wohltätigkeitsrally
> teil, die uns von London nach Ulan-Bator, der Hauptstadt der Mongolei,
> führt.
>
> Wir haben in unserem Auto einen Logger, der zum einen Positionsdaten,
> zum anderen noch Fahrzeugdaten wie Außentemperatur etc. erfasst. Diese
> Daten sollen automatisiert auf eine Karte visualisiert werden, die wir
> in unser Wordpress-Blog einbinden.
>
> Wir haben den Aufwand und die Expertise, die man für eine solche
> Einbindung benötigt, komplett unterschätzt und müssen das Ganze am
> Mittwoch Abend stehen haben. Aaaahhhh!
>
> Wir haben schon aus dem Bekanntenkreis tolle Unterstützung erhalten,
> sind aber jetzt an einige Knackpunkte gekommen, die wir ohne langwierige
> Einarbeitung nicht selbst lösen können.
>
> Daher die Frage und große Bitte, einmal kurz den Sachverhalt zu scannen
> und zu prüfen, ob jemand ein Patentrezept kennt oder uns einen Weg
> aufzeigen kann oder jemand empfehlen kann, der das (auch kommerziell)
> machen könnte unter den zeitlichen Rahmenbedingungen.
>
> **Ausgangslage**
>
> Die zwei Datenarten, die wir erheben, tun wir in eine Datei packen,
> damit nur
> eine Datei ausgelesen und verlinkt werden muss. Wir haben dabei einmal
> die Positionsdaten und dann noch ein paar fahrzeugspezifische Parameter,
> die noch genauer definiert werden müssen, aber die im nachfolgenden
> Code-Snippet schon mal als Dummy drinstehen.
>
> Pro Fahrt, d.h. Zündung an und Zündung aus, wird ein Datensatz erzeugt,
> dieser liegt im xml-Format vor (damit wir mehrere Werte unterbringen
> können, was ja bei gpx nicht geht).
>
> Hier ein Beispiel:
>
> <?xml version="1.0" encoding="utf-8"?>
> <snapshot>
> <header>
> <serial>71878101986</serial>
> <vin></vin>
> <time>2013-03-05T06:57:42.0Z</time>
> </header>
> <data>
> <value name="velocity" unit="kmh">283.67</value>
> <value name="engine-speed" unit="rpm">6500.434</value>d
> </data>
> <gps lat="49.1564640" lon="9.3104110">
> <fix>3d</fix>
> <ele>190.70</ele>
> </gps>
> </snapshot>
>
> Ideen waren bisher:
>
> 1 Leaflet mit GPX-Plugin https://github.com/mpetazzoni/leaflet-gpx
>
> 2 CartoDB mit entsprechender automatisierter Datenanbindung
>
> 3 Openlayers und OSM-Script zur GPX-Anbindung
> http://wiki.openstreetmap.org/wiki/Openlayers_Track_example (aber mit
> Openlayers 3)
>
> Als Endziel soll eine Karte entstehen, die wir auf unserem
> Wordpress-Blog, vermutlich als iframe, einbinden können oder zumindest
> hin verlinken können. Diese Karte sollte unser Fortkommen dokumentieren
> und regelmäßig aktualisiert werden. Idealerweise sieht das ganze später
> auch wie eine Route aus und nicht wie bei Google eine lange Reihe von
> hundert Wegpunkten. Idealerweise kann man ferner auf einen Wegpunkt
> klicken oder so und sieht dann in einem Pop-Up oder sonstwie die paar
> fahrzeugspezifischen Werte, die wir im XML-Format mit erheben
> (voraussichtlich Höhe, Außentemperatur etc.).
>
> Fallstricke sind dabei folgende:
>
> 1)
> Wir erheben im Fahrzeug alle 10 Minuten (um Datenvolumen zu reduzieren)
> einen Wegpunkt mit Zusatzdaten. Die XML-Datei hätte demnach bei einer
> einstündigen Fahrt, wenn die Zündung ausgeht, 6 Wegpunkte erfasst. Diese
> einzelnen fahrtenbasierten Dateien, das nur als Hintergrund, werden
> stündlich an das Backend des Dienstleisters übertragen und auf unseren
> FTP geschoben. Wenn Handynetz vorhanden ist. Das heißt, dass wir
> vielleicht pro Stunde bei kurzen Fahrten 3 xml-Dateien neu reinbekommen
> oder nach zwei Tagen, wenn wieder Handy-Empfang ist, gesammelt 10
> xml-Dateien.
>
> Irgendwie muss jetzt ein Skript auf dem FTP nachschauen, ob es neue
> Daten gibt, die Daten auslesen und in die Karte bringen.
>
> 2)
> Wenn ich es richtig verstehe, ist leaflet nur ein Skript, dass
> client-seitig was ausführt. Wenn wir jetzt pro Wegpunkt 100 kb erzeugen,
> dann aber ja voraussichtlich 10 Stunden am Tag fahren, dann haben wir
> nach zwei Wochen in Summe Wegpunkte in der Größenordnung von Megabyte.
> Wenn also clientseitig das Auslesen und Interpretieren der Daten
> erfolgt, dann müssen unsere Website-Besucher, gerade auf einem mobile
> device, ewig warten, bis sich die Karte aufbaut. Das spricht dann
> irgendwie für CartoDB, wo alles bei denen lagert und man nur die Karte
> erhält (so zumindest mein Verständnis).
>
>
> **bisheriger Plan**
>
> - Cron-Job o.ä. fragt die XML-Dateien einmal ab ( die sind systematisch
> benannt)
> - XML wird ausgelesen, also: das
> Relevante (Zeitstempel, Koordinaten?) wird ausgelesen, und in SQL-Datenbank
> geworfen
> - anderes Script liest jeweils in Laufzeit die Punkte aus und gibt sie in
> einem Leaflet-kompatiblen Format aus. Idealerweise so, dass eine maximale
> Menge an Punkten nicht überschritten wird und bei größeren Mengen erstmal
> generalisiert wird.
>
>
> **konkretisierter Plan**
>
> 1. Einlesen XML, XML-Parsing, Überprüfung eventueller Doppler, Schreiben in
> SQL-Datenbank. In der Datenbank reicht im Prinzip eine Tabelle:
>
> tab rallye_karte_positionsdaten
>
> id (int, Index)
> lat (float)
> lon (float)
> zeitstempel (timestamp) *
>
> * zeitangaben sind vom Logger immer UTC
>
> Diese drei Daten könnte ein Script nach dem XML-Parsing ja auch direkt
> INSERTen.
>
> 2. Ausgabe: Herausfinden, wie viele Punkte sinnvollerweise dargestellt
> werden, Ausgabe dann entsprechend notfalls etwas vereinfacht unter
> Berücksichtigung des angezeigten Kartenausschnittes. Da müsste man
> vermutlich etwas AJAXen oder in den sauren Apfel beißen und alles laden
> oder eine passende Bib finden. Zweiter Punkt, der etwas Probleme
> bereitet, ist ad-hoc. Verbindungslinien zwischen den angezeigten Punkten
> würde
> man vielleicht jeweils ad-hoc generieren, vermutlich ist das kein
> Problem, weil man nur die richtige Reihenfolge der Punkte braucht (hat
> man ja per Timestamp).
>
> **Arbeitsstand**
>
> 1) Kartengrundlage von mapbox: https://goo.gl/Pz63Pf
>
> 2) das parsing der XML in die Datenbank:
>
> <?
> // Parst eine XML-Loggerdatei
> // und schreibt den Datensatz (Annahme: pro XML nur einer!)
> // in SQL-Datenbank
> // Keine Überprüfung auf Doppler bis hier
>
> // Datenbankdaten
>
> // $db_url = ;
> // $db_user = ;
> // $db_pass = ;
> // $db_name = ;
>
> // Pfad/URL der einzulesenden XML-Datei
> $xmlFile = 'datei.xml';
>
> // und hier geht es los mit dem XML-Parsing
>
> if (file_exists($xmlFile)) {
> $xml = simplexml_load_file($xmlFile);
>
>
> // geparste daten in variablen hauen und gleich bei jeder schauen, ob sie
> überhaupt da sind, wenn nicht, dann verwerfen wir den ganzen datensatz, da
> eh unbrauchbar
> // dann also: exit.
>
> if (!$v_timestamp = $xml->header[0]->time)
> exit;
>
> if(!$v_lat = $xml->gps[0]['lat'])
> exit;
>
> if(!$v_lon = $xml->gps[0]['lon'])
> exit;
>
> echo $v_lat;
>
> } else {
> exit("Datei $xmlFile geht nicht auf....");
> }
>
> // so, jetzt an die Datenbank
>
> // DB-Verbindung herstellen
>
> $db = mysql_connect("$db_url", "$db_user", "$db_pass");
> mysql_select_db("$db_name",$db);
>
> // SQL-Statement und danach gleich an Datenbank schicken
>
> $sql = "INSERT INTO rallye_karte_positionsdaten (zeitstempel,lat,lon)
> VALUES ('$v_timestamp','$v_lat','$v_lon')";
> $db_abfrage = mysql_query($sql,$db);
>
> ?>
>
>
> 3) in Wordpress basteln wir derzeit ein Plugin für dieses parsing und
> fügen eine weitere Spalte mit einem Infotextfeld in die Datenbanktabelle
> ein. Nachträglich kann man dann zu jedem beliebigen eingelesenen
> Koordinatenpunkt noch einen kurzen Infotext einfügen. Auf der Karte sind
> entsprechende Punkte dann besonders gekennzeichnet und ankilckbar, dann
> geht die Infobox mit dem Infotext auf.
>
>
> **Aufgaben und Probleme**
>
> Die Daten auf die Karte bringen, dass ist aktuell die größte Hürde. Wir
> wissen noch nicht ganz, wie jetzt diese Punkte da als Pop-up klickbar
> werden. Auch ganz großes Problem ist die Datengeneralisierung, so dass
> die Karte noch ladbar ist auf Handys etc.
>
>
> Also, wer uns kurzfristig unterstützen kann, sichert sich nicht nur ein
> großes Dankeschön, sondern auch ein goody aus einem Ort, den man nicht
> mal im OSM gemappt hat. :-)
>
> Beste Grüße
>
> Sören
>
>
>
>
Mehr Informationen über die Mailingliste Talk-de