Pl:Proposed features/Street area

From OpenStreetMap Wiki
Jump to navigation Jump to search
Street area
Proposal status: Inactive (inactive)
Zaproponowana przez: Marek_kleciak
Oznaczanie: area:highway=*
Dotyczy: obszar węzeł
Definicja: Rysowanie dróg jako obszary i szczegóły tego mapowania.
Statistics:

Opracowane: 2011-05-13
dyskusja : 2015-08-15

Cel

Ulice powinny mieć podwójną reprezentację na mapie:

  1. Jako wielokąt dla routingu, czyli tak, jak mapujemy obecnie.
  2. Oraz jako obszar do wizualizacji i zaawansowanego routingu na obszarach (co jest już normą w grach komputerowych).

Jest to podobne podejście jak w przypadku rzeki, gdzie rysujemy jej przebieg jako linię środkową, stosowaną potem do rysowania rzeki na niskich stopniach zoomu oraz jako obszar pokazujący brzegi rzeki, który jest stosowany do rysowania rzeki na dużych powiększeniach.

Przez analogiczne zastosowanie tej samej koncepcji do rysowania ulic, uzyskamy ich dokładniejszy wygląd na wysokim poziomie powiększenia. To samo dotyczy oczywiście skomplikowanych obszarów skrzyżowań, parkingów i dróg serwisowych.

Przykład dróg serwisowych narysowanych jako obszary:

MarekExampleStreetAreaInOSM.jpg


Obecnym sposobem rysowania powierzchni dróg w różnych aplikacjach renderujących, takich jak Mapnik, jest graficzna reprezentacja osi ulicy z pewną jej szerokością którą renderer przyjmuje w zależności od kategorii drogi. Istnieje co prawda tag mający opisywać faktyczną szerokość drogi, width, ale jest on bardzo rzadko stosowany.

Ponieważ szerokości dróg różnią się na przykład przy płynnej zmianie liczby pasów, na mostach czy przy szczególnie skomplikowanych skrzyżowaniach, to takie globalne założenie abstrakcyjnej szerokości nie pozwala wiernie odtworzyć rzeczywistości:

StreetsGeneralisedLevel.JPG

W rzeczywistości szerokości ulic zmieniają się płynnie:

StreetsLogicalLevel.JPG

Tagowanie

Dotychczasowe podejście highway=* z area=yes jest rozszerzone na rzeczywiste obszary nawierzchni ulic z tagami:

Tag Wartość Element Komentarz Zdjęcie
area:highway value obszar Wartości są takie same, jak dla obecnego tagu highway=* z listy "dróg" lub "ścieżek".

Wartości są sortowane według priorytetów w porządku malejącym:
motorway, trunk, primary, secondary, tertiary, unclassified, residential, road, living_street, pedestrian, raceway, motorway_link, trunk_link, primary_link, secondary_link, tertiary_link, service, cycleway, footway, track, bridleway, path, construction, proposed, steps, bus_guideway, escape

Szczegółowy opis
area:highway road obszar Dla nieznanego typu dróg. Podobny do highway=road.
Road.png
junction=* yes

roundabout y_junction

obszar Obszary skrzyżowań area:highway=<wartość dla drogi o najwyższym priorytecie> z junction=yes/roundabout/y_junction
area:highway traffic_island obszar Dodatkowo surface=* lub na przykład: landuse=grass
Porkchop island at Salem station, December 2018.jpg
area:highway bus_stop obszar Miejsca zatrzymania tylko dla autobusów.
Průmyslová str3, Prague Štěrboholy.jpg
area:highway bus obszar Pasy jezdni tylko dla autobusów.
Buslane 2.jpg
area:highway taxi_stop obszar Miejsca zatrzymania tylko dla taxi.
Hong Kong Taxi - 1-12-2006 - Shatin Taxi Stand.jpg
area:highway emergency obszar Podzielony obszar jak na tym zdjęciu po prawej stronie.

