phyghtmap - NASA SRTM -> OSM xml translator

Zur Info: Das Programm “phyghtmap” zur Erstellung von Höhenlinien ist in der Version 1.30 erschienen.

Link: http://katze.tfiu.de/projects/phyghtmap/index.html

Ich möchte mich an dieser Stelle ausdrücklich beim Programmautor für die vielen Erweiterungen bedanken.

Gruß Klaus

Und bei Meister Ku(c)ku(c)k erst :wink:

EDIT:
Ah, die “single file” Option gibt’s jetzt auch via “–max-nodes-per-tile=0”. Cool!

Ich bin baff, das sieht ja so aus als wenn ich alle meine Patches jetzt droppen kann :smiley:

Ich werde mir es morgen mal näher ansehen.

Thorsten

Funtioniert “–max-nodes-per-tile=0” als wirkliches Einzelfile - oder als ein Tile per SRTM/Viewfinders Tile?

Wenn ja, dann wäre jetzt nur noch cool, wenn man direkt boundary tiles anstelle Koordinaten, und pbf anstelle einfachem osm output wählen könnte…
vor allem da osmconvert nur mit sehr gering detaillierten boundary files klarkommt. Hat evtl jemand ein boundary file welches osmconvert für Norwegen oder Schweden akzeptiert???

Soweit ich das sehen konnte, ja, nur ein einziges file.
Wichtig ist, das jetzt alle files richtig sortiert vorliegen und das, glaube ich, war auch ein showstopper fuer
osmconvert fürs Polygonausschneiden. Dessen Grenze fuer polys liegt bei 40000 (?) nodes, dies sollte selbst fuer skandinavien machbar sein :wink:

Ja, aber wo gibt es Polys unter 4000 Nodes? Die welche geofabrik verwendet haben deutlich mehr (400KB)…
Und über Europa reden wir da noch gar nicht…

nee, osmconvert schneidet auch unsortierte daten.

Ich schneide (für mich :slight_smile: ) aus mittelfranken.osm.pbf die Städte aus, Nürnberg als größte mit Stadtgrenze admin_level=6 hat ca. 5000 Punkte und
die Grenze von osmconvert liegt ja bei 40 000, geht also noch.

http://downloads.cloudmade.com/europe/northern_europe/norway/norway.poly
$ wc -l norway.poly
74862 norway.poly

Ok, hier bin ich bei Dir, aber

http://download.geofabrik.de/clipbounds/clipbounds.tgz :
europe.poly 21 points
europe/norway.poly ca. 130 points
europe/sweden.poly ca. 150 points

http://downloads.cloudmade.com/europe/europe.poly ca. 75 points
http://downloads.cloudmade.com/europe/western_europe/switzerland/switzerland.poly ca. 1520 points

Ergänzung:

Das hört sich auch ganz interessant an:
https://oegeo.wordpress.com/2011/11/05/tutorial-poly/
so dass
* komplexes Admin_level-Polygon aus planet/europe
* anschließend Vereinfachung per qgis+plugin
* benutzen fürs auschneiden mit osmconvert
gangbar ist (?)

Die dort erwähnten world_borders sollten sich per
$ python ogr2poly.py TM_WORLD_BORDERS-0.3.shp
direkt verwenden lassen bis auf
56525 TM_WORLD_BORDERS-0.3_023.poly

Die aus den shapes genierten Polys von
http://www.gadm.org
müssten wohl auch vereinfacht werden:
231004 NOR_adm0_0.poly

okay, da scheinen meine alten Polys von Geofabrik veraltet. Da waren Schweden wie Norwegen, oder auch Europa deutlich über 50.000 Punkte…

Edit: hat sich erledigt. Beim kopieren des phyghtmap Ordners war eine Datei kaputtgegangen, dann zig Fehlermeldungen. Bin derzeit in China und Internet kommt einem hier noch vor wie in der Steinzeit. Pings über 500ms nach Europa/USA wenn alles gut geht…

Da muss man nicht in China sein, das geht auch in good ol’ germany:
$ host www.viewfinderpanoramas.org
www.viewfinderpanoramas.org has address 178.239.164.129
;; connection timed out; no servers could be reached
$

Deine - jetzt gelöschte - Fehlermeldung via getaddrinfo ist das gleiche,
evtl. in /etc/hosts reinschreiben aut simile.

Naja, der Compile Server steht in der Schweiz, sind auch alle Daten runtergeladen. Europa mit jobs=4 kompilieren Crasht jedoch konsistent. Lasse es gerade mal mit jobs=1 durchlaufen - so kann ich zumindest evtl sehen an welcher .hgt Datei der Crash liegt.

Der Crash war auf jeden Fall nach neuem phyghtmap Download vom Server direkt dann gegessen. Bzw so sicher bin ich nicht, da ich die Indexdateien dann halt lokal am Laptop berechnet hab, und dann auf den server zum berechnen kopiert habe (und überprüft - weil ich hier krassen packet loss hab).

jobs=>1 sollte man derzeit wohl noch als Experimentiell ansehen — zumindest weil man keine vernünftigen Crashlogs bekommt.

