Navigation mit GPS, Glonass, Galileo und OpenStreetMap
Header

Cacher-Grundausrüstung!

April 18th, 2014 | Posted by Sebastian in Geocaching - (0 Comments)

Man liest es immer wieder in diversen Foren, Blogs und Artikeln. Die Cacher-Grundausrüstung bestehe aus einem Stift und einem Smartphone mit Geocaching-Software. Mitnichten! Sie besteht aus einem Stift und dem ausgedruckten! Listing samt kleiner Übersichtskarte der Final-Location. Gerade bei urbanen Caches reicht dies vollkommen um unauffällig einen Fund zu verbuchen. Man fällt viel weniger auf, als wenn man wie ein ferngesteuerter Roboter über den Platz irrt. Ein riesen Vorteil, nicht zu unterschätzen.

Zu der erweiterten Cacher-Grundausrüstung gehört ein GPS-Gerät. In meinem Fall ist dies ein eTrex 10 und eine ordentliche topografische Karte 1:25.000.

Erweiterte Cacher-Grundausrüstung aus eTrex 10, Google Nexus 7, Topo-Karten und Kugelschreiber

Erweiterte Cacher-Grundausrüstung

Seit geraumer Zeit teste ich das eTrex 10 in Kombination mit einem Nexus 7 Zoll-Tablet und der Software Locus Pro zum Geochachen. Ich muss sagen, ich bin sehr angetan. Mit einem Griff in die Jackentasche ist das Gerät da. Je nach Situation habe ich das Display gesperrt und mit einem Griff ist das Display aktiv. Das große Display bietet zig Vorteile gegenüber all den kleinen Handgeräten mit Touchscreen usw. Sollte es rau werden, kommt das Tablet in den Rucksack und ich verwende das eTrex.

Auf dem eTrex ist ein kleiner Kartenausschnitt der Region installiert, das wird demnächst mal durch selbst erstellte OSM-Karten ersetzt.

Vor nicht allzu langer Zeit bin ich von einem befreundeten Geocacher angefragt worden, wie man denn einen Punkt ermitteln kann, der von drei gebenen Punkten exakt gleich weit weg ist. Geometrisch betrachtet ist dies das Problem des Umkreismittelpunktes.

Geometrische Lösung

In diesem speziellen Fall bedeutet es, dass der Umkreismittelpunkt der Schnittpunkt der Mittelsenkrechten eines Dreiecks aus unseren Drei Punkten ist. Betrachten wir nun das folgende fiktive Beispiel, bei dem wir den Punkt suchen, der von den drei Gipfeln (Munzenberg (A), Hohe Stückbäume (B) und Köpfle (C)) gleich weit weg ist. Bei den drei Gipfeln handelt es sich um zufällig ausgewählte Punkte in der Nähe meines Wohnortes.

Da wir das Problem bequem zu Hause auf der Couch angehen können, wollen wir Flopps Tolle Karte dafür nutzen.

Bild mit den drei Gipfeln

Ausgangslage

Als erstes habe ich die drei Gipfel als Marker eingegeben und der Übersicht halber benannt. Im folgeden werden nur noch die Buchstaben A, B und C benutzt.

Zur Konstruktion der Mittelsenkrechten müssen nun mindestens zwei der drei Verbindungslinien der Punkte A, B und C gezeichnet werden. Das folgende Bild zeigt die Strecken A-B und B-C. Diese entsprechen den Seiten eines Dreiecks, von denen aus jetzt die Mittelsenkrechten gezeichnet werden müssen.

Eingezeichnete Verbindungsstrecken

Drei Gipfel mit den Strecken A-B und B-C

Die Mittelsenkrechten sind besondere Punkte der ebenen Geometrie. Zum Zeitpunkt als dieser Artikel entstand, bot Flopps Tolle Karte noch keine Funktion für die Erstellung der Mittelsenkrechten. Aber, die erzeugten Linien verraten uns ihre Länge und den Azimut. Am Beispiel der Strecke A-B heißt dies konkret: Länge 2844 Meter und Azimut 31,5°. Der Schnittpunkt der Mittelsenkrechten lässt sich somit einfach projizieren (grüne Schaltfläche mit dem Pfeil im Punktemenü, halbe Strecke und gleicher Winkel eingeben).

Fusspunkte der Mittelsenkrechen

Fusspunkte der Mittelsenkrechten

Ausgehend von den Fusspunkten der Mittelsenkrechten D und E, werden jetzt die beiden Mittelsenkrechten projiziert. Zum Azimut der Strecke A-B müssen jetzt 90° addiert werden. Als Streckenlänge habe ich der Übersichtlichkeit wegen, eine Distanz von 4000 Meter gewählt. Die neuen Punkte F und G werden jetzt mit den Fusspunkten verbunden. Wir erhalten die Mittelsenkrechten D-F und E-G.

Umkreismittelpunkt H mit Radius

Umkreismittelpunkt H mit Radius

