User:Marek kleciak/modelowanie schodów

From OpenStreetMap Wiki
Jump to: navigation, search

Strona opisuje tagowanie schodów w 3D


Koncepcja użyta również w: F3DB OSM-4D. Specyfikacja umożliwia (niezależnie od głównego celu jakim jest modelowanie w 3D, również w specyfikacji F3DB) także przyszły ulepszony rendering schodów w 2D w najwyższych stopniach zoomu.

Punkt wyjścia dla tej specyfikacji

Mapy OSM są coraz dokładniejsze, często do dyspozycji mamy również plany architektoniczne budynków z prawem ich wykorzystania w OSM. Tymczasem scody, nawet te wielkopowierzchniowe są nadal rysowane na mapie jako kreska prowadząca od do. Zmusza to niekiedy mapowiczy do naginania istniejącej specyfikacji i rysowania wielu linii w celu uzyskania efekt zbliżonego do rzeczywistości. Przykładem w Polsce są schody do Katedry Gnieźnieńskiej. Wielu ludziom słusznie nie podoba się takie podejście. Poniższa koncepcja daje propozycję rozwiązania tego problemu w 2D jak również w przypadku zastosowania dodatkowej grupy tagów do modelowania w 3D. .

Definicja

Aby umożliwić bardziej precyzyjne mapowanie i rendering schody rysujemy stosując:

  1. jak dotychczas, czyli oś środkową schodów w postaci wektorowej highway=steps, z użyciem tagu width=* oraz opcjonalnie height=* lub dodatkowo z podaniem:
  2. który punkt jest początkiem stopni (czyli jest położony najniżej) a który końcem schodów (położony najwyżej punkt) lub dodatkowo w skomplikowanych i nieregularnych przypadkach:
  3. z użyciem obszarów area=*=steps oraz opcjonalnie area=*=footway.

(dość podobnie do tego trzeciego przypadku jest rysowanie rzek w OSM. Dla duzych rzek stosujemy zarówno oś przebiegu rzeki z kierunkiem jak również kontur linii brzegowej rzeki jako obszar)

Parametry

Key Description Value
width=* szerokość stopni m
step_count=* Ilość stopni Integer
height=* Całkowita wysokość schodów m
material=* Materiał z którego wykonane są schody Nazwa materiału
steps_type=* Typ stopni Patrz spis rodzajów stopni (do zrobienia!)
handrail_height=* wysokość balustrady nad stopniami m
handrail_form=* Forma balustrady See Form library
handrail:left/right/both/center=* railing on the left/right/both/center side of the stairs yes/no
stairs_thickness=* Thickness of the stair construction m
stairs_start_angle=* kąt obrotu pierwszego dolnego stopnia w stosunku do ich osi Stopnie(°)
stairs_end_angle=* kąt obrotu ostatniego stopnia schodów w stosunku do ich osi Stopnie (°)
depth_step=* Głębokość pojedynczego stopnia m
height_step=* Wysokość pojedynczego stopnia m
in area-relation: role:lower Polilinia, start line irregular steps Polyline connected with highway=steps via relation
in area-relation: role:upper Polyline, end line irregular steps Polyline connected with highway=steps via relation
in area-relation: role:lateral Polylinie, krawędź nieregularnych stopni Polyline connected with highway=steps via relation
stairs_inline=* Polylinie, Innenkante unregelmässiger Treppe Polyline connected with highway=steps via relation
stairs:type=*

see Relations/Proposed/Area#area-steps for the area-relation model of steps.

Opis parametrów

Typy schodów

Tagging dla celów renderingu 3D.

MarekStairsTypeFull.JPG stairs:type=*= full


MarekStairsTypeStandard.JPG stairs:type=*= standard


MarekStairsTypeOverlapped.jpg stairs:type=*= overlapped


MarekStairsTypeEinzeln.JPG stairs:type=*= touched


MarekStairsTypeFreeSteps.jpg stairs:type=*= separated

Stages with offset

Used for 3D purposes only.

All stages can have offset.

Examples forming of stages for 3D rendering:

MarekStairsTypeFullwithOffset.JPG stairs:type=*= full_offset.

MarekStairsTypeStandardWithOffset.JPG stairs:type=*= touched_offset.

pozycja poręczy

MarekPoreczePosition.jpg

Position of railing:

Kąt rozpoczęcia i zakończenia stopni w schodach

