Erstellen von .poly-Dateien / seltsame Fehlermeldung von getbound.pl

Ich wollte zum Extrahieren und Konvertieren einzelner Relationen ins .poly-Format das hier gefundene Skript getbound.pl nutzen. Leider erhalte ich von diesem nur Fehlermeldungen.

Unter Windows 7 unter Nutzung von Strawberry Perl:

Die genannte Datei enthält Perl-Code und ist 6KB gross.

Unter einem frisch installierten Arch Linux:

Lässt sich zumindest eines der beiden Probleme einfach beheben und wenn ja wie oder gibt es eine andere per Script nutzbare Möglichkeit ohne grösseren Aufwand (=nur ein Konvertiervorgang/kein vorheriges zusätzliches Extrahieren in eine temporäre Datei, unter Windows kein zusätzlicher Scriptinterpreter o.Ä. nötig (ausgenommen Perl), …) eine .poly-Datei aus Multipolygonen einer .osm.pbf-Datei zu erstellen?

Da du mit Josm schaffst: Ich mach das mit josm

  • poly-plugin installieren

  • Relation mit “Datei/Objekt herunterladen” runterladen

  • eventuelle centre_nodes und kleinere inner/outer rausschmeissen, sodaß nur der “große Umriss” übrigbleibt

  • alles auswählen (rot machen)

  • Werkzeuge/Linien verbinden (C)

  • “Datei/Speichern unter” : poly aufwählen und abspeichern

das wars :slight_smile:

geht für einmalige Aktionen sehr flott. Oder wenn man mal ein “frei Schnauze”-Polygon braucht: Linie zeichnen, als lokales Poly abspeichern, fertig.

Gruss
walter

p.s. natürlich nicht auf den Server jagen.

Lies nochmal (zugegeben, es ist etwas versteckt geschrieben):

Wie du es beschrieben hast bin ich an meine vorrübergehenden Bereiche gekommen, zum automatisierten Erstellen eignet sich JOSM leider nicht.

ok, gut versteckt - Pech gehabt.
Dann wirst du richtig Arbeit reinstecken müssen.
Ich mach sowas mit Postgresql und Postgis; allerdings basiert meine DB auf dem Osmosis-Snapshot-Schema und ist nicht mit osm2pgsql kompatibel.

Nur so ein Denkansatz:
Wenn du eine osm2pgsql-DB hättest: da sind u.A. die Grenzpolygone bereits als geschlossene Ways drin (die haben wohl die negative ID der entsprechenden Relation). Die bräuchstes du dann “nur noch” in Polys umwandeln. Und dafür gibt es Tools.

Gruss
walter

Installier doch mal perl-libwww auf deinem Arch Linux.

Sehr gut, Danke. Weitere fehlende Pakete waren dann einfacher zu erkennen, nach Installetion der folgenden Pakete erhalte ich auch hier eine Fehlermeldung ähnlich der unter Windows:

  • perl-libwww,

  • perl-xml-libxml (wäre vermutlich nicht notwendig),

  • perl-xml-simple,

  • perl-list-moreutils,

  • perl-yaml.

Die Fehlermeldung unter Linux:

Die genannte Datei enthält anfangs Perl-Code und nach den Zeilen “1;” und “END” Quellcode einer Manpage, wenn ich das richtig erkenne; Dateigrösse 24868 Byte.

Nachtrag: Nach der Installation von perl-yaml-syck lautet die Meldung:

Die Datei /usr/lib/perl5/vendor_perl/YAML/aliases.yml existiert nicht. So langsam werden die Fehlermeldungen ähnlicher. Wie er sich wohl diesmal zufrieden stellen lässt?

Ich fasse mal meine bisherigen Recherche-Ergebnisse zusammen, vielleicht bringt’s einen von euch auf eine Idee:

Meine fast nicht vorhandenen Perl-Kenntnisse meinen, dass die Datei gar nicht genutzt werden würde (was ich nicht so ganz glaube) und ich mit dem Parameter “-aliases” eine andere Datei auswählen könnte (“” als Dateiname klappt nicht, dass wäre ja auch leer).

Wikipedia verriet mir, dass “YML” “Why a Markup Language” heisst und es dazu noch keinen Artikel gibt. Die einzigen beiden zutreffenden Ergebnisse beim Googeln nach dem Dateinamen sind von bukkit.org (einer Mincraft-Server-Software) und ein Posting aus dem russischen Bereich dieses Forums, wobei mir letzteres mangels Sprachkenntnis nicht viel bringt und die Google-Übersetzung andeutet, dass es unzutreffend sei.