Habe festgestellt, dass meine (aelteren) Index-Dateien teilweise defekt sind.
Derzeit habe ich (fuer Europa):
hgtIndex_3.txt md5sum: 988be9eeb1475841bacfa13b6e6ec8c2 ; 224745 Byte
viewfinderHgtIndex_1.txt md5sum: 0d919f3d161c885fa8d663b61b28b638 ; 2584 Byte
viewfinderHgtIndex_3.txt md5sum: 71360f280735c047f51e16fd91876b4d ; 55331 Byte

Jobs>1 dauert derzeit sogar länger als jobs=1. Macht auch irgendwie keinen Sinn, weil erst die aktuelle .hgt fertig verarbeitet werden muss bevor das Programm weiß, mit welcher ID es dann weitermachen kann.

Grüße
Mario

So so.


$ time phyghtmap --area=16:45.7:18.9:48 --jobs=2 --line-cat=500,100 --osm-version=0.6 --start-node-id=300000000 --step=20 --viewfinder-mask=3
<snip>
real    2m17.245s
user    3m58.267s
sys     0m4.964s

$ time phyghtmap --area=16:45.7:18.9:48 --jobs=1 --line-cat=500,100 --osm-version=0.6 --start-node-id=300000000 --step=20 --viewfinder-mask=3
<snap>
real    2m35.576s
user    2m30.325s
sys     0m3.408s

Ich wußte, dass ich etwas verkehrt mache :wink:

Mein Intel Atom N450 hat zwar 64 Bit und wird unter Linux mit 2 CPUs angezeigt, ist aber nur HyperThreading
und kein DualCore.

Daher verwundert es nicht, dass er mit jobs=2 zwar schneller (2:15 min zu 2:30 min) als jobs=1 ist, aber dafür auch beide “CPUs” fast je 2 min 100% Last hatten (= knapp 4 min CPU-Zeit).

Interessant. Vieleicht findet sich ja jemand, der die Tests mit richtigen Kernen nachstellt. Bei meinem Versuch mit etwas kleinerem Bereich war das Verhältnis 30:38 sec. bei 1:2 Kernen, also zugunsten der Verwendung von einem Kern, mehrfach getestet.

Phyghtmap wartet, bis eine .hgt fertig ist, bevor ein weiterer Kern die Arbeit fortsetzt. Wie sonst kann es sein, dass die IDs lückenlos (ohne den Bedarf vorher zu berechnen oder eine Sicherheitslücke zu lassen) fortgeschrieben werden? Hyperthreading dagegen arbeitet eher wie ein einzelner Kern, macht diesen jedoch durch Auslagerung von “Rechen”-Aufgaben, soweit dies möglich ist, etwas effektiver. So kommt die Umkehrung zwischen beiden verschiedenen Systemen zustande.

Vielleicht wird ja der Bedarf während der Erstellung auf einem Kern parallel auf dem zweiten Kern vorausberechnet, dann liefe die Erzeugung aber genauso schnell wie wenn man nur einen Kern verwendet und diese Vorausberechnung nicht nötig ist. Effektiv wird das dann erst ab 3 Kernen.

Grüße
Mario

Mmmh,

Wenn Du genau hinschaust, gibt es einen Unterschied in der Ausgabe bei “jobs=1” und “jobs=2/3…” nämlich

Computing hgt/SRTM3/N47E018.hgt

Computing hgt/SRTM3/N47E017.hgt
etc.

Das schaut mir schon so aus, als würde hier Node/Ways vorrausberechnet.
Jenes kostet etwas Zeit und vermutlich ist deshalb bei Dir dieser “Overhead” größer als der anschließende
“gain” durch die Doppel-CPU.

Vielleicht solltest Du mal einen größeren Ausschnitt nehmen, an dem Deine Kiste mehrere Minuten zu knappern
hat. Vielleicht kehrt sich dann die Sache um :wink:

Aha, ich hab’s. Schön auf beide Kerne gleichzeitig verteilen tut er nur, wenn man die 1°-Kacheln als Ergebnis will. Bei --max-nodes-per-tile=0 (alles in eine Datei) wechseln sich die Kerne mehr oder weniger ab.

Hatte jetzt 22 sec. gegenüber den oben erwähnten 38. :slight_smile: Aber die Geschwindigkeit ist ja bei der Einmalerstellung nicht so wichtig.

Grüße
Mario

Ja, das klingt plausibel. Und wenn man sich die CPU-Zeiten (jetzt für eine einzige Ausgabedatei) anschaut, dürfte das stimmen:


$ time phyghtmap --area=16:45.7:18.9:48 --jobs=2 --line-cat=500,100 --osm-version=0.6 --start-node-id=300000000 --step=20 --viewfinder-mask=3 --max-nodes-per-tile=0
real    2m56.006s
user    2m54.927s
sys     0m4.888s

$ time phyghtmap --area=16:45.7:18.9:48 --jobs=1 --line-cat=500,100 --osm-version=0.6 --start-node-id=300000000 --step=20 --viewfinder-mask=3 --max-nodes-per-tile=0
real    2m26.956s
user    2m23.909s
sys     0m2.740s

=> SingleFile SingleCore, MultipleFile MultipleCore :wink:

Sowohl bei der “Multi-Ausgabe” als auch “Singe-Datei” sind die Dateien zwar jeweils gleich groß bei jobs=1 und jobs>1,
aber die nodes selbst sind anders sortiert.