[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