Vorstellung: MapTools – Spielereien mit Koordinaten

Heute möchte ich euch ein kleines Projekt von mir vorstellen: MapTools

 

Wer kennt das nicht? Man ist gerade dabei einen Mysterie zu lösen, doch die letzte Variable bleibt eine Unbekannte, egal was man anstellt. Schnell kommt man in die Verlegenheit einfach mal ein paar Werte testweise auszuprobieren und sich das ganze auf der Karte anzuschauen. Oftmals bleiben nur ein paar wenige plausible Koordinaten übrig, mit denen man dann den Checker quälen kann, oder die es lohnt abzulaufen.

Doch was so einfach klingt kann schnell zu komplex werden, um es ‚mal eben fix‘ auszuprobieren. Allein zwei Variablen mit möglichen Werten von 0 bis 9 ergeben bereits 100 verschiedene Koordinaten. Da ist man gut und gerne einen halben Vormittag beschäftigt 😀

Genau aus diesem Grund habe ich das MapTool entwickelt, welches diese und weitere Aufgaben erleichtern soll und dessen Verwendung ich hier nun gerne vorstellen möchte.

1. Auf den ersten Blick

Übersicht
Übersicht

Beim ersten Öffnen der Seite mag einem das ganze ein wenig spartanisch und un-intuitiv vorkommen, doch Hauptziel war es der Karte so viel Platz wie möglich einzuräumen, weshalb alles andere am oberen, bzw. unteren Rand der Seite platziert wurde.

Doch was genau sehen wir nun auf der Seite?

Die Knöpfe 1-5 werde ich später noch genauer erläutern und interessieren uns erstmal nicht. Klickt man auf die Schaltfläche unter #6 erhalten wir ein Menü indem wir zwischen verschiedenen Karten hin- und her wechseln können, zusätzlich können wir Ländergrenzen ein- und ausschalten. Unter #7 werden alle Ebenen angezeigt die wir zukünftig hinzufügen werden, hierzu müsst ihr notfalls ein wenig herunterscrollen, aber auch diese Funktionen werde ich später noch einmal genauer erläutern.

Hinweis: Alle im nachfolgenden Text verwendeten Koordinaten sind rein zufällig und liegen irgendwo in Berlin! Sollte ich zufällig irgendeinen Cache getroffen haben bitte ich dies zu entschuldigen!

2. Button #1: „Add Markers“

Bevor wir nun sofort ins kalte Wasser springen wollen wir uns erst einmal ein Beispiel überlegen: Angenommen wir haben einen Mystery bei dem uns noch zwei Werte fehlen (hier der Einfachheit halber a und b) und eine ‚Formel‘ der folgenden Form: N52° 31.a53 E13° 2b.283. Für a wissen wir, dass Werte von 0-9 und für b Werte von 1-6 in Frage kommen. Summa summarum macht das 60 Koordinaten. Wie können wir diese nun schön auf die Karte plotten lassen?

Ganz einfach! Wir klicken auf den Button „Add Markers“, geben der Ebene einen beliebigen Namen und es öffnet sich der nächste Dialog:

Dialog zum Hinzufügen eines Bereiches.
Dialog zum Hinzufügen eines Bereiches.

In diesem Dialog geben wir nun die minimal und maximal möglichen Koordinaten ein (Zur Erinnerung: a=0..9 und b=1..6) und bestimmen die Schrittweite. Die Notation der Schrittweite ist mathematisch nicht ganz korrekt, erleichtert uns aber die Eingabe. Wollen wir also Schritte in zehntel Minuten machen, wie wir es für a benötigen, so geben wir für die Schrittweite der Latitude einen Wert von 100 ein. Bei b wollen wir Schritte in ganzen Minuten machen und geben deshalb einen Wert von 1000 ein. Mathematisch gesehen entspricht die Schrittweite also WERT/1000 Minuten.

Die weiteren Optionen müssen uns an dieser Stelle nicht interessieren, wer möchte kann aber noch die Farbe der Punkte anpassen.

Wir klicken also auf „Ok“ und erhalten folgendes Bild:

maptools_screen3

Damit kann man doch schonmal einiges anfangen!

3. Die Ebenen-Tabelle

An dieser Stelle möchte ich einen kurzen Einschub machen und die Ebenen-Tabelle unter der Karte erklären:

Die Ebenen-Tabelle
Die Ebenen-Tabelle
  1. Ganz links zu sehen ist die Nummer der Ebene und deren Farbe.
  2. Der Namen den man der Ebene gegeben hat.
  3. Hiermit kann man eine einzelne, oder alle Ebenen löschen.
  4. Oftmals hat man so weit rausgezoomt, dass man die Ebene nicht sieht. Mit einem Klick auf die Lupe wird auf die entsprechende Ebene gezoomt.
  5. Hiermit kann man einzelne, oder alle ebenen verstecken.
  6. Mit dieser Option lassen sich alle Punkte der Ebene in eine GPX-Datei exportieren.

