Dann besser auf Deutsch?
Ja, das war erstmal nur das Konzept. Bleiben wir mal beim einfachen Fall, alle roof:edge=yes enden am building=yes.
Der Grundgedanke ist: Folge solange den Kanten, bis du von einem roten Punkt zu einem anderen gekommen bist.
Der Algorithmus wäre dann:
Finde alle roof:ridge=yes und roof:edge=yes innerhalb des Gebäudes. Ermittle alle Nodes, die Teil von mehreren Ways sind Nummern (1..11), im folgende Stützpunkte genannt. Teile das Gebäude in die Segmente A..H anhand der Stützpunkte, die Teil vom Gebäude sind (1..8). Gleiches Prinzip für die roof:ridge=yes und roof:edge=yes, sodass man die Segmente R..Z hat.
Evtl. muss man auch roof:ridge=yes mit weiteren roof:ridge=yes ways verbinden.
Starte bei Segment A, finde StĂĽtzpunkt (1). Gehe durch alle roof:ridge=yes` der auch den StĂĽtzpunkt (1) haben. In dem Fall ist es nur Z. Finde den anderen StĂĽtzpunkt (9) der Kante.
Finde alle anderen roof:edge=yes, die den Stützpunkt (9) haben. In dem Fall wäre das Y. Wenn die Kante auch Stützpunkt (2) hat (der andere Stützpunkt von A) dann war es ein Dreieck und du kannst deine Fläche aus den drei Kanten AZY bilden, wobei (9) der höchste Punkt ist und die Richtung normal zu A wäre. Wenn du nicht bei (2) raus kommst war es kein Dreieck und es geht weiter bis es keine weiteren Kanten gibt. Wäre hier der Fall, weil AZY endet bei (8).
Finde alle roof:ridge=yes, die den Stützpunkt (9) haben und finde dessen zweiten Stützpunkt. In dem Fall gibt es nur Kante U welche zum Stützpunkt (10) führt. Wenn (10) auch der zweite Stützpunkt von A ist, dann ist die Fläche AZU, wobei U der höchste “Punkt” ist und die Richtung wäre Normal zu U. Wäre hier nicht der Fall, aber bspw. bei BTR oder FXW.
Finde alle roof:edge=yes die in (10) beginnen. Eine Fläche mit mehr als einer roof:ridge=yes kann es nicht geben. In dem Fall gibt es T und S. S führt zu einem roten Stützpunkt, aber nicht dem richtigen. T führt zu (2). Die Fläche ist also AZUT wobei die Richtung normal zu U ist.
FĂĽr DVXGYUS habe ich noch keine Idee. Das scheint mir der komplizierteste Fall zu sein.
Ebenso könnte es den Fall geben, dass die Fläche gar keine Außenkante hat und nur aus roof:edge=yes, roof:ridge=yes und noch einer roof:edge=yes besteht. Hier wäre meine Idee, die Flächeninhalte am Ende zu berechnen und mit dem kompletten Gebäude zu vergleichen. Fehlt noch was, muss man alle roten Stützpunkte durchgehen und von da die Kanten suchen.