Wegpunkte exportieren


Published by Hade, 18 August 2019, 17h07. This page has been displayed 624 times.

Hallo liebe Hikr,

aus diversen Gründen habe ich schon länger keine Berichte mehr geschrieben. Ich möchte meine Aktivitäten zwar wieder fortführen, aber - wie es Gegenstand einer aktuellen Diskussion hier im Forum ist - möchte auch ich bestimmte Touren nicht online stellen.
Ich möchte also parallel zu meinem Profil hier eine offlline Datenbank mit den Wegpunkten erstellen, damit ich sie auf einer Karte darstellen kann. Ich suche also jetzt nach einer Möglichkeit, die Wegpunkte von meinem Profil zu exportieren (als Shapefile z.B) um sie in QGIS laden zu können (oder auch Google Earth, etc.). Immerhin sind es knapp 700 Wegpunkte und alle manuell zu erfassen, würde ewig dauern.

Hat schon ein Hikr eine Lösung dafür gefunden, wie dies funktionieren könnte? Ich bin leider bisher nicht fündig geworden.

Viele Grüße
Hade



Comments (11)


Post a comment

Sent 18 August 2019, 17h37
Vielleicht hilft dir der folgende Eintrag weiter: *Export of waypoint list

Hade says: RE:
Sent 18 August 2019, 18h06
Eine Liste lässt sich so erstellen, aber leider sind dann keine Koordinaten dabei. Mein Ziel ist es ja, die Punkte alle auf einer Karte anzuzeigen, in einem GIS.

Auf der Startseite z.B läss sich ja eine kml-Datei erstellen, die mit Goolge Earth geöffnet werden kann (das blaue Symbol rechts oben). Diese Datei beinhaltet aber alle Wegpunkte auf hikr, nicht nur die bei denen ich war. So etwas suche ich für die Wegpunkte von meinem Profil.

Ekkehard says: Externes Script
Sent 19 August 2019, 12h51
Hallo,
ich denke ohne eine Hilfe des Betreibers, wird es nur mit einem externen Script gehen.
Dieses müsste Deine Seite(n) mit den Wegpunkten laden und die Links zu den Touren finden. Diese dann laden und die Wegpunkte der Touren lokalisieren und dann die jeweilige Seite der Wegpunkte öffnen. Dort sind die Koordinaten im Text zu finden.
Für 700 Punkte lohnt sich das Schreiben eines solchen Scriptes (Perl oder PHP) schon. An einem regnerischen Sonntag(-nachmittag) könnte das Problem gelöst sein.
Auf der Betreiberseite ginge das natürlich wesentlich eleganter, sie müssten nur eine Spalte mit den Koordinaten beifügen.
Gruß Ekkehard

Hade says: RE:Externes Script
Sent 19 August 2019, 18h01
Ich dachte, dass es vllt. eine Lösung mit einen crawler oder ähnlichem gibt. Aber bisher hat das bei mir noch nicht geklappt. Um ein solches Skript zu schreiben, reichen meine Fähigkeiten leider noch nicht. Ich bin auf bestehende software angewiesen. Für die Betreiber wäre es natürlich sehr einfach, so eine Funktion zu implemetieren. Entweder über eine Spalte mit Koordinaten, oder einfach mit der Möglichkeit, ein fertiges kml-file herunterladen zu können. Für die Gesamtheit aller Wegpunkte ist das ja bereits möglich. Aber ich denke kaum, dass hier jemand von den Betreibern mitliest, geschweige denn eine Änderung an der website vornimmt, weil ein einzelner user eine Funktion vermisst.
Auf jeden Fall danke für deine Antwort! auch wenn ich das leider nicht umsetzen kann..
Viele Grüße
Hade

Ekkehard says: RE:Externes Script
Sent 19 August 2019, 22h31
Ich muss mal sehen ob ich Zeit dazu finde, ist ja nicht soviel Aufwand. Aber derzeit liegt doch viel anderes Zeug auf dem Schreibtisch.
Gruß Ekkehard