Podczas rysowania linii wewnątrz zaznaczonych ukośnymi liniami obszarów (area:highway=emergency), aplikacje renderujące powinny wziąć pod uwagę każdy tag direction=* na tych obszarach. Dopuszczalne wartości:
angles and cardinal directions.

Zeichen 298 - Sperrflächen, StVO 1970.svg
area:highway shoulder obszar Pasy awaryjne np na autostradach.

Zobacz: Pas awaryjny lub propozycje OSM: Key:shoulder

area:highway steps obszar Linie środkowe schodów: highway=steps, dla kierunku renderowania zgodnie z tagiem incline=up i incline=down.
Obszary pasów (np area:highway=bus i area:highway=shoulder) powinny być zaznaczone w obszarze drogi do której należą. Drogi równoległe powinny mieć własne obszary (np. podwójne jezdnie, ścieżki rowerowe, jeśli rysowane jako odrębne linie).
area:highway pedestrian obszar Może być używany tylko z liniami oznakowanymi jako highway=pedestrian. Kombinacja z tagiem area=yes nie jest poprawna.

Zobacz także #Uwaga dotycząca area=yes poniżej.

area:highway footway obszar Obszar przeznaczony wyłącznie dla pieszych. Podobny do highway=footway.
Dscf0487 600.jpg
area:highway cycleway obszar Obszar przeznaczony wyłącznie dla rowerzystów. Podobny do highway=cycleway.
Path-bicycledesignated.jpg
area:highway escape obszar Podobnie do highway=escape
A7-Notbremsweg.jpg
area:highway passing_place obszar Podobnie do highway=passing_place
Ausweichstelle.jpg
area:highway turning_circle obszar Podobnie do highway=turning_circle
Turning circle.jpg
area:highway turning_loop obszar Podobnie do turning_loop
Turning circle - geograph.org.uk - 991834.jpg
man_made bridge obszar Most jako obszar - należy stosować istniejące tagowanie: man_made=bridge.
amenity parking_space obszar Rysunek parkingu wzdłuż ulicy, ale patrz amenity=parking_space.
Crossing
highway footway linia z footway=crossing może być używany do renderowania przejść dla pieszych Przejście dla pieszych.
Zebra-crossing sm.jpg
footway crossing obszar with direction=* może być używany do renderowania przejść dla pieszych Przejście dla pieszych.
Zebra-crossing sm.jpg
highway cycleway linia z cycleway=crossing może być używany do renderowania przejść dla rowerzystów Przejście dla rowerzystów.

Pomocne jest zbieranie danych dotyczących typu drogi, zwłaszcza dla area:highway=footway/cycleway, ponieważ informacje te mogą być wykorzystane do różnych renderingów mapy.

Co nie jest koniecznie?

Nazwa ulicy, liczba pasów ruchu, nawierzchnia, gładkość, maxspeed, nazwy adresowe itp.
Atrybuty te są częścią drogi i mogą być z niej wyodrębnione.

Uwaga dotycząca area=yes

Nie należy używać area:highway=* do placów i podobnych miejsc. Są one opisane przez tag highway=* połączony z tagiem area=yes, podczas gdy area:highway=* w połączeniu z area=yes jest nieprawidłowy. Używamy tagu area:highway=* tylko aby dodać rysunek obszaru do linii przedstawiającej drogę, gdzie linia otagowana highway=* bez area=yes istnieje. Dotyczy to przede wszystkim, ale nie wyłącznie highway=pedestrian i highway=footway.

Uwaga dotycząca name=*

Nie należy używać name=* z area:highway=*. Nazwy są wpisane w nazwach ulic. Użycie nazwy po raz drugi w obszarze prowadziłoby do niepotrzebnych etykiet w większości programów renderujących.

Opis

Dotychczasowy sposób renderingu ulic