4. Button #2: „Bulk Add“

Auch hier wollen wir uns wieder ein (völlig fiktives) Beispiel ausdenken. Angenommen wir hätten einen Mystery, in dessen Listing mehrere hundert, vielleicht sogar mehrere tausend Koordinaten stehen würden. Ziel wäre es nun, diese Koordinaten auf einer Karte darzustellen und zu schauen, was diese ‚zeichnen‘. Denkbar wäre es, dass die Final-Koordinaten gezeichnet würden, oder auch einfach Pfeile, die auf das Final zeigen. Zu Fuß ist das natürlich eine sehr undankbare Arbeit, aber wofür gibt es Tools, die einem die Arbeit abnehmen 😀

Da ich für diesen Eintrag keine Lust hatte, mir extra irgendwelche Koordinaten auszudenken, habe ich einfach welche genommen, die ich im Internet gefunden habe: Koordinaten Ziel ist es nun, ein Lösungswort herauszufinden und zwar etwas, das alle Koordinaten eint, bzw. den Ort auf den diese zeigen.

Wir klicken nun also auf „Bulk Add“, geben der Ebene wieder einen Namen und es erscheint folgendes Fenster:

Der BulkAdd-Dialog
Der BulkAdd-Dialog

In das große Feld geben wir unsere Koordinaten ein (momentan sind nur Grad und Dezimalminuten erlaubt, weitere Formate werden demnächst hinzugefügt). Damit wir später auch etwas sehen, sollten wir den optischen Radius auf eine entsprechende Größe Stellen – in diesem Fall eignen sich 10.000m. Nach dem Klick auf „Ok“ erhalten wir folgendes Bild:

maptools_screen6

Wer in Erdkunde aufgepasst hat wird nun schnell erkennen, dass es sich um die Hauptstädte Europas handelt, was in unserem Fall das Lösungswort gewesen wäre 😉

5. Button #3: „Add GPX“

Erinnern wir uns zurück an das Beispiel aus Teil 2. Viele der Koordinaten könnte man bestimmt ausschließen, würde man sich einfach Tradis, oder andere gelöste Mysteries in der Nähe anzeigen lassen können. MapTools – oh Wunder – hat natürlich auch dafür das passende Feature parat 😀

Wie man sich nun denken kann, klicken wir auf „Add GPX“, geben dieses mal keinen Namen ein 😛 und es erscheint folgender Dialog:

maptools_screen7Hier gilt es nun einiges einzustellen. Als erstes wählen wir die GPX Datei aus, die wir hochladen wollen. Die Datei wird übrigens nicht auf den Server hochgeladen, sondern wird lokal von eurem Browser verarbeitet!

Unter „Radius“ können wir nun zwei verschiedene Radien einstellen. Der erste ist der sog. ‚optische‘ Radius, dieser gibt an, wie groß der angezeigte Radius um einen Punkt sein soll. Diesen wählen wir in unserem Fall auf 161 Meter. Der zweite Radius gibt an, in welchem Umkreis die Punkte andere Punkte beeinflussen sollen. Auf den ersten Blick mag es unsinnig erscheinen zwei verschiedene Werte zu haben, doch um die Übersicht zu wahren ist es oft sinnvoll, dem optischen Radius einen relativ kleinen Wert zuzuweisen.