Nun vermute ich, dass in dieser Datei Ersatzbezeichnungen (“Aliase”) für Relationen bestimmt werden können. Ich habe aber weder die korrekte Syntax dafür herausgefunden noch ob man das auch einfach nicht nutzen kann (ich weiss ja die Relationsnummern bzw. finde sie zuvor heraus).

legt nahe, daß Du eher auf der Suche nach YAML als nach YML bist.

Also zu deinem Pearl-Problem kann ich dir nicht wirklich weiterhelfen.
Allerdings evtl. zur “automatischen” Erzeugung von Poly-Files:

Wenn du folgende URL aufrufst:
http://osm102.openstreetmap.fr/~jocelyn/polygons/get_poly.py?id=&params=0
Und durch die gewünschte ID ersetzt bekommst du das Polyfile zurückgeliefert.
In Verbindung mit einen Skript und wget lässt sich das doch schon recht gut “automatisieren”

Hoffe, ich konnte dir weiterhelfen.

MfG
Jan

Ja, das klingt so, wie ich mir das vorstelle. Mir wäre eine Variante, die unabhänig von einem externen Webserver funktioniert lieber, weshalb ich das mit dem Perl-Script noch hinkriegen möchte, aber damit kann ich zumindest schonmal weitermachen, danke!

Gute Idee, werde ich gleich mal ausprobieren. Jedoch war diese Zeile nicht Teil einer Fehlermeldung, sondern nur ein Zusatz, wo ich nach der Datei gesucht hatte (um z.B. inkorrekte Berechtigungen auszuschliessen). Ausserdem heisst es in der Fehlermeldung “Start tag expected, ‘<’ not found”, was ich in den Beispielen bei Wikipedia nicht finde.

Nachtrag: Ich habe es inzwischen mit “—\nLU: 28711” (“\n” == Zeilenumbruch) sowie mit nur letzterer Zeile als Dateiinhalt ausprobiert (mit “28711” und mit “LU” als Relationsbezeichner). Alle vier Versuche gaben folgende Fehlermeldung aus, also den letzten Abschnitt der bisherigen Meldung:

Wie kann ich herausfinden, welches Dokument damit gemeint ist? In der Fehlermeldung wird ja keines erwähnt und im Perlscript sehe ich keinen weiteren Dateizugriff (ausser auf das OSM-File, das auch vorhanden ist). Kann es sein, dass das Script mit den PBF-Dateien nichts anfangen kann?

Das ist ganz offensichtlich der Fall.

getbound.pl ist 2 Jahre alt, das kann bestimt kein .pbf. Probiere mal .osm (also die entpackte XML-Version, kein .osm.bz2 oder sowas).

Sieht man auch hier:

https://github.com/sev-/osm/blob/master/getbound.pl#L69
https://github.com/sev-/osm/blob/master/getbound.pl#L99

Dann werde ich wohl den von jman1983 vorgeschlagenen Webservice nutzen. Trotzdem Danke für eure Bemühungen. als erledigt markier

Warum so schnell aufgeben? Du kannst mir osmconvert/osmfilter die Relation herausfiltern oder direkt die Id der Relation angeben und die online vom Server runterladen:


    print "Usage: getbound.pl [options] <relation_id>\n\n";
    print "Available options:\n";
    print " -o <file> - output filename (default: STDOUT)\n";
    print " -proxy <host> - use proxy\n";
    print " -onering - merge rings\n\n";

Piece of cake… :slight_smile:

Weil Relation herunterladen und dann konevertieren mehr Aufwand ist als Relation.poly herunterladen und das vorherige rausfiltern noch ein Systemaufruf mehr wäre und noch eine weitere Temporäre Datei pro Relation bräuchte (Ja, ich weiss, stdout>stdin). Trotzdem danke für deinen Vorschlag, wenn ich später irgendwann mal Lust habe werde ich das vsl. so umsezten (und sicherstellen, dass es niemals ausser mir jemand nutzen und schon gar nicht verstehen kann teuflisch guck).

Nach BK: Ja, der arme API-Server :wink: (Ja, ich weiss, könnte man theoretisch ändern)

Gerade ausprobiert, funktioniert tadellos trotz “Unable to load aliases from aliases.yml”. Laden vom Server ist natürlich nicht der geeignete Weg, um eine größere Zahl von Polygonen zu erstellen (vgl. Server-Spendenkampagne). Statt die Relation direkt auszufiltern könnte man alternativ auch noch osmconvert OSM-XML in die Standardeingabe von Perl schreiben lassen.

Gib getbound.pl doch einfach als Kommandozeilenoption die Nummer der Relation (vgl. oben zitierte “Usage”-Ausgabe), dann erledigt es den Download selbst und macht ein .poly draus.