Ulice są reprezentowane jedynie przez linie łamane. (osie środkowe ulicy)


Argumenty przemawiające za takim podejściem:

  • Szybki rendering, bardzo dobrze generalizujący wygląd mapy na niższych stopniach zoomu.

Argumenty przemawiające przeciw takiemu podejściu:

  • Przestrzeń drogi nie daje się prawidłowo odwzorować jako powierzchnia:

Przykład: Poniższe skrzyżowanie nie da się prawidłowo odwzorować stosując założenia co do szerokości ulicy.

MarekCrossingDillema1.jpg

  • Zasady renderowania mogą tylko przypuszczać jakie szerokości przyjąć dla generalizowania ulicy width=*, lanes=*.
  • Muszą zostać przyjęte uogólnienia dot. szerokości ulic, te same dla całego świata. Zaawansowane tagowanie z użyciem szerokości ulicy oraz tagu placement=*jest skomplikowane dla początkujących.
  • Błędy wynikające z generalizacji szerokości rażą po renderingu tam, gdzie mamy skomplikowane, duże skrzyżowania i dużą liczbę pasów.
  • Rendering w 19. stopniu powiększenia jest niezadowalający.

Dzielenie ulic na obszary

"Zasada hydraulika"

MarekPlumberPrinciple.jpg Powierzchnie są podzielone na "normalne" obszary ulic i obszary "skrzyżowań" (rury i złączki)

Zasada ta powinna być stosowana, gdy 3 lub więcej linii łamanych spotyka się w jednym punkcie (skrzyżowanie).

Konsekwentne stosowanie "Zasady hydraulika" w mapowaniu jest główną różnicą do bardzo podobnej propozycji: Proposed_features/area:highway

W przypadku skrzyżowania dwóch lub więcej dróg o różnych klasach, np trzeciorzędnych i mieszkalnych area:highway=* pobieramy wartość ulicy z wyższym priorytetem i dodatkowo opisując skrzyżowanie tagiem junction=yes.

Wyjątki

Rysowanie mniej ważnych skrzyżowań nie jest konieczne. Są to na przykład: skrzyżowania dróg serwisowychczy highway=track i highway=* (np droga trzeciorzędna) z innych klasami dróg.

Powody stosowania "zasady hydraulika"
  • Dokładniejsza nawigacja dla pieszych i rowerzystów.
  • Bardziej szczegółowe mapy: nawigacja z widokiem rzeczywistym skrzyżowań.
  • Ulepszanie modeli terenu w 3D z wykorzystaniem skrzyżowań: Obszary te są zazwyczaj płaskie i poziome. Fakt ten może być użyty do bardziej realistycznej wizualizacji 3D.
  • Ulepsza wiadomości głosowe dla systemów nawigacji: Obszary skrzyżowań redukują liczbę komunikatów głosowych!
  • Kontury ulic są wykorzystywane przez pojazdy jeżdżące autonomicznie.
  • W przyszłości: szybszy rendering 3D. Dzielenie ogromnych elementów obszary na mniejsze segmenty = mniej dużych elementów w cache = szybsza wizualizacja aplikacji 3D w czasie rzeczywistym.

Rendering mostów

(Zobacz także: man_made=bridge)

Ze względu na routing często musimy narysować na moście kilka oddzielnych linii. Efekt wygląda źle:

F3DBbridgeOldApproach.JPG


Rendering mostów z wieloma oddzielnymi pasami ruchu przy użyciu jego rzeczywistego obszaru wygląda przejrzyściej:


F3DBbridgeTopViev.JPG

Od niedawna renderowany jest obszar mostu otagowanego jako man_made=bridge Najprawdopodobniej pozwoli to w przyszłości wykorzystać obszar mostu także do celów renderingu 3D.

Patrz: Mosty w 3D

Most jako obszar zawierający w sobie obszary area:highway innych dróg:

MarekDrawingOfBridgeAsAreaHighway.jpg

