Navigation mit GPS, Glonass, Galileo und OpenStreetMap
Header

Irgendwo in den Weiten des Mapping-Universums bin ich zu dieser Aktion inspiriert worden. Die Erde hat momentan 193 anerkannte Staaten und 13 Länder, deren Status im Unbekannten liegt.

Ich mappe jetzt den 81. Tag. Ich habe mein Ziel dank eines Endspurtes mit reduzierter Größe der Änderungssätze erreicht. Zum einen bin ich an Grenzen gestoßen, mir fehlte schlichtweg die Zeit und es gibt Länder der Erde, da ist die Datendichte so extrem gut, dass sich aus Luftbildern kaum etwas kappen lasst.

Ein Fazit folgt hier in den nächsten Tagen.

Es macht immer noch Spass, man lernt eine Menge über die Welt von oben und über Mapping-Gewohnheiten in anderen Ländern. Die Änderungssätze haben so zwischen 100 und 1000 Änderungen. Stand heute (24. April 2014) umfasst die Liste der Wikipedia die folgenden Staaten:

Bei mir dümpelt noch eine alte Installation von QLandkarte GT auf dem Mac rum und ich dachte mir, es ist mal wieder an der Zeit diese zu aktualisieren. Gesagt getan. Die Mac OS X Helpers and Libraries-Files für Mac waren noch aktuell. Die Installation auf Version 1.7.5 verlief reibungslos.

Der TMS-Service OpenStreetMap der mit QLandkarte GT mitgeliefert wird (oder noch eine Altlast aus dem Altsystem ist?) verweigert allerdings hartnäckig seinen Dienst. Wie ich mittlerweile herausgefunden habe, gibt es hierfür gute Gründe. Der Entwickler von QLandkarte GT  will nicht, dass sich QLandkarte GT am OpenStreetMap-Server eindeutig identifiziert. Das OpenStreetMap-Server-Team findet es nicht fair, wenn QLandkarte GT sich als Mozilla Fake Agent ausgibt und verweigert somit den Zugang. Siehe hierzu die Diskussion.

Für den Nutzer wäre es sicher hilfreich, wenn der Zugang zum OSM-Server möglich wäre. Ich kann doch selbst entscheiden, ob ich mich anmelden möchte. Diese Funktion zu implementieren, kann doch nicht der große Aufwand sein?! Natürlich kann ich als Nutzer auf andere Dienste ausweichen.

In den Archiven von Ubuntu findet sich der folgende TMS-Service.

<TMS>
    <Title>Openstreetbrowser</Title>
    <MinZoomLevel>1</MinZoomLevel>
    <MaxZoomLevel>1024</MaxZoomLevel>
    <Layer idx="0">
        <ServerUrl>http://tiles-base.openstreetbrowser.org/tiles/basemap_base/%1/%2/%3.png</ServerUrl>
    </Layer>
    <Copyright>OSM</Copyright>
</TMS>

Dieser Code funktioniert (stand heute) einwandfrei und zeigt die OpenStreetMap-Karte in QLandkarte GT an.

Alternativ kann man natürlich über das Datei-Menü weitere Onlinekarten hinzufügen. Sehr ansprechend sieht der folgende Service aus.

OSM GIScience Heidelberg incl hillshade and elevations

Dargestellt hier die Gegend um Efringen-Kirchen.

Bildschirmaufnahme von QLandkarte GT mit OSM-Karte

Bildschirmaufnahme von QLandkarte GT mit OSM-Karte

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.

Im Laufe der Jahrhunderte hat sich die Erkenntnis durchgesetzt, dass die Erde keine Scheibe ist. Spätestens seit Einführung Google Earth kann jeder das am heimischen Rechner in kurzer Zeit nachvollziehen. Man kann dank dieser Technologie in kurzer Zeit fremde Orte besuchen, sich einen Überblick verschaffen, Reisen planen,  und noch vieles mehr tun.

Dank den Bemühungen der Geheimdienste der Verfügbarkeit von preiswerten GNSS-Geräten (Smartphones, GPS-Handempfänger, Daten-Logger) kann man seine Position auf der Erde in kurzer Zeit bestimmen und die zurückgelegte Strecke als Track aufzeichnen. Zusätzlich gibt es das schier unendliche Angebot an aufgezeichneten oder generierten Strecken. Mit Hilfe dieser Tracks oder Routen, die man sich auf den Handempfänger herunterladen hat, läuft man den Weg nach, oder fährt die Strecke mit dem Rad, Auto, Boot, etc. ab.

