Jekyll2017-09-15T14:59:14+02:00/GeoHub - Online Geodaten-Editor und PlattformDer Geodaten-Editor ist ein Werkzeug, das Nutzer*innen erlaubt, anhand vorhandener Geodaten z.B. auf OpenStreetMap neue Flächen, Linien oder Punkte zu erstellen und diese mit Metadaten zu versehen. Damit kann man Karten schnell und einfach mit sinnvollen Zusatzinformationen anreichern und mit anderen teilen.
GeoHub Editor Online Release2017-09-15T00:00:00+02:002017-09-15T00:00:00+02:00/2017/09/15/geohub-client-online-release<p>In den vergangenen Monaten konnte ich sukzessive die Probleme beim
Schneiden von Linien weiter lösen und zwar bis zu einem Punkt, wo
alles sehr gut funktioniert. Danach habe ich den Fokus auf die Funktionen
rund um den Editor gesetzt und weniger auf das Blogging hier. Aus dem Grund
gibt es hier jetzt einen Blog, der alle Funktionen zusammenfasst und erklärt.</p>
<p>Der Online-Editor ist ab sofort unter der folgenden URL verfügbar:
<a href="https://geohub-client.firebaseapp.com">https://geohub-client.firebaseapp.com</a></p>
<p><a href="https://geohub-client.firebaseapp.com"><img src="/images/geohub-screen.png" alt="Screenshot" /></a></p>
<p>Nach dem Öffnen des Editors sieht der Nutzer eine Karte und auf der rechten Seite
eine Reihe an Funktions-Icons, die im folgendem näher erklärt werden.
Der Editor kann grundsätzlich Punkte zeichnen, die zu Linien verknüpft werden können.
Um das Zeichnen zu beenden muss der letzte Punkt erneut angeklickt werden.
Wird nur ein Punkt gesetzt und dann erneut angeklickt, dann hat man nur einen einzelnen Punkt erstellt.
Wenn eine Linien geschlossen wird, d.h. der letzte Punkt entspricht dem ersten Punkt,
dann erstellt der Editor daraus automatisch eine Fläche (Polygon).</p>
<p>Werden in den Editor so genannte Stützdaten geladen, so kann man seine Punkte auf bereits
vorhandene Punkte platzieren oder sie entlang von bereits vorhandener Linien setzen.
Findet der Editor zwischen dem letzten Punkt und der aktueller Mausposition einen Weg
entlang der Stützdaten, so wird der Weg eingeblendet und kann mit einem Mausklick zu der
aktuellen Zeichnung hinzugefügt werden.</p>
<h3 id="funktionen">Funktionen</h3>
<p><img src="/images/action_download_ways.png" />
Lädt die Straßen-Geodaten für den aktuellen Bereich um sie als Stützdaten anzuzeigen. Mit Hilfe
der Stützdaten können andere Geo-Objekte ausgerichtet werden, z.B. entlang von Straßen oder
Gebäuden.</p>
<p><img src="/images/action_download_all.png" />
Lädt die Straßen und Gebäude-Geodaten für den aktuellen Bereich um sie als Stützdaten anzuzeigen.</p>
<p><img src="/images/action_editor.png" />
Öffnet den Editor um die Eigenschaften der ausgewählten Geodaten zu bearbeiten. Die Eigenschaften
sind einfache Schlüssel-Wert Paare, die jedem Objekt oder einer Gruppe von Objekten zugeordnet
werden können. Sind die Werte für manche Schlüssel unterschiedlich, so werden sie als Platzhalter
angezeigt.
</p>
<p><img src="/images/action_load.png" />
Lädt Geodaten von der Festplatte runter. Die Geodaten können im GEOJSON oder KML Format sein.
Es ist auch möglich die GEOJSON oder KML Datei einfach in den Browser zu ziehen um sie zu laden.
Mit dem GitHub Icon können die Daten auch von einem < href="https://gist.github.com/">GIST</a> geladen werden.
Dabei muss die URL von dem GIST bekannt sein und kann in einem Dialogfeld eingegeben werden.
</p>
<p><img src="/images/action_save.png" />
Speichert die aktuellen Geodaten als GEOJSON oder KML Datei auf der Festplatte. Alternativ können die
Daten auch als GIST gespeichert werden. Wenn nur bestimmte Objekte ausgewählt sind, so werden nur
sie gespeichert.</p>
<p><img src="/images/action_select.png" />
Auswahlwerkzeug um bestimmte Objekte auszuwählen. Bei gedrückter SHIFT-Taste können mehrere Objekte
selektiert werden.
</p>
<p><img src="/images/action_draw.png" />
Zeichenwerkzeug zum Zeichnen von neuen Geodaten. Bei aktiviertem Snapping werden die Daten
automatisch entlang bereits vorhandener Geodaten gezeichnet. Beim Drücken der SHIFT-Taste wird das
Snapping deaktiviert. Beim Drücken der ALT-Taste wird das Routing deaktiviert. Zum Löschen
der letzten Punkte kann die ENFT-Taste gedrückt werden.
Beim erneutem Klick auf den letzten Punkt wird das Zeichnen beendet und das Objekt abgeschlossen.
</p>
<p><img src="/images/action_cut.png" />
Schneidewerkzeug trennt die aktuelle Linie in zwei Teile. Beim Trennen von Polygonen wird das Polygon
aufgelöst und eventuelle innere Polygone als einzelne Polygone ausgelöst.
</p>
<p><img src="/images/action_snapping.png" />
Snapping Funktion aktivieren oder deaktivieren. Mit der Snapping Funktion wird versucht immer
den nächstgelegenen Punkt als Stützpunkt zu verwenden.
</p>
<p><img src="/images/action_routing.png" />
Routing Funktion aktivieren oder deaktivieren. Mit der Routing Funktion wird die gezeichnete Linie entlang bereits vorhandener Linien gezogen.
Dadurch stimmendie Daten exakt mit den bereits vorhandenen Geodaten überein.
</p>
<p><img src="/images/action_combine.png" />
Kombiniert die ausgewählten Objekte zu einem Objekt. Mehrere Linien werden dabei zu einer Linie
zusammengeführt. Die erste Linie legt dabei die Richtung für die Gesamtlinie fest.
Bei mehreren Polygonen ist das erste Polygon das äußere und die anderen sind die inneren Polygone.
</p>
<p><img src="/images/action_group.png" />
Objekte gruppieren. Es können nur Linien mit Linien (MultiLineString) und Polygone mit
Polygonen (MultiPolygon) gruppiert werden.
</p>
<p><img src="/images/action_ungroup.png" />
Gruppierung rückgängig machen. Die gruppierten Objekte werden dabei in ihre Ursprungsformen
aufgeteilt.
</p>
<p><img src="/images/action_polygon.png" />
Eine Linie zum Poylgon machen. Sind der Anfang- und Endpunkt nicht gleich, dann wird das
Polygon automatisch geschlossen.
</p>
<p><img src="/images/action_delete.png" />
Gezeichnete Daten löschen. Löscht alle Benutzerdaten. Kann nicht rückgängig gemacht werden.
</p>
<p><img src="/images/action_delete_snap.png" />
Löscht die Sützdaten im Hintergrund.
</p>
<p><img src="/images/action_zoom.png" />
Bewegt die Karte so, dass alle Benutzerobjekte sichtbar sind.
</p>
<p><img src="/images/action_hide_selected.png" />
Versteckt die gerade ausgewählten Objekt. Diese Funktion kann nützlich sein, wenn viele Objekte
übereinander liegen und man das gewünschte Objekte nicht direkt auswählen kann.
</p>
<p><img src="/images/action_add_snap.png" />
Fügt die aktuell ausgewählten Daten zur den Stützdaten hinzu.
</p>
<p>Ich freue mich über Feedback zu dem Editor per E-Mail. Da der Editor Open-Source ist, können gerne auch Änderungen
an dem Editor vorgenommen und als Pull-Requests eingereicht werden.</p>
<p>Auf Wunsch erstelle ich auch gerne einen Blog-Post, der beschreibt wie man das Build-System von dem Projekt
aufsetzt und neue Funktionen hinzufügt.</p>AdrianIn den vergangenen Monaten konnte ich sukzessive die Probleme beim Schneiden von Linien weiter lösen und zwar bis zu einem Punkt, wo alles sehr gut funktioniert. Danach habe ich den Fokus auf die Funktionen rund um den Editor gesetzt und weniger auf das Blogging hier. Aus dem Grund gibt es hier jetzt einen Blog, der alle Funktionen zusammenfasst und erklärt.Milestone 2 erreicht2017-07-03T00:00:00+02:002017-07-03T00:00:00+02:00/2017/07/03/milestone2-erreicht<p>In den vergangenen Wochen habe ich den Editor in großen Teilen überarbeitet und viele Probleme in der Behandlung
der Geodaten behoben. Mit dem <a href="/milestone2">heutigen Milestone 2</a> ist das Tool soweit, dass das Snapping
entlang von Geodaten hervorragend funktioniert und auch vom Benutzer gezeichnete Daten können als Grundlage für das
Snapping verwendet werden. Da im Moment nur Linien gezeichnet werden können, werde ich als Nächstes
auch Polygone zu dem Editor hinzufügen. Danach werden weitere Funktionen, wie Auswählen, Schneiden und Löschen von
Objekten dazu kommen.</p>
<p>Im Folgenden möchte ich eine paar Probleme dokumentieren, die mir auf dem Weg zum Milestone 2 begegnet sind.
Mit dem <a href="/milestone1">Milestone 1</a> war es möglich Linien entlang von bereits vorhandenen Linien zu zeichnen. Dabei
wurden immer die bereits vorhanden Punkte als Eckpunkte verwendet. Als ich die Funktion hinzugefügt habe, mit der
der Benutzer auch ohne Snapping neue Punkte hinzufügen konnte gab es ein sehr seltsames Verhalten beim Bewegen
der Maus und man konnte erkennen, dass das Routing entlang der bereits vorhandenen Geodaten nicht funktioniert.</p>
<p><img src="/images/geohub-bug1.png" alt="Screenshot" /></p>
<p>Beispiel 1: Der Benutzer hat mit Punkt A angefangen zu zeichnen und bewegt die Maus auf die Diagonale
zwischen den Punkten D und B. Die kürzeste Strecke wäre in dem Fall A, B und E. Der Algorithmus wählt jedoch
einen “Umweg” und zeichnet die Route über die Punkte A, B, C, D und E.</p>
<p><img src="/images/geohub-bug2.png" alt="Screenshot" /></p>
<p>Beispiel 2: Der Benutzer hat erneut am Punkt A angefangen und bewegt die Maus entlang der Linie zwischen
den Punkten E und F. Der Algorithmus wählt hier die Route über die Ecke C, obwohl die
Verbindung B, D kürzer wäre.</p>
<p>In beiden Fällen ist der Punkt B das Problem. Obwohl dieser Punkt zuvor über den Editor hinzugefügt wurde und
der Snapping Algorithmus diesen Punkt als “auf der Linie” berechnet hat, ist dieser Punkt
nicht wirklich auf der Linie und wird somit nicht in der Route berücksichtigt.</p>
<p>Die Ursache dafür sind verschiedene Rundungsfehler, die bei geometrischen Berechnungen entstehen. Durch diese
Rundungsfehler können mehrere Fälle entstehen, bei denen der Punkt nicht auf der Linie liegt und
somit nicht in die Routenberechnung einbezogen wird.</p>
<p>Um dieses Problem zu beheben analysiert der GeoHub Editor jede Linie, die vom Benutzer gezeichnet wird
auf Schnittpunkte mit bereits vorhandenen Linien. Dabei werden zwei Sonderfälle untersucht und entsprechend behandelt.</p>
<p><em>Sonderfall 1</em>: Zwei Linien schneiden sich, aber das eine Endstück ist so kurz, dass es kaum ins Gewicht fällt.
In diesem Fall wird der Endpunkt der einen Linie als Schnittpunkt der zweiten Linie genommen.</p>
<p><em>Sonderfall 2</em>: Zwei Linien schneiden sich nicht, aber ein Endpunkt einer Linie liegt so nah an einer anderen Linie,
dass er als Schnittpunkt gelten könnte. In diesem Fall wird ebenfalls der Endpunkt der einen Linie
als Schnittpunkt der zweiten Linie genommen.</p>
<p>Mit der Umsetzung der beiden Sonderfälle funktioniert nun das Erstellen von neuen Linien
entlang von benutzergenerierten Linien. Am besten lässt es sich am aktuellen <a href="/milestone2">Milestone 2</a>
testen. Auf dieser Seite werden bereits die Geodaten für die darunter liegende Karte geladen.
Man kann die Karte jedoch überall bewegen und mit dem “Wolke”-Button rechts oben auch
weitere Daten für einen anderen Ausschnitt downloaden.</p>
<p><img src="/images/geohub-milestone1.png" alt="Screenshot" /></p>
<h3 id="weiteres-vorgehen">Weiteres Vorgehen</h3>
<p>Wie bereits angedeutet soll als Nächstes die Möglichkeit zum Zeichnen von Polygonen geschaffen werden und dann auch
verschiedene Funktionen um Objekte auswählen und löschen zu können.</p>AdrianIn den vergangenen Wochen habe ich den Editor in großen Teilen überarbeitet und viele Probleme in der Behandlung der Geodaten behoben. Mit dem heutigen Milestone 2 ist das Tool soweit, dass das Snapping entlang von Geodaten hervorragend funktioniert und auch vom Benutzer gezeichnete Daten können als Grundlage für das Snapping verwendet werden. Da im Moment nur Linien gezeichnet werden können, werde ich als Nächstes auch Polygone zu dem Editor hinzufügen. Danach werden weitere Funktionen, wie Auswählen, Schneiden und Löschen von Objekten dazu kommen.Projektreoganisation2017-05-16T00:00:00+02:002017-05-16T00:00:00+02:00/2017/05/16/projekt-reoganisation<p>Mit dem Datensummit und den Gesprächen mit dem Team von MapBox musste ich feststellen,
dass einige meiner Annahmen über MapBox GL nicht ganz zutreffen und deshalb eine
Neuausrichtung der Projekts notwendig ist. Die Daten, die ich bisher über die
mit Hilfe von MaxBox GL abgerufen habe können durch die Konvertierung in Vektor-Kacheln
verändert und teilweise auch optimiert werden, so dass die Punkte nicht mehr
dieselben sind oder nicht mehr verfügbar sind.</p>
<p>Aus diesem Grund muss der GeoHub Editor jetzt neu ausgerichtet werden. Der Editor wird
nicht mehr von MaxBox GL abhängig sein. Ich will weiterhin die Vektor-Kacheln verwenden,
weil sie einfach eine besser Darstellung im Browser bieten. Danach werde ich jedoch
den Editor weitestgehend mit Hilfe von Events auf die Benutzereingaben reagieren lassen
und der Editor wird auch seine eigenen Daten verwalten und sie nicht mehr aus dem
verwendeten Rendering holen.</p>
<p>Diese Unabhängigkeit gibt mir jetzt die Möglichkeit mit der Entwicklung schneller voranzukommen,
weil die Abstimmung mit anderen Frameworks wegfällt.
Die Nutzung von MapBox GL als Datenquelle war sehr verlockend, weil so viel fertig zu sein schien,
das Feedback der MapBox Entwickler hat mir jedoch klar gezeigt, dass MapBox GL auf die Darstellung
der Karte optimiert ist und dadurch manche Daten weggelassen werden.
Dies entspricht nicht dem Ansatz vom GeoHub Editor, der exaktes Bearbeiten von
Geodaten ermöglichen soll.</p>AdrianMit dem Datensummit und den Gesprächen mit dem Team von MapBox musste ich feststellen, dass einige meiner Annahmen über MapBox GL nicht ganz zutreffen und deshalb eine Neuausrichtung der Projekts notwendig ist. Die Daten, die ich bisher über die mit Hilfe von MaxBox GL abgerufen habe können durch die Konvertierung in Vektor-Kacheln verändert und teilweise auch optimiert werden, so dass die Punkte nicht mehr dieselben sind oder nicht mehr verfügbar sind.Snap auf Eckpunkte und Zwischenpunkte2017-04-24T00:00:00+02:002017-04-24T00:00:00+02:00/2017/04/24/snap-auf-eckpunkte-und-zwischenpunkte<p>Nachdem das Setzen von Punkten entlang einer Linie bereits in dem letzten Update schon
ganz gut funktioniert hat, habe ich mit diesem Update eine stärkere Snap-Wirkung
an den Eckpunkten hinzugefügt. Dies ist wichtig, weil eigentlich sind das die Punkte,
die tatsächlich bereits Bestandteil der Karte sind und somit dem User besonders angezeigt
werden sollten.</p>
<p>Im folgendem Video kann man den Effekt ganz gut sehen. Der Benutzer setzt
hier Punkte, die perfekt mit dem Wegenetz entsprechen, obwohl er nie perfekt auf
die Eckpunkte klickt. Dies wird vom Editor automatisch erledigt.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Q5EcxM5dYFw" frameborder="0" allowfullscreen=""></iframe>
<p>In der weiteren Umsetzung werden jetzt auch die notwendigen Zwischenpunkte
ermittelt. Wenn der Benutzer einen neuen Punkt setzt, so sollen dann auch
die Zwischenpunkte automatisch hinzugefügt werden, damit die gezeichnete
Linie auch 100%ig der darunterliegenden Karte entspricht.</p>
<p>Die roten Punkte in dem folgenden Video symbolisieren alle Punkte, die sich zwischen
der aktuellen Mausposition und dem letzten gesetzen Punkt befinden. Erstellt der
Benutzer einen neuen Punkt entlang dieser Linie, dann wird der Editor auch alle
roten Punkte zur aktuellen Zeichnung hinzufügen.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/LCnwUKqFjj0" frameborder="0" allowfullscreen=""></iframe>
<h3 id="weiteres-vorgehen">Weiteres Vorgehen</h3>
<p>An dieser Stelle sind weitere Analysen notwendig. Je nachdem, wie weit der User
von dem letzten Punkt entfernt klickt, können mehrere Pfade zwischen dem Punkt und der
aktuellen Mausposition liegen. Hier müssen dann verschiedene Routen berechnet werden
und der kürzeste Pfad angezeigt werden. Da dies bereits stark in Richtung Navigation führt,
wird man diese Funktion entsprechend eingrenzen müssen, da sonst die Berechnungen
zu lange dauern würden.</p>
<p>Darüber hinaus ist eine stärkere Integration in den Draw-Editor an sich notwendig.
Im Moment ist die Snap-Funktion einfach eine Art Plugin, die intern die Mausposition
für den Editor verändert. Da die Snap-Funktion aber jetzt auch Zwischenpunkte
hinzufügt, muss dies beim Rückgängigmachen auch berücksichtigt werden. D.h. der
Editor muss wissen, welche Punkte vom Benutzer und welche Punkte automatisch
hinzugefügt wurden.</p>AdrianNachdem das Setzen von Punkten entlang einer Linie bereits in dem letzten Update schon ganz gut funktioniert hat, habe ich mit diesem Update eine stärkere Snap-Wirkung an den Eckpunkten hinzugefügt. Dies ist wichtig, weil eigentlich sind das die Punkte, die tatsächlich bereits Bestandteil der Karte sind und somit dem User besonders angezeigt werden sollten.Erste Tests mit Snap-Funktionen2017-04-06T00:00:00+02:002017-04-06T00:00:00+02:00/2017/04/06/erste-tests-mit-snap-funktionen<p>Die Basisfunktion des Online-Editors ist die Snap-Funktion. Darunter
versteht man, dass der User beim Zeichnen von Objekten, diese anhand
bereits vorhandener Objekte ausrichten kann. Dies ist extrem wichtig
um Flächen und Routen zu erhalten, die genau an bereits vorhandenen
Orientierungspunkten, wie Straßen ausgerichtet sind.</p>
<p>In den bisherigen Editoren wie dem <a href="http://geojson.io">geojson.io Editor</a> kann man Flächen
und Routen freihand zeichnen und erhält dann Daten, die mehr oder weniger
genau an den vorhandenen Straßen ausgerichtet sind.
Hier ein Beispiel:</p>
<p><img src="/images/handmade-track.png" alt="Beispiel Handgezeichnet" /></p>
<p>Für den Fall der Routenaufzeichnung kann man natürlich auch das GPS-Signal
nutzen und dann die gewünschte Route einfach ablaufen und sie aufzeichnen.
Je nach Signalqualität ist die aufgezeichnete Route dann ebenfalls mehr oder weniger
genau ausgerichtet.</p>
<p><img src="/images/gps-track.png" alt="Beispiel GPS Aufreichnung" /></p>
<p>Die perfekte Lösung ist natürlich, wenn der Editor den User dabei unterstützt die
Route an den vorhandenen Geo-Punkten auszurichten und ihm hilft Punkte zu setzen, die
genau mit den bereits vorhandenen Punkten übereinstimmen. So ergibt sich eine Route,
die genau mit den bereits vorhandenen Wegen übereinstimmt.</p>
<p>Ich habe ein Beispielvideo aufgezeichnet, welches die Snap-Funktion des GeoHub-Editors
verdeutlicht. In diesem Beispiel sieht man einen roten Punkt, der immer den nächsten
verfügbaren Punkt in den Geodaten in Bezug zum aktuellen Mauszeiger anzeigt. Der Punkt
wird nur angezeigt, wenn es bereits Geodaten in einem bestimmten Radius zur aktuellen
Mauszeigerposition gibt.
Ist der Punkt sichtbar, so wird bei einem Mausklick dieser Punkt zur aktuellen
Zeichnung hinzugefügt. So kann der User sowohl Flächen als auch Linien genau
an den bereits vorhanden Straßen ausrichten. Man kann in dem Video sehr schön sehen, wie
der Punkt jeweils die nächstgelegene Linie auswählt.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/J1B9b6iXuxc" frameborder="0" allowfullscreen=""></iframe>
<p>Natürlich kann man dieselbe Snap-Funktion für Geodaten nutzen, die normalerweise nicht Teil
der sichtbaren Geodaten, wie Straßen sind. Dies können irgendwelche Grenzen sein oder sogar
eigene Geodaten, die man vorher erstellt hat.</p>
<p>Ich habe auch hierzu ein Beispiel erstellt indem ich beispielhaft ein Polygon in den GeoHub-Editor
geladen habe und dann weitere Flächen an diesem Polygon ausgerichtet habe. In diesem Beispiel
wurde der Editor so eingestellt, dass er nur das hinzugefügte Polygon als Referenz verwendet und
nicht die darunter liegenden Straßen. Der rote Punkt bewegt sich nur entlang der grauen Linie des
Polygons.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/jDImurMok5U" frameborder="0" allowfullscreen=""></iframe>
<h3 id="weiteres-vorgehen">Weiteres Vorgehen</h3>
<p>Die gezeigten Videos zeigen bereits schon ganz gut wohin die Reise gehen soll.
Es sind jedoch noch einige Herausforderungen zu meistern. Als nächste Funktion will ich den Editor so umbauen,
dass er die Eckpunkte der bereits vorhandenen Geodaten besser visualisiert und auch an diesen
Punkten eine stärkere Snap-Wirkung für den User bemerkbar ist. Dies ist wichtig, da im Moment
der Editor neue Punkte interpoliert, die zwischen zwei Punkten liegen. Dieses Verhalten ist gewünscht, weil
der User durchaus die Möglichkeit haben soll Linien und Flächen an Punkten anzuschließen, die
zwischen zwei Punkten liegen. Im Moment ist es für den User jedoch nicht erkennbar, ob er den
neuen Punkt genau auf einem bereits vorhandenen Punkt setzt oder
zwar auf der Linie, aber knapp daneben.</p>AdrianDie Basisfunktion des Online-Editors ist die Snap-Funktion. Darunter versteht man, dass der User beim Zeichnen von Objekten, diese anhand bereits vorhandener Objekte ausrichten kann. Dies ist extrem wichtig um Flächen und Routen zu erhalten, die genau an bereits vorhandenen Orientierungspunkten, wie Straßen ausgerichtet sind.Analyse der vorhandenen Online Geo-Editoren2017-04-02T00:00:00+02:002017-04-02T00:00:00+02:00/2017/04/02/analyse-vorhandene-online-editoren<p>Als Vorbereitung auf die Entwicklung des Geo-Editors habe ich mir
einige Online Editoren und Erweiterungen angeschaut, die das Bearbeiten
von Geodaten im Browser erlauben und auch die wichtige Snap-Funktion anbieten.</p>
<p>Einer der Online Editoren ist der <a href="http://geojson.io/">geojson.io</a>. Ich habe diesen Editor bereits
öfters in der Vergangenheit verwendet. Er bietet gute Möglichkeiten um
Geodaten wie Linien und Polygone zu erstellen und diese auch mit
Zusatzattributen zu versehen. Der Editor kann die Geodaten aus verschiedenen
Quellen und in verschiedenen Formaten einlesen und dann auch in diese Formate exportieren.
Eigentlich die hervorragende Basis für die Entwicklung des GeoHub-Editors.
Was geojson.io fehlt ist die Snap-Funktion, die das Ausrichten von neuen Elementen an
bereits vorhandenen Geodaten erlaubt.</p>
<p><img src="/images/geojson-io-editor.png" alt="Screenshot geojson.io" /></p>
<p>Da der geojson.io Editor auf <a href="http://leafletjs.com/">Leaflet</a> und
dem <a href="https://github.com/Leaflet/Leaflet.draw">Leaflet.Draw Plugin</a> basiert,
habe ich mir auch einige Plugins angeschaut, die
eine Snap-Funktion unterstützen würden. Dabei gibt es tatsächlich einige Plugins/Editoren, die
diese Funktion unterstützen und zwar das reine
<a href="https://github.com/makinacorpus/Leaflet.Snap">Leaflet Snap Plugin</a> oder das darauf
basierende <a href="https://github.com/kklimczak/Leaflet.Pin">Leaflet Pin Plugin</a>, welches das Zeichnen von verschiedenen
Geoobjekten erlaubt.
Beide Plugins sind jedoch seit einiger Zeit nicht mehr weiterentwickelt worden und basieren auf einer
0.7er Version von Leaflet. Mit dem Update auf Leaflet 1.0 wurden jedoch einige APIs verändert, so
dass diese Plugins nicht mehr mit der neusten Version kompatibel sind.
Ein weiteres Plugin, welches im Moment recht aktuell gehalten wird ist das <a href="https://github.com/codeofsumit/leaflet.pm">Leaflet PM</a>.
Auf der Webseite wird sehr eindrucksvoll gezeigt, welche Möglichkeiten damit realisiert werden.</p>
<p>All diese Plugins und Editoren basieren auf Leaflet und somit auch auf der kachelbasierenden
Darstellung der Karte. Dies heißt, dass die Karte bereits vorgerendert ist und somit alle
Informationen über die Straßen und andere Geoinformationen fehlen. Ein neuer Ansatz, der
bereits in Google Maps zu sehen ist und auch von Mapbox genutzt wird, ist das Rendern der
Daten direkt im Webbrowser des Nutzers. Dank <a href="https://de.wikipedia.org/wiki/WebGL">WebGL</a> kann dies mittlerweile sehr
performant realisiert werden und erlaubt das stufenlose Zoomen der Karte.
Im Rahmen vom Prototype Fund wird auch das Projekt <a href="https://thomas.skowron.biz/blog/grandine-summary-march-2017/">Grandine</a>
von Thomas Skowron gefördert, welches zum Ziel die Erstellung von Vektor Kacheln hat.
Der Vorteil dieser Kacheln ist, dass die Informationen über Straßen
als Vektordaten und vorliegen und somit alle Punkte einer Straße auf dem Rechner
verarbeitet werden können. Genau diese Punkte benötigt auch der GeoHub-Editor
um neue Geodaten entlang bereits vorhandener Punkte und Linien zu erstellen.</p>
<p>Das open-source <a href="https://github.com/mapbox/mapbox-gl-js">Projekt Mapbox-Gl</a> nutzt bereits die Vektorkacheln und rendert
diese im Browser zu einer Karte. Dazu wurde auch ein <a href="https://github.com/mapbox/mapbox-gl-draw">Tool zum Zeichnen von Linien und Polygonen</a>
für Mapbox-Gl entwickelt. Seit Anfang des Jahres gibt es sogar einen <a href="https://github.com/mapbox/mapbox-gl-draw/pull/583">Pull Request, der die Snap-Funktionen</a>
in dem Draw Tool integriert. Diese Konstellation sieht für mich als die
beste Grundlage aus um den GeoHub Editor zu implementieren. Sowohl die ersten Ansätze
einer Snap-Funktion als auch die Verfügbarkeit der Geodaten in den Vektorkacheln sind
entscheidende Vorteile. Es ist auch davon auszugehen, dass die Weiterentwicklung der
Kartenwerkzeuge auf Basis von Vektorkacheln erfolgen wird.</p>
<h3 id="weiteres-vorgehen">Weiteres Vorgehen</h3>
<p>Der Vektorkacheln basierte Ansatz verspricht den besten Erfolg, so dass
ich in den nächsten Tagen den Pull Request mit der Snap-Funktion bei mir einrichten werde
und die vorhandenen Funktionen soweit ausbauen will, dass man neue Geodaten
entlang von bereits vorhandenen Daten zeichnen kann.
Darüber hinaus will ich mit den Entwicklern, die an dem Pull Request beteiligt sind,
klären wie meine Anforderungen in das Projekt einließen könnten.</p>AdrianAls Vorbereitung auf die Entwicklung des Geo-Editors habe ich mir einige Online Editoren und Erweiterungen angeschaut, die das Bearbeiten von Geodaten im Browser erlauben und auch die wichtige Snap-Funktion anbieten.Projektbeschreibung und Milestones2017-03-18T00:00:00+01:002017-03-18T00:00:00+01:00/2017/03/18/projektbeschreibung-und-milestone<p>Für die erste Runde des Prototype Funds habe ich mich mit folgender Idee beworben.</p>
<h1 id="welches-problem-willst-du-mit-deinem-projekt-lösen-was-ist-deine-motivation">Welches Problem willst Du mit Deinem Projekt lösen? Was ist Deine Motivation?</h1>
<p>Open Street Map hat in den letzten Jahren gezeigt wie wichtig den Menschen Geodaten sind. In Open Street Map können jedoch nicht alle Daten gespeichert werden, wie zum Beispiel Daten über gebührenpflichtige Parkzonen und Wasserversorgungsgebiete.</p>
<p>Beim Trinkwassertool habe ich zum Beispiel gemerkt, dass es sehr schwierig ist, die Daten geobasiert zu erfassen. Wir können den Gemeinden oder anderen Freiwilligen nicht einfach einen Link schicken, über den sie die Versorgungsgebiete einzeichnen können. Zudem orientieren sich die Versorgungsgebiete an Straßen, Stadtteilen und Stadtgrenzen, so dass man derzeit diese Grenzen neu abzeichnen müsste.</p>
<p>Journalisten, die für einen Artikel nur bestimmte Gebiete oder Straßenzüge hervorheben wollen, müssen diese im Moment mühsam in Grafikeditoren nachzeichnen. Diese nachgezeichneten Karten sind nicht sehr präzise und nur sehr schlecht für die Wiederverwendung in neuen Daten geeignet, weil sie als Grafik vorliegen.</p>
<h1 id="wie-wird-dein-projekt-dieses-problem-lösen">Wie wird Dein Projekt dieses Problem lösen?</h1>
<p>Mit dem Geodaten Editor soll ein Web-Tool geschaffen werden, welches es dem Nutzer erlaubt anhand vorhandener Geodaten, neue Geodaten, wie Flächen, Linien oder Punkte zu erstellen und diese mit Meta-Daten zu versehen.</p>
<p>Wichtig ist, dass das Tool es dem Nutzer erlaubt Linien entlang bereits vorhandener Linien zu zeichnen. Hat man beispielsweise bereits die Stadtgrenzen einer Stadt in den Editor geladen, so ist es nicht mehr nötig die äußeren Stadtteilgrenzen nochmals zu zeichnen. Nur die inneren Stadtteilgrenzen müssen gezeichnet werden und die äußeren Stadtteilgrenzen können aus den vorhandenen Stadtgrenzen übernommen werden.
Dasselbe gilt auch für Straßenzüge. Möchte man zum Beispiel Flächen oder Routen entlang bereits vorhandener Straßen zeichnen, so können diese in den Editor geladen werden und als Teil der der Fläche oder Route übernommen werden.</p>
<p>Alle in dem Editor erzeugten Daten können auf der Editor-Plattform gespeichert werden und anderen Nutzern zur Verfügung gestellt werden (ähnlich wie das Gist System von Github). Die User können somit andere Geodaten leicht für ihre eigenen Geodaten nutzen. Hat jemand beispielsweise schon die Stadtgrenzen einer Stadt auf der Plattform gespeichert, so können diese Daten leicht übernommen werden um beispielsweise Wasserversorgungsgebiete einzuzeichnen.</p>
<p>Alle gezeichneten Daten sollen mit Meta-Daten versehen werden können um zu beschreiben, was sie bedeuten oder enthalten. Der Export und Import der Daten in/aus bekannten Formaten wie GeoJSON, TopoJSON, GPX oder SVG soll in dem Editor möglich sein.</p>
<p>Die gezeichneten Daten sollen natürlich leicht als Karte für Print oder Web exportiert werden können.</p>
<h1 id="wer-ist-die-zielgruppe-wie-profitiert-sie-vom-projekt">Wer ist die Zielgruppe? Wie profitiert sie vom Projekt?</h1>
<p>Das Projekt richtet sich an alle, die mit Geodaten arbeiten.</p>
<p>Für Journalisten kann dieses Tool sehr wichtig sein um schnell und einfach eigene Visualisierungen zu erstellen. Durch die Verknüpfung von Meta-Daten können im Web leicht interaktive Karten erstellt werden, die für den Besucher im Detail sehr informativ sind.</p>
<p>Mitarbeiter in der Verwaltung können das Tool nutzen um für die Bürger genaue Karten mit bestimmten Versorgungsgebieten zu kennzeichnen. So werden im Moment häufig einfach nur Straßenzüge genannt, wenn Trinkwasserdaten veröffentlicht werden. Hier kann man sich nur sehr schlecht orientieren. Auch Müllabfuhr-Bezirke werden nur anhand von Straßen benannt und sind für die User nicht auf Anhieb eindeutig zu erkennen.
Darüber hinaus soll das Tool eine schnelle Möglichkeit bieten um Bauprojekte zu visualisieren und die damit verbundenen Behinderungen.</p>
<p>Geodaten Enthusiasten sollen das Tool nutzen können um beispielsweise Wanderrouten zu zeichnen und anderen zur Verfügung zu stellen. Durch die einfache Übernahme der Daten sollen andere die Möglichkeit haben, basierend auf diesen Daten neue Routen zu erstellen. Auch Blogger, die häufig in ihren Blogs Geodaten verwenden sollen mit dem Tool neue Möglichkeiten erhalten um ihre Besucher zu informieren und ihnen die Geodaten in offenen Formaten zum Download anbieten.</p>
<p>Als Open Source Projekt sollen von den geschaffenen Funktionalitäten auch Entwickler profitieren und in die Lage versetzt werden den Editor zu erweitern oder eigene Projekte auf Basis des Editors zu starten.</p>
<h1 id="skizziere-kurz-die-wichtigsten-meilensteine-deines-projekts">Skizziere kurz die wichtigsten Meilensteine Deines Projekts.</h1>
<ol>
<li>Untersuchung und Analyse, wie der GeoJSON.IO Editor als Grundlage für dieses Projekt verwendet werden kann</li>
<li>Anpassung von GeoJSON.IO oder Entwicklung eines neuen JavaScript Editors, der es erlaubt Geodaten zu bearbeiten</li>
<li>Entwicklung von Import-Modulen, die Geodaten aus OpenStreetMap (via Overpass API) und aus anderen GeoJSON Datenquellen importieren können</li>
<li>Entwicklung eines Backends welches die Geodaten ähnlich wie Gist von Github speichert und anderen zur Verfügung stellt</li>
<li>Verknüpfung des JavaScript Editors mit dem Backend</li>
<li>Entwicklung von Export-Modulen für die Formate GeoJSON, TopoJSON, GPX und SVG</li>
<li>Entwicklung eines Export-Moduls für gerenderte Karten</li>
<li>Erstellung von Video-Tutorials um anhand von Beispielen den Nutzen des Projekts zu visualisieren</li>
</ol>Für die erste Runde des Prototype Funds habe ich mich mit folgender Idee beworben.