Czasami kąt pod jakim płasczyzna pierwszego i ostatniego stopnia nachylona jest do osi schodów nie wynosi 90 stopni. W takich przypadkach musimy opisać tą wastość specjalnymi tagami:


MarekStartEndWinkelTreppe.jpg Kąt nachylenia pierwszego stopnia schodów (alpha s):w punkcie początkowym (najniżej położonym) S, Kąt nachylenia ostatniego stopnia schodów (alpha e) w punkcie końcowym (najwyżej położonym) E

Nieco o renderingu

A staircase with many wrinkles and without stairway landings is rendered as in the following example:

  • F3DBstepsHowToDo1.jpg highway=steps
  • F3DBstepsHowToDo2.jpg width=value
  • F3DBstepsHowToDo3.jpg rendering machine calculates section points M12-M23-M34 by use of angle bisectors.
  • F3DBstepsHowToDo4.jpg step_count=7
  • F3DBstepsHowToDo5.jpg rendering machine divides polyline P1 - P2 - P3 - P4 in 7 sections of equal length.
  • F3DBstepsHowToDo6.jpg Szkic: wynik końcowy po renderingu.


Przykład jak mogą wyglądać zrenderowane schody:

MarekJakRysujaSieSchodyLamane.jpg


Dlaczego wysokość jest ważna również dla renderingu w 2D

Dla zdecydowanej większości schodów w 2D używających również tagu width=* nie ma żadnego znaczenia gdzie jest początek a gdzie koniec lub dokładniej; który stopień jest położony najwyżej a który najniżej. No chyba że:

  • Początek i koniec schodów leżą nad sobą.
  • Linia łamana schodów przecina się ze sobą.


Przykład: dwie możliwości renderingu dla schodów z przecinającym się przebiegiem osi środkowej:

F3DBSteps2DWithIntersection.jpgF3DBSteps2DWithIntersection2.jpg


Schody z międzypodestami.


MarekStairsWithPlattform.jpg

Jeśli chcemu uzyskać schody z podestami położonymi między przebiegiem stopni, co jest standardem przewidzianym przez prawo budowlane jeśli mamy większą liczbę stopni, to musimy rysować w rzucie w OSM w sposób podobny jak w poniższym przykładzie: Zamiast jednej linii łamanej rysujemy kilka highway=steps i highway=footway łącząc je w jedną relację dla celów modelowania 3D. JEdna relacja składać się wieć będzie z następujących po sobie odcinków schodów (S) oraz odcinków podestów (P). Tak samo jak w przypadku relacji opisującej trasę autobusu ważna będzie kolejność elementów.

Głębokość pojedynczego stopnia

depth_step=*, (Ds, tag niezbędny wyłącznie dla zaawansowanego renderingu 3D)

MarekDepthStepDefinition.jpg

Dlaczego w ogóle ten tag? Gdyż możliwe jest że stopnie są dłuższe:


MarekDepthStepDefinition1.jpg

Punkt początkowy i końcowy schodów

Aby schody można poprawnie interpretować w 3D, musimy zdefiniować dół i górę schodów:


Linia początkowa i końcowa stopni

Schody o skomplikowanej geometrii rysujemy, konstruując górną i dolną krawędź schodów jako polilinię.

Tagowanie linii dolnej: steps:startline=yes linii górnej: steps:endline=yes.

MarekDolnyGornyPodest1.jpg

Obydwie linie są połączone ze sobą. The connector line is the midline of stair geometry tagged as: highway=steps. This line should still be used for routing.


MarekDolnyGornyPodest2.jpg

Rezultat po renderingu (mockup)*

MarekDolnyGornyPodest3.jpg

  • Neccesary Assumptions for the renderer, which can be developed based on this proposal:

The starting point of the polyline stairs:startline=yes is connected to the start point of stairs:endline=yes.. The line is divided into n-step sections for rendering. The same with the end points of polylines stairs:startline=yes andstairs:endline=yes

The approach solves problems arise when drawing large, complex stairs, because of differences between logical connectors for routing (graph network) and the desire, to reflect reality.



Opcje

A. Obydwie linie łamane mają tą samą ilość punktów.

Pomiędzy punktami początkowymi i końcowymi obu linii liczba stopni jest podzielona równomiernie:


MarekStairsDownAndTopLineA.jpg

  • Stairs:startline=yes yellow
  • Stairs:endline=yes green
  • Treppenvektor, highway=steps:rot (Start und Endline werden beliebig mit dem Treppenvektor miteinander verbunden)
  • Verlauf der Stufenkanten nach dem Rendering:schwarz

Der Ansatz basiert auf den in der Kartografie bekannten Höhenlinien. Die technische Schwierigkeit: hier könnten Selbstverschneidungen auftreten.

B. Both polylines have a different number of nodes.

In diesem Fall werden die Endpunkte beider Linien miteinander verbunden. Die einzelnen Punkte der Linie die mehr Punkte besitzt, werden über das Kriterium der kürzesten Entfernung mit den Punkten der zweiten Linie verbunden.

MarekStairsDownAndTopLineDifferentEdges.jpg MarekStairsDownAndTopLineDifferentEdgesB.jpg

Dalsze przykłady:

MarekExamplesStairsWithDifferentNrOfNodes.jpg

Special nodes for advanced modeling

Rendering the stairs can sometimes lead to an undesirable result if one draw start and end line with different number of nodes:

MarekStairsConnections1UnknownAndAutomaticly.jpg

In particular, this can result in an undesirable geometry of lines after rendering:

  • F3DBStepsByTwoLines1Start.JPG

drawn outline shapes

  • F3DBStepsByTwoLines2triangulated.JPG

internal triangulation by renderer

  • F3DBStepsByTwoLines3stepsRendered.JPG

unclean renderer output

  • F3DBStepsByTwoLines4useOfElePointsForOptimization.JPG

result optimized by use of tagging solution described below.


If you want to avoid this and get the wishful result, the start and end line must be divided by use of additionally tagging of points they should be connected corresponding to their position with:

If the real height values are known, you can use ele=* ( 3D)

The number of this points must be the same for start and end line!

(See sketch below: blue lines connect points that have the same tagging schema)

MarekStairsConnections2known.jpg

This tagging should be taken into account by the renderer.

Result mockup:

MarekStairsConnections2knownResult.jpg

Outline and Inline

An "outline" multipolygon with tagging area:steps=yes, draws the irregular outer surface of the stair from top.


MarekStairsWithOutline1.jpg


Therefore is it possible to combine several steps and footways as connected elements in ONE outline shape:

MarekStairsWithOutlineDescription2.jpg

The surface after rendering:

MarekStairsWithOutline2.jpg

Examples

Mockup rendering of a sequence of highway=steps and highway=footway with the same width=*:


MarekStairsWithPlattform1.jpg Classical OSM 2D representation

MarekStairsWithPlattform2.jpg OSM-4D, F3DB representation

MarekStairsWithPlattformKnickExample1.jpg Example: Rendering of a curved platform in OSM-4D


Combination of several connections within one outline:

MarekOutlineExample1.jpg stairs outline (Outline shape)

MarekOutlineExample2.jpg Stairs and footway lines.

MarekOutlineExample2Tagging.jpg Tagging

MarekOutlineExample3.jpg Mockup: result after rendering

Kierunek schodów

For right 3D interpretation of stairs one need the lowest and heighest point of steps. There are following possibilities:

Describe the lowest point of stairs as: "lowest:point=yes" Describe the highest point of stairs as: "highest:point=yes"

Jak rysować by uzyskać odpowiednie łamanie się stopni

Przykład: chemy osiągnąć następujący wygląd schodów w 2D i 3D:

MarekStairsModellingExample1.jpg

musimy dodać dodatkowy punkt na osi schodów - a step further than the start of the turned steps:

MarekStairsModellingExample1b.jpg

W wyniku tego, przebieg stopni w renderingu pozostanie prostopadły do linii środkowej przebiegu schodów bez potrzeby dalszej parametryzacji.

Analogicznie dla przykładu w celu lepszego zrozumienia idei, rysunek schodów po półokręgu:


MarekStairsModellingExample1c.jpg

Przykład rysowania schodów barokowych

Schody składają się z trzech obrysów (outline); dwóch obszarów schodów i jednego obszaru footway:

  • F3DBAreaStepsAndAreaFootwayExample.jpg
  • F3DBAreaStepsAndAreaFootwayExample1.jpg Steps (black midline) and footway (red midline)
  • F3DBAreaStepsAndAreaFootwayExample1result.jpg Rendering mockup