Mit Einführung des Social-Networks möchte man diese Daten vielleicht auch mit seinen Freunden teilen. Dazu sollten sie entsprechend visualisiert werden. Mit Hilfe von Konvertern (GPSBabel, …) können die Daten dann im KML-Format für Google Earth aufbereitet werden. Doch oftmals stellt sich die Frage, wie bekomme ich die Fläche einer gelaufenen Runde, oder eines Gebietes in Google Earth dargestellt.

Nun, zunächst müssen die Punkte so exportiert und gespeichert werden, dass man diese in Google Earth darstellen kann. Hierzu bieten sich verschiedene Formate an. Das auf den Handempfängern weit verbreitete GPX-Format, oder eine einfache Textdatei oder Tabelle.

Mit Hilfe der Online-Konverter von Mapsdata oder earthpoint können diese Aufgaben und noch vieles mehr erledigt werden.

 

GNSS-Satelliten-Verfügbarkeit

September 30th, 2013 | Posted by Sebastian in Allgemein - (0 Comments)

Die Verfügbarkeit der aktuellen GNSS-Satelliten kann auf der Webseite von Trimble angezeigt werden. Der interessierte Nutzer kann je nach Standort die Verfügbarkeit der Satelliten, die Bedingungen der Ionosphäre, usw. anschauen und GNSS-Kampagnen planen.

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.

 

GNSS-Messgeräte, Navigationsgeräte und Handempfänger sind mittlerweile stark verbreitet. Viele Anwender haben den Nutzen erkannt und können ihre Dienstleistungen ohne GNSS heute nicht mehr anbieten. Dem professionellen Anwender stehen systembedingt vielfältige Kontrollmöglichkeiten offen, die dem Hobby- oder Gelegenheitsnutzer bisher verschlossen waren.

Doch seit geraumer Zeit wird hier Abhilfe geschaffen. Dazu werden Geodätische Referenzpunkte geschaffen, die öffentlich zugänglich gemacht werden. Die notwendigen Informationen zu den Koordinaten des Punktes werden direkt vor Ort dauerhaft vermarkt und können im Internet über entsprechende Webseiten abgerufen werden.

Die zuständigen Vermessungsämter und Landesbehörden stellen hierzu in den Landkreisen die Punkte her und die Informationen zur Verfügung. Jetzt machen auch Brandenburg, Bremen, Hessen und Sachsen mit.

Baden-Württemberg

Bayern

Berlin

Brandenburg

Bremen

Hessen

Sachsen

Thüringen

Wer einen solchen Referenzpunkt kennt, hinterlässt bitte einen Kommentar, dann kann ich die Liste entsprechend ergänzen.

Edit: Diese Liste ist in der OSM-Wochennotiz 159 verlinkt. Dankeschön.

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();
			}
		});
	}

}

In diesem Artikel habe ich bereits beschrieben, wie man den USB-Datenlogger Holux M-241 per USB an den Mac anschließt und Daten auslesen kann. In diesem Artikel wird beschrieben, wie die Verbindung mit Bluetooth funktioniert.

Koppeln via Bluetooth

Damit die Koppelung des Macs und des Holux M-241 möglich ist, muss zunächst Bluetooth am Logger aktiviert werden (Einstellungen -> Bluetooth -> EIN). Im Anschluss daran wird Bluetooth am Mac eingeschaltet (via Menüleiste) und die Option “Bluetooth Gerät konfigurieren…” gewählt.

Bildschirmfoto Holux M-241 gefunden

Bildschirmfoto Holux M-241 gefunden

Nachdem der Logger gefunden wurde, muss er verbunden werden.

Bildschirmfoto automatisches Kennwort

Bildschirmfoto automatisches Kennwort

Das hierzu notwendige Kennwort wird automatisch gesetzt.

Bildschirmfoto der erfolgreichen Verbindung

Bildschirmfoto der erfolgreichen Verbindung

Auslesen mittels HoudahGPS

Die aufgezeichneten Daten werden mit dem Programm HoudahGPS ausgelesen.

Bildschirmfoto HoudahGPS

Bildschirmfoto HoudahGPS

Damit dies funktioniert, werden die in der obigen Bildschirmaufnahme gezeigten Einstellungen (Port: Serial / Bluetooth und Name: HOLUX_M-241-SPPSlave) gewählt.