Przykład

Nawierzchnie dróg o różnych funkcjach są tu narysowane jako obszary. Oczywiście jest to możliwe tylko tam, gdzie istnieje jako podkład dobrej jakości ortofotomapa lub plan sytuacyjny którego wolno nam użyć.

Legenda do poniższego szkicu:

  • Kolor szary: Obszar drogi przejezdnej - area:higway=
  • Kolor szarofioletowy: Obszar skrzyżowania przejezdny - area:higway= plus junction=yes
  • Kolor zielony: Oddzielający pasy jezdni obszar nieprzejezdny - np. landuse=grass
  • Kolor jasnofioletowy: Obszar drogi nieprzejezdny, znajdujący się na skrzyżowaniu - area:highway=traffic_island lub area:highway=emergency
  • Kolor brązowy: Specjalny obszar (tutaj parking) - area:highway=parking_space
  • Kolor ciemnofioletowy: Specjalny obszar (postój taksówek i przystanek autobusowy) - area:highway=taxi_stop i area:highway=bus_stop
MarekStreetsasfacesWithPointsLegend2.jpg
Wyłączony obszar z kierunkiem=45

Rendering obszarów awaryjnych (wyłączonych)

Rysując obszar (area:highway=emergency), możemy użyć tagu: tag direction=* aplikacje renderujące powinny wziąć go pod uwagę. Renderuje go np. Osmapa.
Dopuszczalne wartości: Kąty i główne kierunki geograficzne.

Zastosowanie "zasady hydraulika" w celu optymalizacji renderowania

Cel rysowania punktów łączących drogi i obszary

Punkty te są konieczne do prawidłowego renderowania zewnętrznego obrysu ulicy.

StreetsasfacesconnectionModified.jpg

Punkty, znajdujące się na osi ulicy, opisane w dalszej części tekstu jako K (na powyższym rysunku są to punkty w kolorze czarnym), są także punktami obszarów area:highway=*, oznaczonych jako crossing:end=yes w przypadkach, gdy nie mają innego tagu np highway=stop.

Poradnik mapowania

Więcej przykładów jest tutaj: Proposed_features/area_highway/mapping_guidelines

Dzielenie ulicy na obszary

Legenda
  • Niebieski punkt = Węzeł łączący
  • Czarny punkt = Droga do obszaru węzła połączenia logicznego "K" (konieczny!)
  • Czerwona linia = Zamknięty kontur ulicy lub skrzyżowania okolicy
  • Niebieska linia = Droga środkowa

MarekJunctionLegend.jpg

O i T - Skrzyżowanie:

MarekOandTjunction.jpg


Y-Skrzyżowanie z awaryjnym obszarem:

MarekCrossingYjunction.jpg

X-Skrzyżowanie:

MarekXjunction.jpg

Podwójne X-Skrzyżowanie z zielenią w środku:


MarekdDoubleXjunctionWithGrassInTheMiddle.jpg

Przykład skrzyżowania na mapie: http://www.openstreetmap.org/way/361005282

Niezbędne ograniczenia

  • Dwie sąsiadujące obszary ulic muszą mieć co najmniej jeden punkt wspólny K.
  • Linia środkowa ulica musi mieć co najmniej dwa punkty wspólne K z obszarem area:highway=*.

Tagowanie punktu K

Punkt "K" jest często identyczny jak: highway=stop lub highway=traffic_signals.

road_marking=stop_line z stop_line=yes/solid_line/giveway, np stop_line=giveway

  • Jeśli nie ma linii stopu: Punkt K pozostaje bez tagu. To oznacza: brak wyrenderowanej linii na lewo lub na prawo od K. Powierzchnie konturów mają taki sam kolor jak na powierzchnia ulicy.


Tag Użycie Typ Wartość Opis
highway=stop necessarily węzeł yes

Punkt, w którym przejście się rozpoczyna lub kończy.

