Fläche einer Relation berechnen

Gibt es irgendwie einen Weg, die Fläche einer Relation zu berechnen?

Es wäre hilfreich, um die Fläche von Orten und Ortsteilen zu bestimmen, oder auch die Fläche z. B. eines Waldes.

Es gibt sicher viele Wege die Größe eine Fläche zu berechnen, auch für OSM-Objekte wie geschlossene Wege oder Multipolygone.

Ein sehr einfacher Weg ist, den Editor JOSM zu benutzen und dort das Measurement-Plugin zu installieren. Dann brauchst du es nur noch abzulesen.
Ach ja, Multipolygone sollten komplett geladen sein.

Edbert (EvanE)

Funkioniert das mit MPs nicht oder mache ich was falsch? Falls letzteres bitte ich um eine idiotensichere Erklärung, falls ersteres um eine Alternative :wink:

Im Eigenschaftenfenster rechte Maustaste auf die MP → Elemente auswählen

Ich erhalte damit nur eine Länge und seltsamerweise einen Winkel. Getestet an einem PLZ-MP und einer Grenzrelation, beide geschlossen und sortiert. Stattdessen die Relation selbst auswählen ergibt für alles 0.

Ja, was anderes macht das Plugin auch nicht, ausser Linienlängen messen. Flächeninhalt wäre mir neu.

Relationen gehen anscheinend nicht, nur einfache closed ways.

Nachdem die Kollegen sich über die Features von Josm gestritten unterhalten haben, erstmal etwas zur Klarstellung:

In welchem Umfeld, mit welcher Art von Anwendung willst du denn die Flächengröße haben?

  • Liste ?
  • einmalig Nachsehen (z.B. in Josm)?
  • als Legende einer Karte?
  • Interaktiv?
  • ???

Und wie sieht dein IT-Umfeld/-Wissen aus? Was hast du? Was kannst du?

Dann könnte man mal überlegen, wie deine Frage zu beantworten ist.

Gruss
walter

Soll das eine Anspielung sein auf “programmiers doch selbst”?

Ich weiß ja gerade noch, wie man mathematisch die Fläche eines Polygons berechnet, nämlich indem man die Fläche in Quadrate und (rechtwinklige) Dreiecke aufteilt. Manuell ist das, je nach Komplexität der Relation, sehr mühsam, und vor allem wenn man Grenzen hat die Küstenlinien oder Flussläufen folgen, hat man irgendwann sehr viele Dreiecke und Quadrate und kommt mit dem Rechnen kaum hinterher.

Mir reicht es ja wenn es ähnlich wie oben erwähntes Measurement-Plugin funktionieren würde, also man wählt eine Relation und erhält die Fläche. Ich wüsste allerdings gerade nicht, wie sich das bewerkstelligen ließe.

Nein, aber wenn jemand fragt “Wie komme ich von Berlin nach München?”, darf man doch mal fragen, womit - oder? (Flugzeug?, Bahn?, Auto?, fährst du selber?, Fahrgemeinschaft?, Moped?, Rad?, Skateboard?, …)

OK, schon wissen wir, was du eigentlich wissen möchtest - und ich hab für diesen Fall leider keine Lösung :frowning:

Problem ist, daß in jedem Editor (du benutzt ja josm) die MP-Relationen nicht als ein geschlosses Objekt (hier Fläche) aufgefasst werden, sondern als eine Zusammenstellung mehrere Objekte, die was “Größeres” darstellen. Das ist ja gerade der Sinn von Relationen. Im Editor arbeitest du mit den Rohdaten.

Erst wenn bestimmte Programme wie u.A. osm2pgsql die Rohdaten weiterverarbeiten, werden aus Multipolygonen flächige Objekte - und die haben natürlich auch eine Fläche in z.B. m².

lt;dr: wenn du nur Rohdaten hast, mußt du selber rechnen - wenn du fertige Software einsetzt, kannst du die Größe der Flächen einfach abrufen.

Gruss
walter

Nahmd,

