Camélas - Castelnou - Thuir

Diese Runde führt uns in die Aspres, auf Nebenstraßen über Politg hinauf nach Camélas und weiter auf gut ausgebauten Feldwegen zum Col de la Roque (450m), dem höchsten Punkt der Strecke. Die ganz Sportlichen können von hier hoch zur Kapelle von Saint-Martin-de-la-Roque auf 518m Höhe fahren. Danach ght es hinunter zur D48, auf der es dann über Castelnou nach Thuir geht. Von Thuir geht es zunächst auf der D18 in Richtung St.-Feliu-d'Avall. Wo der Canal de Perpignan kreuzt, geht es links auf einem Fußpfad auf der rechten Seite des Kanals weiter. Der Pfad ist schmal und etwas holprig aber mit einem Trekkingrad gut befahrbar. Nach einem Km geht es rechts am Castelnou-Bach entlang, dann durch eine Furt und auf der Strasse nach St.-Feliu-d'Avall. Die Fahrt kann je nach Startort variiert werden, z.B. indem man direkt von St.-Feliu-d'Avall nach St.-Feliu-d'Amont fährt. Eine Abkürzung bietet sich am Ortsausgang von Castelnou an. Man nimmt die Straße, die links zum Parkplatz führt und folgt dieser bis ins Tal und fährt dann am Castelnou-Bach entlang zur ursprünglichen Strecke. Einkehrmöglickeiten, auch Restaurants, in Thuir (Boulevard Grégory) und Millas GPX-Track: CamelasThuir.gpx

11. März 2014

Höhenprofil eines GPX-Tracks als Diagramm in OpenOffice

Mit den meisten Werkzeugen zum Erstellen und Auswerten von GPX-Tracks stößt man bei der grafischen Gestaltung des Höhenprofils rasch an Grenzen. Eine Darstellung als Diagramm in einem Tabellenkalkulationsprogramm ist weitaus flexibler. Hier wird beschrieben, wie man die Daten eines GPX-Tracks nach OpenOffice/LibreOffice importieren und als Diagramm darstellen kann. Erstellen einer CSV-Datei aus dem GPX-Track Hierzu wird das Tool gpsbabel verwendet: gpsbabel -t -i gpx -f track.gpx -o unicsv -F track.csv Die so erzeugte Datei wird mit OpenOffice geöffnet. Numerische Werte sind mit Dezimalpunkt dargestellt, der beim Import in ein Dezimalkomma umgewandelt werden muss. Dazu stellt man im Import-Dialog die Sprache des zu importierenden Dokuments auf "Englisch (USA)". Die Tabelle sollte dann so aussehen: No Latitude Longitude Altitude Time 1 42,833965 2,493213 368 01:03:19 2 42,834217 2,492342 361 01:03:20 3 42,834717 2,491981 365 01:03:21 4 42,835281 2,491983 365 01:03:22 5 42,835815 2,492474 378 01:03:23 6 42,836174 2,491815 373 01:03:24 7 42,83577 2,490686 379 01:03:25 Distanz berechnen Für die x-Achse des Diagramms wird die Entfernung des Datenpunkts vom Startpunkt benötigt. Hierzu wird vor der Spalte D Altitude eine neue Spalte Distance eingefügt. Für unsere Zwecke ist es ausreichend, die Luftlinienentfernung zwischen zwei Trackpunkten zu berechnen, die Erdkrümmung kann vernachlässigt werden. Die Entfernung in km zwischen Punkten mit den Koordinaten (lat1, lon1) und (lat2,lon2) in Dezimalgrad kann mit dieser Formel berechnet werden: ARCCOS(SIN(RAD(lat1))*SIN(RAD(lat2))+COS(RAD(lat1))*COS(RAD(lat2))*COS(RAD(lon2-lon1)))*6378,137 Man trägt also in die Zelle D2 "0" und in D3 diese Formel ein: =ARCCOS(SIN(RAD(B2))*SIN(RAD(B3))+COS(RAD(B2))*COS(RAD(B3))*COS(RAD(C3-C2)))*6378,137+D2 und füllt von D3 bis Ende der Spalte D auf. Das Ergebnis ist die Distanz vom Startpunkt in Spalte D: No Latitude Longitude Distance Altitude 199 42,833965 2,493213 0 368 200 42,834217 2,492342 0,0764365323 361 201 42,834717 2,491981 0,0629798481 365 202 42,835281 2,491983 0,0627843426 365 203 42,835815 2,492474 0,0716949237 378 204 42,836174 2,491815 0,0670146738 373 205 42,83577 2,490686 0,1025490128 379 Erstellen des Diagramms Hierzu markiert man die Spalten Distance und Altitude und klickt auf das Symbol "Diagramm" in der Standard-Symbolleiste. Es öffnet sich der Diagramm-Assistent. Dort werden abweichend von den Vorgaben folgende Einstellungen vorgenommen: Fenster Diagrammtyp: XY (Streudiagramm) "Nur Linien" Fenster Datenbereich: Erste Spalte als Beschriftung Voilà!

