Wegpunkte exportieren


Publiziert von Hade, 18. August 2019 um 17:07. Diese Seite wurde 1053 mal angezeigt.

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



Kommentare (11)


Kommentar hinzufügen

carpintero hat gesagt:
Gesendet am 18. August 2019 um 17:37
Vielleicht hilft dir der folgende Eintrag weiter: *Export of waypoint list

Hade hat gesagt: RE:
Gesendet am 18. August 2019 um 18:06
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 hat gesagt: Externes Script
Gesendet am 19. August 2019 um 12:51
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 hat gesagt: RE:Externes Script
Gesendet am 19. August 2019 um 18:01
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 hat gesagt: RE:Externes Script
Gesendet am 19. August 2019 um 22:31
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 hat gesagt: RE:Externes Script
Gesendet am 20. August 2019 um 20:06
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 hat gesagt: RE:Externes Script
Gesendet am 21. August 2019 um 11:29
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 hat gesagt: RE:Externes Script
Gesendet am 21. August 2019 um 16:30
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

carpintero hat gesagt:
Gesendet am 21. August 2019 um 13:38
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 hat gesagt: RE:
Gesendet am 21. August 2019 um 20:34
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 hat gesagt: RE:
Gesendet am 21. August 2019 um 21:20
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


Kommentar hinzufügen»