Doch wie genau können sich Punkte untereinander beeinflussen? Ganz einfach! In unserem Beispiel wollen wir uns Tradis anzeigen lassen, die in der Nähe unserer vermuteten Koordinaten (siehe Abschnitt #2) liegen. Schön wäre es, wenn gleich alle Koordinaten entfernt würden, die im Bannkreis eines Tradis liegen – oder anders ausgedrückt: Entferne alles was innerhalb des 161m-Radius eines Tradis liegt. Diese Einstellung tätigen wir, indem wir unter „Effect on other markers“ die Option „Remove inner markers“ wählen.

Manch einer mag sich nun wundern, warum ich den Effekt-Radius nicht auf 161m gestellt habe. Dies liegt daran, dass Reviewer oft eine gewisse Toleranz erlauben – 155 Meter ist somit ein guter Wert, der Toleranzen berücksichtigt.

Damit unsere schönen Tradis aber nicht wieder von anderen Ebenen verdrängt werden entfernen wir den Haken unter „Is Removeable?„.

Wer mag gibt nun der Ebene noch eine schöne Farbe – ich habe mich für Tradi-Grün entschieden – und wählt die Cachetypen an oder ab, die angezeigt werden sollen, natürlich macht das bei allen Typen außer Tradis nur Sinn, wenn man die Koordinaten geändert hat 😉

Zusammen mit den Koordinaten aus #2 ergibt das folgendes Bild:

maptools_screen8

Man sieht schön, wie sich die Reihen lichten und somit immer weniger Möglichkeiten übrig bleiben.

6. Möglichkeiten weiter eingrenzen

Wie können wir nun die Zahl der möglichen Koordinaten weiter dezimieren? Nun, eine gängige Methode ist es, nachzuschauen, wie weit die Koordinaten von den Listing-Koordinaten entfernt sind und all diejenigen rauszuschmeißen, die weiter als 3km entfernt sind. Auch hier kann es wieder zu Toleranzen kommen, in den meisten Fällen ist dies aber ein guter Anhaltspunkt.

Nehmen wir also beispielsweise an, der Cache wäre auf der Haltestation „Voltastraße“ gelistet. Diese befindet sich bei ca. N52° 32.54 E13° 23.572.

Um nun einen Bannkreis um diese Koordinaten zu ziehen, klicken wir auf „Add Markers„, geben dort bei Minimum und Maximum die Listing-Koordinaten ein, wählen für beide Radien einen Wert von 3000 Metern, wählen die Option „Remove outer markers“ und klicken auf „Ok“. Die Schrittweite ist in diesem Fall Egal, da wir nur einen Punkt eintragen.

Bannkreis um die Listing-Koordinaten
Bannkreis um die Listing-Koordinaten

Manch einer mag sich nun fragen, warum der Kreis so eckig aussieht und ob es wirklich ein Kreis ist. Die Antwort lautet: Nein, optisch ist es kein Kreis, sondern ein regelmäßiges Vieleck mit 10 Ecken; ‚unter der Haube‘ ist es aber ein Kreis, da wir mit einem Radius rechnen. ‚Muss das sein?‚ Nö, man könnte auch mehr Ecken nehmen, dann würde es schöner aussehen, allerdings würde das die Seite auch unnötig langsam machen 😉

7. Button #5: „Add Line“

Bevor wir uns dem vierten Button widmen wollen wir uns erst nochmal eine weitere nützliche Spielerei anschauen: Linien 😀

Angenommen wir hätten einen Mysterie mit folgender Aufgabenstellung: „Peile von N52° 28.922 E13° 16.973 in 45° und von N52° 28.405 E13° 33.569 in 315°, dort wo sich die Geraden schneiden ist das Final“.

Wir haben keine Länge für die Peilung gegeben, also nehmen wir vorsichtshalber einen sehr hohen Wert (ca. 30km sollten reichen :D). Dies ergibt die Koordinaten: N52° 40.335 E13° 35.789 und N52° 39.818 E13° 14.757

Diese geben wir nun für Start und Ziel unserer Linien ein und erhalten folgendes Bild:

maptools_screen10

Wir können nun ranzoomen und das Final bestimmen.

8. Button #4: „Add Complex“

Kommen wir zum letzten und längsten Teil der Vorstellung. Der hier besprochen Modus heißt nicht ohne Grund „complex“, ich versuche aber alles so verständlich wie möglich zu erklären 😉

Zur Einstimmung wieder ein kleines Beispiel. Wir nehmen uns wieder unsere Koordinate aus #2, dieses mal sind aber beide Variablen in der Nord-Koordinate, das ganze sieht also folgendermaßen aus: N52° 3a.0b3 E13° 21.283. Man wird schnell feststellen, dass es nicht möglich ist, diese Koordinaten mit dem normalen „Add Markers“ Modus darzustellen, zumindest nicht ohne kräftig selbst Hand anzulegen. Nun wäre es schön, könnte man den Start- und Endwert, sowie die Schrittweite für jede Variable einzeln festlegen. Und wie es der Zufall so will hat das MapTool natürlich auch für diesen Fall eine Lösung parat. 😀

Zuerst müssen wir uns aber einmal den Syntax anschauen, den wir ab sofort verwenden müssen:

Variablen müssen wir in zwei geschweifte Klammern ‚einhüllen‘ : N52° 3{{A}}.0{{B}}3 E13° 21.283

Ich habe hier große Bezeichner für die Variablen gewählt, tatsächlich ist dies aber egal, nur die exakte Schreibweise muss konstant beibehalten werden! Mehrere Zeichen sind auch erlaubt, folgendes würde also auch funktionieren: N52° 3{{VariableA}}.0{{VariableB}}3 E13° 21.283

Nun haben wir die Variablen markiert, Zeit sie mit Werten zu ‚füllen‘. Dies erreichen wir mit folgendem Sytax:

{{VARIABLENNAME:START-ENDE}}

Wollen wir also beispielsweise A die Werte 3 bis 7 zuweisen muss der Befehl lauten: {{A:3-7}}, B wollen wir Werte von 1 bis 5 zuweisen, der Befehl lautet also folgerichtig {{B:1-5}} . Gar nicht so schwer, oder?

Das alles zusammen geben wir unter „Add Complex“ folgendermaßen ein:

Wie sieht es nun aus, wenn wir aber nicht 1er Schritte haben wollen, sondern 2er, 3er… etc. ? Dies ist ganz einfach möglich, wenn wir dem Befehl einen weiteren Parameter mitgeben, das ganze erweitert sich also zu:

{{VARIABLENNAME:START-ENDE;SCHRITTWEITE}}

Angenommen A soll alle geraden Werte zwischen 0 und 9 annehmen, dann lautet der Befehl wie folgt: {{A:0-9;2}} , ich denke das ganze ist klar, deswegen gleich zur nächsten Funktion!

Nun sind wir die ganze Zeit davon ausgegangen, dass unsere Variablen nur Werte zwischen 0 und 9 annehmen, also einstellig sind, was aber wenn beispielsweise eine Variable den gesamten Nachkommateil von Nord annehmen könnte? z.B. N52° 30.{{A}} E13° 21.283 . Freundlich wie der Owner war hat er uns nicht verraten, ob A ein-, zwei-, oder dreistellig ist. Es kommen also grundsätzlich erstmal Zahlen von 0 bis 999 in Frage, doch was würde passieren wenn A z.B. den Wert 3 annimmt? Es würde sich folgendes Bild ergeben: N52° 30.3 E13° 21.283 dies ist aber ein völlig anderer Wert als der von uns erwartete: N52° 30.003 E13° 21.283

Das Zauberwort in diesem Fall heißt Auffüllen (Padding) und damit erweitert sich unser Befehl ein weiteres mal um einen Parameter:

{{VARIABLENNAME:START-ENDE;SCHRITTWEITE;PADDING}}

Beispiel: A soll alle Werte zwischen 0 und 999 annehmen, die durch 11 teilbar sind: {{A:0-999;11;3}}

Übrigens können Variablen an beliebiger Stelle (wieder-)verwendet werden, möchte man also für Nord und Ost jeweils den selben Nachkommateil haben, würde das ganze wie folgt aussehen: N52° 30.{{A}} E13° 21.{{A}}

Doch auch hier ergeben sich bereits die nächsten Probleme. Was wenn eine Variable gar nicht Werte aus einem bestimmten Bereich annehmen soll, sondern komplett beliebige, beispielsweise 13, 42, 66, 123 ?

Auch dafür gibt es eine Lösung, die ihren eigenen Syntax mit sich bringt:

{{VARIABLENNAME:[WERT1,WERT2,WERT3,...];PADDING}}

In unserem Beispiel wäre das folgender Befehl: {{A:[13,42,66,123];3}}

 

Wem das ganze immer noch nicht komplex genug war, der wird nun auf seine Kosten kommen!

Angenommen wir haben Koordinaten der Form N52° 30.(a*b+c-123) E13° 21.283, also mit einem Term. Wäre es nicht schön, würde dieser für uns ausgewertet werden? 😀

Um einen Term automatisch auswerten zu lassen gibt es folgenden einfachen Syntax:

<<TERM;PADDING>>

In unserem Fall würde die Koordinate also folgendermaßen aussehen:

N52° 30.<<{{A}}*{{B}}+{{C}}-123;3>> E13° 21.283

Nun kann es aber durchaus passieren, dass der Term einen Wert annimmt, der für uns uninteressant ist, z.B negative Werte, oder Werte über 1000. Dies können wir mit den zwei zusätzlichen Parametern einstellen:

<<TERM;PADDING;MINIMUM;MAXIMUM>>

Abschließend nochmal ein längeres Beispiel:

A: Soll gerade Werte von 30 bis 36 annehmen. (Hinweis: Schrittweite=2)

B: Soll Werte von 1 bis 27 annehmen. (Hinweis: Schrittweite=1, Padding=2)

C: Soll die Werte 4, 19, 32, 325 und 547 annehmen.

Die Formel lautet: N52° (a).(a*b+c-123) E13° 21.(b)3

Die Eingabe in das Tool lautet also:

Innerhalb der Evaluations-Klammern sind übrigens eine Vielzahl an mathematischer Operationen erlaubt, wer sich dafür interessiert, der kann sich gerne die Dokumentation der zugrunde liegenden Bibliothek anschauen: math.js

 

So, das war sie also die Vorstellung meines ‚kleinen‘ Projekts, ich hoffe ihr hattet und habt Spaß damit! Solltet ihr Verbesserungsvorschläge haben würde ich euch bitten, mir eine Email über die bekannten Kanäle zu schreiben, oder ihr eröffnet am besten gleich ein Ticket im Bugtracker.

 

Bis bald im Wald!

 

No comments have been made. Use this form to start the conversation :)

Leave a Reply

Facebook
Facebook