6. November 2013

OSM: Zugriff auf die Attribute des Admin_Centre beim Rendern von Verwaltungsgrenzen

In der OpenStreetMap-Datenbank sind die Informationen über Verwaltungseinheiten (Gemeinden, Kreise, Länder) meist auf die Grenzrelation und den Knoten mit der Rolle admin_centre verteilt. Will man zum Rendern der Grenze oder Fläche einer Verwaltungseinheit auf Informationen zurückgreifen, die beim Knoten gespeichert sind, z.B. das Attribut population oder name:xx, dann stellt man fest, dass üblichen Werkzeuge diese Informationen nicht bereit stellen. Nachfolgend werden Methoden beschrieben, wie man dieses Problem bei mit osm2pgsql erstellten Datenbanken und bei aus OSM erzeugten Shape-Dateien lösen kann. PostGis / osm2pgsql osm2pgsql überträgt zwar Attribute der äußeren Wege, also der Wege mit Rolle outer, auf das für die Relation erzeugte Polygon, für den Knoten mit der Rolle admin_centre wird nichts vergleichbares gemacht. Es wird auch kein Link vom Polygon zum Knoten erzeugt. Die im Slim-Modus von osm2pgsql erzeugte Tabelle <prefix>_rels enthält zwar in der Spalte members sämtliche Mitglieder der Relation und deren OSM-ID, aber leider in einer nicht direkt und effizient mit SQL auswertbaren Form. Beispiel: psql -d osm -c "select members from planet_osm_rels\ where hstore(tags)->'name'='Corneilla-la-Rivière';" members ---------------------------------------------------------------------------- {w121772197,outer,w100006391,outer,w121772204,outer,n287557758,admin_centre} Die Member der Relation werden also in einem Array abgelegt, zwei aufeinander folgende Array-Elemente pro Member. Mit einer kleinen Funktion kann man die Node-Id des Admin_Centre extrahieren: CREATE OR REPLACE FUNCTION admin_centre(anyarray) RETURNS bigint LANGUAGE sql AS $function$ SELECT cast(substring($1[i] from 2) as bigint) FROM generate_series(array_lower($1,1),array_upper($1,1),2) i WHERE $1[i+1]='admin_centre';$function$ Damit kann man nun die Polygone der Verwaltungsgrenzen zusammen mit den Attributen des Admin_Centre abfragen: select poly.name, point.name, point."name:ca", point.population from planet_osm_rels r, planet_osm_polygon poly, planet_osm_point point where poly.admin_level='8' and admin_centre(r.members) = point.osm_id and r.id = -poly.osm_id ; Je nach Anwendungsfall und Performanceanforderung kann man damit auch die benötigten Attribute in die jeweils andere Tabelle übertragen oder eine Tabelle mit der Zuordnung von Knoten zu Relationen erstellen: create table admin_rel as select -id as rel_id, admin_centre(members) as admin_centre from planet_osm_rels where hstore(tags)->'boundary'='administrative' and hstore(tags)->'admin_level' in ('8','6','4'); Shape-Dateien Hierfür wird die Osmium-Bibliothek, das darauf basierende Javascript-Tool osmjs und QGis benutzt. Mit osmjs können auf einfache Weise Shape-Dateien aus den Objekten einer OSM-Datei zu erzeugt werden. Wie bei osm2pgsql werden dabei zwar Polygone aus Grenzrelationen erstellt, aber ohne Bezug zum admin_centre. Es ist jedoch möglich, eine CSV-Datei zu erstellen, welche diesen Bezug enthält: /* Osmium Javascript Example: shape_export.js run with: osmjs -2 -m -l sparsetable -j shape_export.js OSMFILE */ var shp_places = Osmium.Output.Shapefile.open('./places', 'point'); shp_places.add_field('id', 'string', 12); shp_places.add_field('type', 'string', 32); shp_places.add_field('name', 'string', 32); var shp_boundaries = Osmium.Output.Shapefile.open('./boundaries', 'polygon'); shp_boundaries.add_field('id', 'integer', 10); shp_boundaries.add_field('type', 'string', 32); shp_boundaries.add_field('boundary', 'string', 255); shp_boundaries.add_field('admin_level', 'string', 255); var csv_file = Osmium.Output.CSV.open("./rels.csv"); var node_tags = { place: { village: 'villaget', city: 'city', town: 'town'} //, //shop: { supermarket: 'supermarket' } } Osmium.Callbacks.init = function() { print("Init"); } Osmium.Callbacks.node = function() { for (var key in this.tags) { if (node_tags[key]) { var type = node_tags[key][this.tags[key]]; if (type) { shp_places.add(this.geom, { id: this.id, type: type, name: this.tags.name }); } } } } Osmium.Callbacks.area = function() { if (this.tags.boundary) { shp_boundaries.add(this.geom, { id: this.id, type: this.tags.boundary, admin_level: this.tags.admin_level}); } } Osmium.Callbacks.relation = function() { for (var key in this.members) { for (var key2 in this.members[key]) { if (key2=='role' && this.members[key].role=='admin_centre'){ csv_file.print(this.id*2+1, this.members[key].ref, this.members[key].role, this.members[key].type); } } } } Osmium.Callbacks.end = function() { shp_places.close(); shp_boundaries.close(); csv_file.close(); print("Done"); } Das Skript erstellt eine Shape-Datei mit den Grenzpolygonen, eine Shape-Datei mit den Place-Knoten und eine CSV-Datei, welche die Ids der Grenzpolygone und der zugehörigen Place-Knoten enthält. Dabei wird berücksichtigt, dass osmjs den Polygonen eine Pseudo-ID mit dem Wert [2 * OSM-ID der Relation + 1 zuweist. Diese drei Dateien lädt man als Layer in QGis. Dann verknüpft man den CSV-Daten-Layer über die Knoten-ID mit dem Knoten-Layer und anschliessend den Polygon-Layer über die Pseudo-ID mit dem Knoten-Layer. Will man die Daten mit Tilemill / Mapnik verenden, kann man die Polygon-Layer als Shape-Datei speichern.

4. Oktober 2013

Version V027 des Skripts rel2gpx.pl

In diese Version sind zwei Patches von Andreas Tille eingearbeitet. Zur Download-Seite

30. September 2013

Radtour 2013 - Vom Mittelmeer zum Atlantik

Länge: 566 km Höhenmeter: 5.900 m Etappen: 11 GPX-Track: GPX-Track Radreise Piémont Pyrénéen 2013 Motivation Es war nach langen Jahren wieder mal Zeit für eine Reise mit dem Fahrrad. Den letzten Anstoß gab die Randonnée Vélo Sud 2013 deren Teilnehmer ich im Juli an den letzten beiden Tagen von Galamus bis ans Mittelmeer begleitet habe. Die Idee war, die selbe oder eine ähnliche Strecke in umgekehrter Richtung zu fahren. Ähnliche Touren hatten wir schon in der Vergangenheit gemacht, neu war das Ziel, auf feste Unterkünfte möglichst zu verzichten und zum ersten mal ein Zelt mit zu nehmen. Räder Die Räder waren vorhanden, ein Trekkingrad und ein mit Gepäckträger und Schutzblechen aufgerüstetes ATB/MTB. Fotos im Bericht über die Rückreise. Campingausrüstung Da wir uns nicht sicher waren, ob uns das Zelten wirklich zusagen würde, wir aber andererseits keinerlei Ausrüstung hatten, haben wir einen Kompromiss zwischen Kosten und Qualität / Gewicht gesucht. Statt dem ursprünglich vorgesehenen 2-Personen-Zelt haben wir uns recht schnell für ein 3P-Zelt entschieden. In unserer Preis und Gewichtsklasse, unter 200€ und um die 3 kg, war die Auswahl nicht groß und wir haben uns für das Salewa Denali 3 entschieden. Dazu Luftmatratzen Therm-A-Rest Trail Lite, ein vorhandener Schlafsack Decathlon Quechua S10 Ultralight und ein neu angeschaffter Millet Baikal 750. Da wir mit zwei Packtaschen auskommen wollten, haben wir auf Kochausrüstung verzichtet, aber Teller, Becher (Decathlon) und je einen Primus Titan-Gabel-Löffel «Folding Spork» für's tägliche Frühstücksmüsli mitgenommen. Zwei uralte Packtaschen von Karrimor wurden durch ein paar neue Ortlieb Back-Roller Classic und zwei Packsäcke 35l ergänzt. Für die Navigation war ein Garmin Etrex Vista HcX mit 4 Sätzen Akkus vorhanden. Zum Laden der Akkus wurde ein Technoline BC700 angeschafft. Kurz vor Beginn der Reise löste sich noch die Gummierung vom Etrex. Anhand dieser Anleitung habe ich das mit Doppelklebenand zufriedenstellend gelöst. Kleidung 2 x Radlerkleidung + 1 x Zivilkleidung, weitestgehend in Microfaser, eine Windjacke für Radeln und Weggehen, eine leichte Regenjacke (K-Way), ein Paar Radschuhe mit abmontierter Klickhalterung, Badeschlappen. Streckenplanung Die Randonnée Vélo Sud (RVS2013) war eine "militante" Tour, mit dem Ziel, den Ausbau der Voie Verte du Piémont Pyrénéen voranzutreiben. Sie führte daher sowohl über bereits ausgebaute Teilstrecken als auch über Abschnitte, wo heute noch keine radfahrgeeignete Trasse existiert. Da es sich bei diesen Abschnitten entweder um stark befahrenen Straßen handelte, für die ein paralleler Radweg gefordert wird, oder um Feldwege in extrem schlechtem Zustand, wäre es im Nachhinein gesehen sinnvoll gewesen, solche Strecken zu umfahren, notfalls weiträumig. Unser Ziel war eine zwar sportliche Tour, jedoch ohne Höchstleistungen, und ohne besonderes Besichtigunsgprogramm. Die geplanten Etappen waren daher je nach Höhenprofil zwischen 40 und 70 km lang. An zwei Stellen wich unsere Planung von der Randonnée Vélo Sud ab. Auf der zweiten und dritten Etappe sind wir nicht über Mirepoix und Pamiers nach Foix gefahren sondern über Puivert. Und statt von Roquefort/Garonne über Saint-Gaudens nach Lannemezan zu fahren, haben wir die Strecke über Cassagnabère-Tournas gewählt. Insgesamt ergabe sich so 11 Etappen. Als Unterkunft habe ich ausschließlich Campingplätze eingeplant. Grundlage war die Liste von ArchiesCampings, ergänzt durch Informationen der regionalen Tourismusbüros. Neben den von der RVS2013 angefahrenen Plätzen habe ich mir an den Etappenorten und entlang der Strecke weitere besonders geeignete Plätze ausgesucht und als spezielle POIs gespeichert. Zur Sicherheit habe ich auch noch alle anderen Plätze als POIs gespeichert. Die Strecke der RVS2013 lag in Form von GPX-Tracks vor, die ich mehr oder weniger unverändert übernommen und durch die abweichenden Streckenteile ergänzt habe. Als Tool verwende ich QLandkarteGT, die Höhenmeter habe ich sicherheitshalber auf gpsies.com quergecheckt. Sonstiges Ich habe mir im Vorfeld den Kopf über Lademöglichkeiten für die Akkus des Etrex und das Smartphone zerbrochen. Im Nachhinein hat sich das als unbegründet herausgestellt. Zum einen habe ich das Smartphone wenig genutzt und die 4 Akkusätze des Etrex haben jeweils ein bis zwei Tage gereicht. Zum anderen war es auf den kleinen Campingplätzen kein Problem das Smartphon und das Ladegerät für ein paar Stunden an eine Steckdose im Sanitärraum zu hängen. Oder ein Wohnmobilnachbar bietet seine Steckdose an. Und manchmal gab es auch Stromanschlüsse mit Standard-Dosen, die beschaltet waren. GPX-Track: PP2013_tout_0.gpx

26. September 2013

QGIS mit Python-Unterstützung unter Debian Jessie

Derzeit funktioniert die Python-Einbindung von QGis in Debian Jessie/Testing nicht. Das liegt daran, dass QGIS 1.7 die Version 8.1 des SIP-Interfaces unterstützt, in Jessie aber bereits auf SIP Version 10 umgestellt wurde. Versuche mit den Debian-Paketen für QGIS 1.8 von https://qgis.org/debian/ haben das Problem nicht behoben. Letztendlich habe ich QGIS 2.0 aus den Quellen erzeugt. Quellen von qgis.org herunterladen. Quellarchiv in ein Verzeichnis entpacken Compilieren entsprechend der Anleitung in der Datei INSTALL. Bei mir waren nur die Schritte aus Abschnitt 3.3. und 3.7. notwendig. Beim Konfigurieren mit ccmake wird der Pfad PYTHON_LIBRARY nicht automatisch gesetzt und muss daher von Hand eingetragen werden (in ccmake), z.B. /usr/lib/x86_64-linux-gnu/libpython2.7.so ldconfig ausführen. (Stand: 14.09.2013)

9. Juli 2013

GPX-Track auf OpenStreetMap-Karte anzeigen und ausdrucken

Es gibt eine Reihe von Tools und Online-Diensten, mit denen man GPX-Tracks auf einer OpenStreetMap-Karte anzeigen kann: QLandkarteGT, GpsPrune, gpsies.com,... Beim Ausdrucken bzw. Erzeugen einer Vektorgrafik stößt man allerdings schnell an Grenzen. Die Darstellung der Tracks (Farbe, Breite, Transparenz) ist nicht konfigurierbar und der Zoomlevel wird anhand des Kartenausschnitts gewählt, usw. Dieses Video hat mir einen Weg zur Lösung aufgezeigt: Quantum GIS (QGIS) mit OpenLayers-Plugin. OpenLayers-Plugin Installation Das OpenLayers-Plugin ermöglicht es, OSM-Kacheln und Kacheln aus anderen mit OpenLayers darstellbaren Quellen (Google, Bing) in einem QGIS-Layer anzuzeigen. Dazu muss zunächst das Plugin installiert werden. Bis QGIS 1.8 funktioniert das problemlos mit mit dem Plugin Installer. Zunächst muss im Menü "Erweiterungen" der Plugin Installer installiert werden, dann kann mit diesem das OpenLayers-Plugin installiert werden. QGIS 1.9/2.0 ist mit dem Plugin nicht kompatibel. Es existiert aber ein Workaround, der hier beschrieben ist: [node:254]. Layer hinzufügen Danach erscheint im Menü "Erweiterungen" ein Untermenu "Openlayers Plugin", über das eine Kachelquelle ausgewählt und mit einem Layer verknüpft werden kann. Die Kacheln werden entsprechend dem Zoomlevel geschrumpft bzw, gedehnt, was zu einer unscharfen Darstellung führt. Ein Workaround besteht darin, den Maßstab explizit so einzustellen, dass die Kacheln in Original-Auflösung angezeigt werden. Stellt man den Maßstab 1:2257 ein, erhält man die Kacheln des Zoomlevels 18. Durch Zoomen mit der Maus bekommt man dann die Kacheln in den OSM-Zoomleveln angezeigt. Weitere Kachelquelle hinzufügen Eine zusätzliche Kachequelle kann auf einfache Weise Hinzugefügt werden. Im Verzeichnis ~/.qgis2/python/plugins/openlayers_plugin/html existiert für jede Kachelquelle eine HTML-Datei, die den Javascript-Code enthält, mit dem der entsprechende OpenLayers-Layer erzeugt wird. Man erstellt nun eine Kopie einer dieser Dateien und passt den Code entsprechend an. Für OSM-kompatible Kachelquellen genügt es in der Regel, die Datei osm.html zu kopieren und den URL anzupassen. Anschließend muss noch in ~/.qgis2/python/plugins/openlayers_plugin/openlayers_plugin.py, etwa bei Zeile 120, ein Eintrag für die neue Kachelquelle nach diesem Muster eingefügt werden: self.olLayerTypeRegistry.add( OlLayerType(self, 'OpenStreetMap', 'osm_icon.png', 'osm.html', True) ) nach einem Neustart von QGIS ist die neue Kachelquelle verfügbar. Alternative Methode Ein anderer Weg zur Anzeige der OSM-Kacheln in QGIS ist hier beschrieben. GPX-Track Ein GPX-Track kann als Vektor-Layer angezeigt werden: Menüpunkt Vektorlayer hinzufügen anwählen im Dialog die GPX-Datei auswählen und öffen im anschliessenden Auswahlfenster den Layer tracks und ggf. weitere Layer auswählen und mit OK bestätigen im Layer-Fenster die Eigenschaften der Track-Linie festlegen: Farbe, Breite,... Karte drucken / Grafik erzeugen Hierzu wird der Dialog Neue Druckzusammenstellung geöffnet und mit neue Karte hinzufügen ein Kartenauschnit in das Druckblatt eingefügt. Dabei wird der Kartenausschnitt aus dem Hauptfenster übernommen. Dieser kann im Modus Inhalt verschieben nach Belieben gezoomt und verschoben werden Die so erzeugten Ausdrucke haben eine miserable Qualität. Der Zoomlevel der Kacheln wird entsprechend Auflösung des Ausdrucks und der Größe des Kartenauschnitts automatisch gewählt. Dann werden die Kacheln skaliert um den gewählten Kartenausschnitt zu erhalten. Das Ergebnis ist in den meisten Fällen ziemlich unscharf und für den Druck in der Regel nicht verwendbar. Durch geeignete Wahl der Druckgröße und des Maßstabs des Kartenausschnitts kann man trotzdem eine akzeptable Bildqualität erreichen. Beispiele: Format Auflösung (dpi) Maßstab Zoomlevel A43005725015 A41505725014 A4725725013 A17257.25013 A172144.44812 A1300144.44814 A13002.311.16810 A172577.79210 Das beste Ergebnis erziele ich allerdings mit einer Bildschirmkopie, da die Kacheln auf dem Bildschirm unskaliert dargestellt werden.

9. Juli 2013

Mapping Party in Collioure

Am 1. Juni 2013 organisieren Annexe21, Perpinux und die OpenStreetMap-Mapper des Departements Pyrénées-Orientales eine Mapping Party in à Collioure. Alles weitere auf https://annexe21.net/cartopartie2013

28. Mai 2013

Echoes of Robert Johnson, Prades 02/03/2013

4. März 2013

Big Daddy Wilson au Mediator de Perpignan (17/02/2013)

18. Februar 2013