left=* possible węzeł none, solid_line, giveway, other country specific value Typ linii granicznej malowanej na części obszaru przejścia

na lewo od linii środkowej ulicy patrząc w kierunku skrzyżowania

right=* possible węzeł none, solid_line, giveway, other country specific value Typ linii granicznej malowanej na części obszaru przejścia

na prawo od linii środkowej ulicy patrząc w kierunku skrzyżowania

Tagowanie przejścia dla pieszych

highway=footway

footway=crossing

opcjonalnie bicycle=yes

width=* - szerokość zebry na przejściu

Uwaga: tylko chodniki wewnątrz obszaru area:highway otrzymują dodatkowy tag footway=crossing

Krótka wycieczka: możliwość renderingu pasów ruchu

Kpoints1.jpg

Przykład:

Punkt K1 jest otagowany jako:

stop_line=yes, left=solid_line, right=solid_line


Punkt K2 jest otagowany jako:

stop_line=yes, left=none, right=solid_line

Brak tagowania dla left: i right: lub wartości: none oznacza że na lewo i prawo od punktu K rendering wykorzysta ten sam kolor/teksturę jak dla ulicy.
Czyli: brak zewnętrznego obrysu tych wektorów.

Kpoints2.jpg

Zakładając, że liczba pasów ruchu na drodze: (tertiary, secondary, primary, residential..etc.) między punktami K1 i K2 jest znana, mogą być renderowane przez użycie obrysu ulicy jako granicy w celu orientacyjnego określenia geometrii pasów. Oto przykład z 6 liniami:

Proszę zwrócić uwagę: Orientacja "czerwonej linii" na lewo i prawo od węzła "K" może być inna niż 90°. Kierunek wskazuje prawdziwy istniejący kierunek linii zatrzymania się pojazdu na nawierzchni ulicy.


Jeżeli założymy, że celem renderingu oprócz dokładnego odwzorowania wszystkich powierzchni jest również generyczne odwzorowanie pasów jezdni i strzałek na niej leżących to konsekwencją będzie w przypadku wysepek dzielenie drogi na dwa fragmenty oneway=yes. Jeśli tego nie zrobimy, nie uda się nam osiągnąć prawidłowego renderingu pasów.

Ten rysunek pokazuje dlaczego:

Kpoints3a.jpg

Linia żółta, to oś ulicy highway=* Czarne punkciki na osi ulicy to punkty tej drogi. W podanym przykładzie mamy lanes=6

Przez czarne punkty prowadzimy zielone dwusieczne kąta znajdując w ten sposób dla każdej dwusiecznej dwa punkty wspólne (na rysunku są to punkty zielone) z obrysem area:highway=*


Odcinek na rysunku oznaczony jako Pi'-Pi może zostać podzielony na 6 równych odcinków. Zielone linie nie są oczywiście widoczne na renderowanej drodze: istnieją one tylko jako linie konstrukcyjne by zilustrować zasadę działania algorytmu renderingu!

Przeprowadzając tę operację analogicznie na każdym punkcie Pn, możemy przeprowadzić rendering dający wynik taki, jak tutaj:


Kpoints6.jpg

Ten przykład pokazuje, dlaczego jest koniecznie rozdzielenie ulic, zwłaszcza Y-skrzyżowania w oddzielnych obszarach. Obszary "Crossing" to obszary bez renderowania pasów, z powodu dwóch lub więcej wektorów na tym samym obszarze.

Tagowanie punktu K i linii zatrzymania pojazdu przed skrzyżowaniem

  • none - Brak linii rozdziału.

highway=stop_line oraz:

stop_line=solid_line - ciągła linia

MarekLineSolid.jpg

stop_line=dashed_line - linia przerywana

MarekLineDashed.jpg

stop_line=dashed_line_short - linia przerywana krótka, stosowana na drogach syzbkiego ruchu i autostradach.

MarekLineDashedShort.JPG