Es gibt mehrere.

  1. Der orthodoxe Weg besteht darin, dass Du Dir eine Geodateninfrastruktur schaffst: Du beschaffst einen hinreichend leistungsstarken Server, setzt eine Postgres-Datenbank mit PostGIS Erweiterung auf, lädst den aktuellen OSM-Planet (35Gb oder so) herunter und spielst den mit einem dazu geeigneten Tool in die Datenbank ein. Nach wenigen Stunden bis Tagen (in Einzelfällen auch Wochen) steht die Datenbank bereit, und Du kannst per SQL trivial die Fläche beliebiger Objekte abrufen, also nicht nur von Relationen, sondern auch von Ways.

  2. Eine listigere Möglichkeit besteht darin, jemanden zu finden, der Methode 1 bereits erfolgreich angewandt hat, und denjenigen/diejenige/dasjeniges darum zu bitten, Dir einen Zugriff auf die Daten per API bereitzustellen.

  3. Du kannst auch auf die originalen OSM-Daten zurückgreifen. Die vollständigen Geometriedaten zur Relation 3257243 rufst Du unter http://www.openstreetmap.org/api/0.6/relation/3257243/full ab; dabei das “/full” am Ende nicht vergessen. Achtung: bei größererereren Objekten braucht es ein wenig Geduld. Du bekommst vom Server eine Liste der Linien geliefert, aus denen die Relation zusammengesetzt ist, und die Koordinaten der Punkte, aus denen die Linien bestehen. Diese Linien setzt Du nun zu geschlossenen Ringen zusammen. Bleiben Teile übrig, ist die Relation defekt; Da kannst Du überlegen, ob Du versuchst automatisiert zu flicken oder ob Du einen Fehler wirfst. Als nächstes berechnest Du die Fläche jedes Rings, bei Wikipedia findet sich die Formel. So schön die Formel auch ausschaut, die Numerik ist Mist: also Obacht bei der Implementierung. Jetzt noch die Flächen der “outer”-Ringe addieren und die “inner”-Ringe (Löcher, siehe obiges Beispiel) subtrahieren, und dann noch die Flächenkorrektur je nach Lage auf der Erde (1°×1° ist am Äquator flächengrößer als in der Arktis), und: geschafft. Man kann (und bei großen Flächen ist es sinnvoller), auch die Trapezformel von Fläche auf Kugel umstellen.

Keine einfache Entscheidung!

Erzählst Du uns mehr über Dein Projekt?

Gruß Wolf

PS: Bis Du eine dauerhafte Lösung gefunden hast, hilft Dir vielleicht diese Zusammenstellung?

Aber aber, wer wird den gleich mit der Keule schmeißen. Das Ganze geht auch 3 Hausnummern kleiner und läuft zur Not auch in einer Virtuellen Maschine. Den Planeten installiert man - mit allen Konsequenzen - nur wenn man wirklich alles braucht. Ein/e Stadt, Landkreis oder Bundesland geht wesentlich schneller und frisst nicht so viele Ressourcen. Und so nebenbei kann man dann auch ganz andere Sachen machen als “nur” die Flächen zu berechnen.

Aber prinzipiell ist der Weg schon richtig - nur nicht soooo breit und soooo lang.

Der nicht mit dem Wolf tanzt.
Walter

Naja, das kann man mit nem leicht schmutzigen Workaround umgehen, indem man die Linien vorübergehend zusammensetzt → Werte ablesen → rückgängig

Ich möchte wambacher bezüglich JOSM widersprechen. Wie selbstverständlich füllt JOSM auch Multipolygone mit der zu den Taggs passenden Farbe (frühere Versionen konnten das noch nicht). Das geht sogar, wenn nur Bruchstücke des MP vorhanden sind (auch das gab es noch nicht in den 3xxx Versionen).

An der Stelle hat das Measurement Plugin noch ein wenig nachzuholen. Aber immerhin, in früheren Versionen konnte es die Flächen von disjunkten Objekten nicht sauber addieren. Mittlerweile kann das Plugin das, es besteht also noch Hoffnung. Wem es wichtig ist, der kann ja den Autor anschreiben oder ein Ticket bei JOSM erstellen.

Aber nicht vergessen, wenn ein MP nicht vollständig geladen ist, kann das Plugin natürlich keinen richtigen Werte für die Länge und Fläche liefern.

Edbert (EvanE)

Letzteres geht übrigens hier mit OSM-Account.