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?
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.
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).
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?
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:
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 (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.