stop_line=giveway - linia zatrzymania podporządkowana (specyficzna dla poszczególnych krajów. Używane na przykład w Polsce, nie znana w Niemczech).

StopAndGiveWayLine.JPG

Uwaga: Niektóre kraje mają specyficzne symbole różnych miejsc ulicznych, zwłaszcza dla przejść (na przykład kolor).
Symbole te mogą być dodane do powyższej listy i stosowane dla lepszej wizualizacji.

Oba kolejne punkty po lewej i prawej stronie K na obszarze ulicy MUSZĄ być elementem zewnętrznej krawędzi ulicy.

Pytanie: Dlaczego wspólny punkt ulicy i obszaru K powinien być narysowany? Czy nie można po prostu przyjąć, że linia zatrzymania się pojazdów ma być rysowana pod kątem prostym do osi ulicy?

Odpowiedź: Niestety zdarzają się przejścia uliczne, w których linie zatrzymania nie są prostopadłe do przebiegu drogi, więc jest to jedyny możliwy sposób, aby uzyskać topologicznie poprawne odwzorowanie o sytuacji rzeczywistej.

Rozdzielenia pasów ruchu wzdłuż ulicy

Mapowanie pasów ruchu jest opisane na stronie wiki: Autostrady z zjazdem i wjazdem

Przykłady innych linii na jezdni:

  • double_line - podwójna linia ciągła

MarekLineDoubleSolid.jpg

  • solid_dashed_line - linia ciągła przerywana (analogicznie odbicie lustrzane)

MarekLineSolidDashed.jpg

Rendering

W związku ze znaną liczbą pasów stanowiących atrybut linii i informacją o rodzaju kontur obszaru ulicy (odpowiedni tagi musi być określony, na przykład: outline=solid line, outline=dashed line)) realistyczny obraz przestrzeni drogowej z malowaną ulicą może być renderowany.

Warunkiem tego jest odpowiednie oznaczanie punktu K. Ten tag anuluje renderowanie obszaru ulicy pomiędzy punktami K-1 do K + 1 i zastępuje go jednym lub dwoma tagami dołączonymi do punktu K.

W ten sposób umożliwia renderowanie, na przykład, linii zatrzymania lub innych symboli dla poszczególnych krajów w obszarach przejść.

Prosty przykład

Rozwidlenie z wysepką

RenderingMockupPlumberPrincipleKtagging.JPG

tagowanie: punkt K z czerwonymi liniami po lewej i prawej jest otagowany jako highway=stop, lub highway=stop_line,

punkt K z zielonymi liniami po lewej i prawej = jest nieotagowany.


RenderingMockupPlumberPrincipleRendered.JPG Wynik po renderingu obu punktów.

Bardziej złożony przykład

MarekMockupHamburgBurgstrasse.jpg

Obecne odzwierciedlenie tego samego obszaru (Hamburg Burgstrasse)

MarekExampleBurgstraße.jpg

Uwaga: Większość K- punktów w powyższym przykładzie mają taką samą wartość po lewej i prawej stronie, z wyjątkiem punktów highway=stop na skrzyżowaniu typu T na rysunku po prawej stronie na dole oraz w lewo u góry.

Ten punkt powinien być oznaczony tagiem: right=solid_line. Tag left=none nie jest konieczny.

Powierzchnie area:highway=traffic_island są dodatkowo oznaczone jako pattern=hatched.

Renderowanie mkgmap wygenerowanego dla (Garmin) map

Przykład kodu mkgmap stylu wielokąta dla Openfietsmap (mapa rowerowa ):

area:highway=bridge | man_made=bridge | building=bridge [0x0e default_name="bridge" resolution 23]

area:highway=* [0x0e resolution 23]

Area highway OFM.jpg

Keizer Traianusplein, Nijmegen

Zobacz też


area:highway=* landuse=highway

Przykłady odwzorowania