Hade says: RE:Externes Script
Sent 20 August 2019, 20h06
Das wäre eine super Sache! Gib mir auf jeden Fall Bescheid, wenn du was hast. Aber mach dir keinen Stress deswegen.
Viele Grüße
Daniel

Ekkehard says: RE:Externes Script
Sent 21 August 2019, 11h29
Hier ist das Script. Anleitung im Text.
Das Script lädt die Seite(n) mit den Benutzerwegepunkten, anschließend die verknüpften Touren, und die mit den Touren verklinkten Wegpunkt-Seiten. Aus diesen Seiten werden die Koordinaten und der Name des Wegpunktes geholt. Das Ergebnis wird als Liste ausgegeben und zusätzlich als gpx-Datei gespeichert.

Viel Spaß.
P.S.:War kein Sonntagnachmittag, sondern ein Mittwochvormittag :-)

Alles Nachfolgende markieren, in die Zwischenablage kopieren und dann in einen Editor einfügen.
In der ersten Zeile muss der Text "Größer Als- Zeichen" (inkl der '"' durch ein "<" ersetzt werden!!
Dann die Datei unter "waypoints.php"speichern.


"Größer Als-Zeichen"?php
//-------------------------------------------------
// PHP Script zum Extrahieren von Benutzerwegepunkten aus Hikr.org
// (c) Ekkehard Domning, 2019
// Anmerkungen, Bugs etc an edo@domis.de senden.
// Frei zur Benutzung für jeden Zweck, ausgenommen militärische oder Anwendungen
// die anderen Mitgeschöpfen Leid zufügen!!
//-------------------------------------------------
// PHP Script to extract the waypoints from the user listing in Hikr.org
// Please report bugs etc to edo@domis.de
// Free to use for all purposes, except military or any other harmful applications
//-------------------------------------------------

//-------------------------------------------------
// Version, Wann, Wer Was
// 0.2 2019-08-21 EDo Ersterstellung
//-------------------------------------------------
$verinfo = 'Benutzerwegepunkte von Hikr.org holen, Version 0.2, 2019-08-21';

//-------------------------------------------------
// Benutzereinstellungen
// Hier muss der Benutzername aus dem HTTP Pfad rein kopiert werden
// http://www.hikr.org/user/Ekkehard/piz/
// ^------^
// Bei mir ist das "Ekkehard"
// Weiterhin kann der Ausgabename und Pfad angepasst werden
//-------------------------------------------------
// User settings
// You must change the variable Username according to the HTTP path of your User page
// You may change the name and path of the output file
//-------------------------------------------------
$username = 'Ekkehard';
$gpxfilename = 'waypoints.gpx';

//-------------------------------------------------
// Benutzung
// 1.) Benutzernamen und ggf Namen der Zieldatei anpassen
// 2.) Diese Datei speichern, zb unter c:\hikrorgtools\waypoints.php
// 3.) Das Script benötigt den PHP Interpreter, dieser kann hier kostenfrei geladen werden
// https://www.php.net/downloads.php
//
// 4.) Nach der Installation muss eine Konsole geöffnet werden
// Bei Windows auf "Start" klicken, dann "cmd" eingeben und die Konsole auswählen und ausführen
// 5.) Anschließend muss in das Verzeichnis gewechselt werden, in dem diese Datei gespeichert wurde
// dies geht mit dem Befehl "cd", zb
// cd \hikrorgtools
// 6.) PHP ausführen und den Dateinamen dieser Datei angeben. Normalerweise ist PHP im Suchpfad
// Falls PHP nicht gefunden wird muss das Ausführbare Programm gesucht und mit dem vollen Pfad
// angegeben werden.
// Es sollte aber wie folgt funktionieren
// php waypoints.php
//-------------------------------------------------
// Usage
// 1.) Change username and if wanted target filename
// 2.) Save this file to the hdd, e.g. c:\hikrorgtools\waypoints.php
// 3.) The script needs an PHP interpreter installed on the system. PHP could be downloaded free here
// https://www.php.net/downloads.php
//
// 4.) After the PHP beiing installed open a console
// On windows click to "Start" end enter "cmd" with keyboard, select console from the list
// 5.) In the console switch to the correct folder where this file has been saved
// The "cd" command does the job, e.g.
// cd \hikrorgtools
// 6.) Execute PHP while passing the name of this file as a parameter. Generally PHP is included in the search path.
// If PHP is not found, you have to locate the executable and use the full path instead
// Usually it work like this
// php waypoints.php

//-------------------------------------------------
// Globale Variablen
//-------------------------------------------------
$tourlist = array();
$waypointlist = array();
$waypointinfo = array();

//-------------------------------------------------
// ProcessMainTableRow
// Bearbeitet eine Zeile in der Haupttabelle
// Extrahiert einen Link auf eine Tourenseite
// Trägt den Link in das globale Array ein und gibt 1 bei Erfolg zurück
// sonst 0
//-------------------------------------------------
function ProcessMainTableRow($ARow) {
global $tourlist;

$cnt = 0;
// echo $ARow;
$startdata = 0;
do {
$startdata = strpos($ARow,'/ Anzahl der Spalten zu klein
// Link für Tour finden
$startdata = strpos($ARow,'/echo "Data: ".$data."\r\n\r\n";
// Link extrahieren
$starta = strpos($data,'/ echo $a."\r\n\r\n";
$marker = 'href="';
$startlink = strpos($a,$marker);
if ($startlink === false) {
return 0;
}
$startlink = $startlink+strlen($marker);
$endlink = strpos($a,'"',$startlink);
if ($endlink === false) {
return 0;
}
$link = substr($a,$startlink,$endlink-$startlink);
//echo $link."\r\n";
// Link an die globale Tourenliste anhängen
//array_push($tourlist,$link);
$tourlist[] = $link;

return 1;
}

//-------------------------------------------------
// ProcessMainTable
// Bearbeitet die Haupttabelle
// Lokalalisiert einzelne Zeilen und gibt diese zur Bearbeitung weiter
// Gibt die Anzahl der gefundenen Zeilen zurück
// Weniger als 51 Zeilen bedeutet, dass es keine weiteren Seiten mit Waypoints gib
//-------------------------------------------------
function ProcessMainTable($AMainTable) {
$cnt = 0;
// echo $AMainTable;
$startrow = 0;
do {
$startrow = strpos($AMainTable,'/echo "Zeile: $cnt ".$row."\r\n\r\n";
if ($cnt > 0) { // Die Header Zeile überspringen
ProcessMainTableRow($row);
}
$cnt++;
$startrow = $endrow;
} while(1);
return $cnt;
}

//--------------------------------------------------------
// ProcessMainFile
// bearbeitet eine Hauptseite, extrahiert die Tabelle und gibt sie zur bearbeitung
// Die Rückgabe ist 1 wenn es (vermutlich) eine weitere Seite mit Waypoints gibt
// 0 wenn es keine weiteren gibt
//--------------------------------------------------------
function ProcessMainFile($AMainFile) {
// echo $AMainFile;
// den Marker für den Anfang der Tabelle suchen
$marker = '';
// Suchen ob vorhanden
$starttablendx = strpos($AMainFile,$marker);
if ($starttablendx === false) { // Prüfen ob gefunden
return 0; //Nein, dann fertig
}
// echo 'Waypoint table at: '.$starttablendx."\r\n";
$marker = '
';
// Suchen ob vorhanden
$endtablendx = strpos($AMainFile,$marker,$starttablendx);
if ($endtablendx === false) { // Prüfen ob gefunden
return 0; //Nein, dann fertig
}
$endtablendx = $endtablendx+strlen($marker);
// echo 'Waypoint table end at: '.$endtablendx."\r\n";
$table = substr($AMainFile,$starttablendx,$endtablendx-$starttablendx);
$cnt = ProcessMainTable($table);
// echo $cnt;
if ($cnt <= 2) return 0; //Keine Inhalte in der Tabelle, fertig
return 1; // War was drin
}

//--------------------------------------------------------
// ProcessWayPointList
// Bearbeitet eine Wegpunkteliste, wie sie sich in der Turenseite befindet
//--------------------------------------------------------
function ProcessWayPointList($AWayPointList) {
global $waypointlist;
//echo $AWayPointList;
$marker = 'href=\'';
$startlink = 0;
while(1) {
$startlink = strpos($AWayPointList,$marker, $startlink);
if ($startlink === false) {
return 0;
}
$startlink = $startlink+strlen($marker);
$endlink = strpos($AWayPointList,'\'',$startlink);
if ($endlink === false) {
return 0;
}
$link = substr($AWayPointList,$startlink,$endlink-$startlink);
//echo $link."\r\n";
// Link an die globale WayPoint anhängen
$waypointlist[] = $link;
// Index weiter rücken
$startlink = $endlink;
};
return 0;
}

//--------------------------------------------------------
// ProcessTour
// Bearbeitet eine einzelne Tour, lädt die Seite und zieht den Block mit den Wegepunkiten raus
//--------------------------------------------------------
function ProcessTour($ATourLink) {
// echo $ATourLink."\r\n";

echo 'Lade Tourenseite: '.$ATourLink."\r\n";
$tourpage = file_get_contents($ATourLink);
//echo $tourpage;
// Den Anfang der Liste funden
$marker = 'Wegpunkte:';
$startndx = strpos($tourpage,$marker);
if ($startndx === false) {
return 0;
}
$startndx = $startndx+strlen($marker);
// Das Ende der Liste finden
$marker = '';
$endndx = strpos($tourpage,$marker,$startndx);
if ($endndx === false) {
return 0;
}
// Den Anfang der Liste korrigieren auf

    $marker = '/ Sicherstellen das kein Blödsinn passiert
    if ($startndx > $endndx) {
    return 0;
    }
    // Block rausziehen
    $waypointblock = substr($tourpage,$startndx,$endndx-$startndx);
    //echo $waypointblock;
    ProcessWayPointList($waypointblock);
    return 1;
    }


    //--------------------------------------------------------
    // ProcessTour
    // Bearbeitet einen einzelnen Wegpunkt, lädt die Seite und zieht die Informationen raus
    // Praktischerweise stehen die ganz oben in einem META Tag, man muss also nicht ganz tief suchen
    // Der gefundene Punkt wird in die globale Liste der Punkte eingetragen
    //--------------------------------------------------------
    function ProcessWayPoint($AWayPointLink) {
    global $waypointinfo;
    // echo $AWayPointLink."\r\n";
    echo 'Lade Wegepunktseite: '.$AWayPointLink."\r\n";
    $wppage = file_get_contents($AWayPointLink);
    //echo $wppage;
    /*




    */
    $marker = '/ echo $name.': '.$coords."\r\n";
    $waypointinfo[$name] = $coords;
    }

    //--------------------------------------------------------
    // SaveWaypointsInGPXFile
    // Wegepunkte in Datei sichern
    // Der Dateiname wird ganz oben definiert
    //--------------------------------------------------------
    function SaveWaypointsInGPXFile($AWayPointArray, $AGPXFileName) {
    global $username;
    $fc = ''."\r\n";
    $fc .= ''."\r\n";


    foreach ($AWayPointArray as $wpname => $wpcoord) {
    $latlon = explode(",", $wpcoord);
    if (count($latlon) == 2) {
    $fc .= ''."\r\n";
    $fc .= ''.$wpname.''."\r\n";
    $fc .= '
    '."\r\n";
    }
    }
    $fc .= '
    '."\r\n";
    file_put_contents($AGPXFileName, $fc);
    }

    //--------------------------------------------------------
    // Hauptprogramm
    // Öffnet die Hauptseite und iteriert durch alle weiteren Seiten
    // Gibt den geladenen Seiten Text in die Bearbeitungsfunktion
    // Am Ende dieses Prozesses befinden sich alle gefundenen Tourenlinks in der globalen Liste
    //--------------------------------------------------------

    echo $verinfo."\r\n";
    $pagendx = 0;
    while(1) {
    // Namen der Übersichtsseite zusammenbasteln
    $pagename = 'http://www.hikr.org/user/'.$username.'/piz/?skip='.$pagendx;
    echo 'Lade übersichtsseite: '.$pagename."\r\n";
    // Inhalt der Übersichtsseite holen
    $listpage = file_get_contents($pagename);
    if (ProcessMainFile($listpage) == 0) break;
    $pagendx += 50; //Zähler für folgende Seiten hochzählen
    }
    // Doppelte Einträge aus der Touren Liste enfernen.
    $tourlist = array_unique($tourlist);
    //var_dump($tourlist);
    echo 'Anzahl der gefundenen Touren: '.count($tourlist)."\r\n";
    foreach ($tourlist as $tour) {
    ProcessTour($tour);
    }
    // Doppelte Eionträge aus der Wegepunklteliste entfernen
    $waypointlist = array_unique($waypointlist);
    //var_dump($tourlist);
    echo 'Anzahl der gefundenen Wegepunkte: '.count($waypointlist)."\r\n";
    foreach ($waypointlist as $waypoint) {
    ProcessWayPoint($waypoint);
    }
    echo 'Anzahl der gefundenen Wegpunkte: '.count($waypointinfo)."\r\n";
    echo 'Name, Lat, Lon'."\r\n";
    echo '-------------------------------------------'."\r\n";
    foreach ($waypointinfo as $wpname => $wpcoord) {
    echo '"'.$wpname.'",'.$wpcoord."\r\n";
    }
    echo '-------------------------------------------'."\r\n";
    SaveWaypointsInGPXFile($waypointinfo,$gpxfilename);
    echo 'Fertig! Daten in Datei '.$gpxfilename.' geschrieben'."\r\n";
    ?>

Ekkehard says: RE:Externes Script
Sent 21 August 2019, 16h30
Sorry, aber die Formatierung hier zerpflückt das Script so, dass es leider nicht mehr läuft.
Bitte hier laden und dann ohne .txt speichern.

Gruß Ekkehard

Sent 21 August 2019, 13h38
Ich habe mein Skript erweitert, welches damals im Post *hikr.org-backup - Sicherungswerkzeug / Backup Tool vorgestellt und diskutiert wurde. Nebst dem Journal, Berichten und der Galerie können neu auch Wegpunkte gesichert werden. Das Skript samt Installationsanleitung ist unter https://github.com/simongysi/hikr-ruby zu finden (neuster Release von hier beziehen).

Nach der Installation können die Wegpunkte aller Berichte des angegebenen Benutzers mit folgendem Aufruf in der Kommandozeile gesichert werden: hikr-backup -u carpintero -b waypoints -n -1

Die Wegpunkte werden in verschiedenen Dateiformaten abgespeichert:
- TXT-Datei für Menschen
- CSV-Datei für Excel, etc.
- GPX-Datei für BaseCamp, etc.

Die GPX-Datei enthält jeden Wegpunkt genau einmal. In den anderen beiden Dateien kommen Wegpunkte möglicherweise mehrfach vor, verweisen jedoch auf unterschiedliche Berichte. Nach dem Import der CSV-Datei in Excel (Encoding auf UTF-8 stellen), können die Wegpunkte weiter verarbeitet werden (z. B. Duplikate entfernen).

dominik says: RE:
Sent 21 August 2019, 20h34
Top Sache und danke für's Teilen mit der Community! Hinweis: Ohne das Paket 'ruby-dev' ist's nichts mit der Installation unter Linux. Ist im README nicht erwähnt und führt zu lustigen Fehlermeldungen :-)

Hade says: RE:
Sent 21 August 2019, 21h20
Auch dir vielen Dank! Ich bin echt positiv überrascht, dass sich gleich jemand daran gesetzt hat, ein Skript zu schreiben, bzw. zu erweitern. Ihr habt damit sicher nicht nur mir jede Menge Arbeit erspart. Es ist fast etwas schade, wenn die Arbeit nicht mehr gesehen wird, sobald dieser Post älter ist. Wäre cool, wenn es das Skript irgendwie in die FAQ's schaffen würde, wenn es schon nicht in die Seite implementiert wird.

Viele Grüße
Hade


Post a comment»