Den Schnittpunkt kann man nun per Hand absetzten und die Koordinaten ablesen. Als Kontrolle ob man alles richtig gemacht hat, wird nun entweder die dritte Mittelsenkrechte konstruiert, oder der Umkreis um den Punkt H wie im obigen Bild dargestellt gezeichnet.

Das gesamte Beispiel ist hier verfügbar.

Lösung auf dem GPS-Handgerät

Selbstverständlich funktioniert diese Lösung auch auf dem GPS-Handgerät. Die Stichworte sind Wegpunktprojektion und Routen.

Lösung mittels grafischer Software

Auch mit gängigen CAD- und GIS-Programmen kann die Lösung des Umkreismittelpunktes erfolgen. Je nachdem müssen allerdings die Koordinaten in ein anderes Koordinatensystem (bspw. UTM) umgeformt werden, da die Eingabe von Dezimalgrad sonst zu einem falschen Ergebnis führt.

Sonstige Lösungsansätze

Weitere Lösungsansätze dürfen gerne per Kommentarfunktion ergänzt werden.

Koordinaten umrechnen

August 9th, 2013 | Posted by Sebastian in Geocaching - (2 Comments)

Die Webseite des LGL (Landesamt für Geoinformation und Landentwicklung Baden-Württemberg) bietet einen Umrechner für Koordinaten in verschiedenen Formaten. Für Geocacher sicher nicht ganz uninteressant.

So kann man Koordinaten wie folgt umrechnen:

  • Umrechnung von geografischen Koordinaten B,L,h nach geozentrischen Koordinaten X,Y,Z.
  • Umrechnung einer Position von Dezimalschreibweise in Grad, Minuten und Sekunden und wieder zurück.
  • Umrechnung von geozentrischen Koordinaten X,Y,Z nach geografischen Koordinaten B,L,h.

 

Efringen-Kirchen ausbalanciert

Juli 13th, 2013 | Posted by Sebastian in Opencaching - (0 Comments)

Inspiriert von Flopps Beitrag „Am Schwerpunkt von Freiburg“ hab ich mich gestern hingesetzt und den Schwerpunkt von Efringen-Kirchen berechnet. Da ich als Geodät beruflich vorbelastet bin, ging die Sache recht zügig über die Bühne. Doch wozu braucht man den Schwerpunkt von Efringen-Kirchen?

Auf der offenen Geocaching-Plattform Opencaching.de gibt es so genannte Safari-Caches. Bei diesem Cachetyp handelt es sich um einen virtuellen Cache. Kurz gesagt, es befindet sich keine physikalische Box und kein Logbuch vor Ort. Die Aufgabenstellung beinhaltet, zunächst diesen Ort zu finden und dann den Besuch mit einem Foto zu dokumentieren. Auf dem Foto sollen das GPS-Gerät und der besuchte Ort abgebildet sein.

Der Cache „Am Mittelpunkt“ von following ist genau so ein  Safari-Cache. Die Aufgabenstellung beschreibt mehrere Varianten zum Bestimmen des Schwerpunktes. Ich habe mich für die Berechnungsvariante entschieden. Die Daten stammen aus dem OpenStreetMap-Projekt und wurden mit JOSM, GPS-Babel oder GPSies, LibreOffice.org und Tincta bearbeitet.

Bild des Schwerpunktes von Efringen-Kirchen

Schwerpunkt von Efringen-Kirchen

Das Vorgehen ist wie folgt:

  1. Finden der Stadtgrenze von Efringen-Kirchen (Relation: Efringen-Kirchen (1130296))
  2. Laden der Relation mit JOSM und Speichern als GPX-Datei
  3. Konvertieren der GPX-Datei ins ASCII-Format (XML-Datei ginge in Java auch) mit GPSies oder GPSBabel
  4. Extrahieren der Koordinaten und Einfügen der ersten Zeile zusätzlich als letzte Zeile mit LibreOffice.org
  5. Speichern der Datei mit dem Texteditor
  6. Programmieren des Java-Codes mit Eclipse
  7. Cachen vor Ort

Da mir Python noch nicht so zügig von der Hand geht, hier mein Lösungsansatz in Java.

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

/**
 * Das Programm Schwerpunkt berechnet den geometrischen Schwerpunkt eines Polygons
 * aus Koordinaten (x y). Die Punkte müssen der Reihe nach vorliegen und der erste 
 * und der letzte Punkt in der Liste sind identisch.
 * 
 * Siehe auch: <a href="https://de.wikipedia.org/wiki/Geometrischer_Schwerpunkt#Polygon">Wikipedia-Artikel</a>.
 * 
 * @author Sebastian aka Azimut400gon
 */
public class Schwerpunkt {

	/**
	 * Konstruktor ohne Parameter. Steuert den Programmablauf.
	 */
	public Schwerpunkt() {

		String dateiName = "Efringen-Kirchen.txt";

		/* Dateiaufbau
		 * ===========
		 * 
		 * 47.64511840	7.594074100 // Erster Punkt
		 * 47.64459570	7.593142100
		 * 47.64312320	7.594131000
		 * ...
		 * 47.64511840	7.594074100 // Erster Punkt wiederholt
		 */

		ArrayList<String> geleseneZeilen = datenLesen(dateiName); 

		double[] schwerPunkt = schwerpunktBerechnen(geleseneZeilen);

		System.out.println("Der berechnete Schwerpunkt hat die Koordinaten: \n");
		System.out.println(schwerPunkt[0] + " " + schwerPunkt[1]);

	}

	/**
	 * Liest die Koordinaten aus der Textdatei zeilenweise ein und gibt sie als 
	 * <code>ArrayList<String></code>-Objekt zurück.
	 * @return ArrayList<String> mit den gelesenen Zeilen als String
	 */
	private ArrayList<String> datenLesen(String dateiName) {

		String zeile = null;
		ArrayList<String> zeilen = new ArrayList<String>();

		try {
			FileInputStream fis = new FileInputStream(dateiName);
			BufferedReader leser = new BufferedReader(new InputStreamReader(fis));

			try {
				while ((zeile = leser.readLine()) != null) {
					zeilen.add(zeile);
				}
			} catch (Exception e) {
				System.err.println("Datei konnten nicht geschlossen werden.");
			} finally {
				fis.close();
			}

		} catch (Exception e) {
			System.err.println("Fehler beim Lesen der Datei: "+ dateiName);
		}

		return zeilen;

	}

	/**
	 * Berechnet den geometrischen Schwerpunkt der eingelesenen Datei und gibt 
	 * diesen als double-Feld zurück.
	 * @return Berechneter Schwerpunkt als double [x, y]
	 */
	private double[] schwerpunktBerechnen(ArrayList<String> zeilen) {

		double[][] pkt = new double[zeilen.size()][2];

		StringTokenizer st = null;

		for (int i = 0; i < zeilen.size(); i++) {

			st = new StringTokenizer(zeilen.get(i));

			if (st.countTokens() == 2) {
				pkt[i][0] = Double.parseDouble(st.nextToken());
				pkt[i][1] = Double.parseDouble(st.nextToken());
			} else {
				System.err.println("Falsches Format in der Eingabedatei.");
			}

		}

		// Flächenberechung  mit Gauß'scher Trapezformel
		// https://de.wikipedia.org/wiki/Gaußsche_Trapezformel
		double a = 0d;

		for (int i = 0; i < pkt.length-1; i++) {
			a += (pkt[i][0] * pkt[i+1][1]) - (pkt[i+1][0] * pkt[i][1]);
		}

		a += (pkt[pkt.length-1][0] * pkt[0][1]) - (pkt[0][0] * pkt[pkt.length-1][1]);

		a /= 2.0;

		// Berechnung des Schwerpunktes
		// https://de.wikipedia.org/wiki/Geometrischer_Schwerpunkt#Polygon
		double x_S = 0d, y_S = 0d, hilf = 0d;

		for (int i = 0; i < pkt.length-1; i++) {
			hilf = (pkt[i][0] * pkt[i+1][1] - pkt[i+1][0] * pkt[i][1]);
			x_S += (pkt[i][0] + pkt[i+1][0]) * hilf;
			y_S += (pkt[i][1] + pkt[i+1][1]) * hilf;
		}

		hilf = (pkt[pkt.length-1][0] * pkt[0][1] - pkt[0][0] * pkt[pkt.length-1][1]);
		x_S += (pkt[pkt.length-1][0] + pkt[0][0]) * hilf;
		y_S += (pkt[pkt.length-1][1] + pkt[0][1]) * hilf;

		x_S /= 6d * a;
		y_S /= 6d * a;

		double[] schwerpunkt = {x_S, y_S};

		return schwerpunkt;

	}

	/**
	 * main()-Methode - Einstiegspunkt des Programms.
	 */
	public static void main(String[] args) {

		//Schedule a job for the event-dispatching thread:
		//creating and showing this application's GUI.
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Schwerpunkt();
			}
		});
	}

}

Statistiken – Project Geocaching!

Februar 24th, 2013 | Posted by Sebastian in Geocaching - (0 Comments)
Bildschirmaufnahme

Es gibt neben dem Schachspiel wohl kaum ein Hobby (Fitnessfanatiker mit ihren Endomondo-Apps ausgenommen), bei dem die Statistik so wichtig ist wie beim Geocachen. Umfangreiche Statistiken rund um das Thema Geocaching können mit Hilfe der Webseite https://project-gc.com zu verschiedenen Themen erzeugt werden.

Der unten stehende Screenshot zeigt die Entwicklung der Geocacher in Deutschland. Sehr interessant wie sich die Zahl der Jahre 2012 und 2013 entwickelt.

Bildschirmaufnahme

 

Natürlich kann man sich auch seine eigenen Statistiken erzeugen, hierzu wird das eigene Geocaching-Profil mit Hilfe der LiveAPI verknüpft. Die eigene Statistik kann dann via HTML ins Profil eingebunden werden…