Proposal:Street area/pl

From OpenStreetMap Wiki
Jump to navigation Jump to search

Strona zawiera propozycje szczegółowego rysowania geometrii ulic jako płaszczyzn w OpenStreetMap.

Autor: Marek Strassenburg-Kleciak

Uwagi wstępne

Ulice (highway),mogą być, podobnie jak np. rzeki, podwójnie rysowane w OSM:
1. Jako wektor,
2. Jako obszar (area) (szczegóły tagowania są obecnie dyskutowane).
Dzięki temu geometria ulic będzie mogła być przedstawiana w prawidłowy sposób także w najwyższych stopniach powiększenia mapy.

W szczególności precyzyjnie rysowane i renderowane w przyszłych wersjach map będą mogły być na przykład:

  • skomplikowane skrzyżowania wraz z przejściami dla pieszych,
  • miejsca parkingowe,
  • przystanki autobusowe.

Narysowane już w dotychczasowej formie ulice muszą zostać uzupełnione o dodatkowe punkty w obszarach w których ulice są rysowane jako płaszczyzny. Dalszy opis w tekście ponizej.

Status quo: Ulice jako linie

StreetsLogicalLevel.JPG

Topologia ulicy nie jest rysowana w sposób odzwierciedlający rzeczywistość. Aby renderować ulice, przyjmuje się założenia dotyczące szerokości ulicy lub raz w jednym miejscu zmierzonej jej szerokości. Istnieje jednak dużo przypadków gdzie to podejście mija się z rzeczywistością.

Nowy schemat - area:highway

StreetsasfaceswithpointslegendPL.jpg

Ulice rysowane są jako area według pokazanego przykładu. Oczywiście jest to możliwe tylko w tych miejscach, gdzie dysponujemy szczegółową informacją o geometrii ulicy (np. zdjęcia lotnicze wysokiej rozdzielczości lub import krawezników).

Tagowanie

Podstawowe tagi

Tag Stosowanie Typ elementu Wartość Opis
area:highway wymagane area <typ ulicy> np: residential / secondary / tertiary itd.. ogólnie dostepny dla ruchu obszar ulic
area:highway wymagane area <typ ulicy> + junction=yes/roundabout, y_juncion obszar skrzyżowania ulic ograniczony linią ciągłą lub zewnętrznym brzegiem przejscia dla pieszych gdy brak linii ciągłej.
area:highway wymagane area traffic_island nieprzejezdny obszar ulicy, wysepka
area:highway wymagane area permissive obszar ulic dostepny tylko dla autobusów lub taxi.
area:highway wymagane area emergency nieprzejezdny obszar ulicy (szrafura asfaltu w białe pasy),
amenity=* pożądane area parking obszar parkingowy przy poboczu ulicy.
name=* pożądane tekst Nazwa ulicy identyczna z nazwa wektora ulicy
name2=* pożądane tekst Nazwa ulicy identyczna z nazwa wektora ulicy. (1)
addr:postcode=* pożądane tekst Kod pocztowy ulicy.
addr:city=* pożądane tekst Nazwa miasta

(1) - Stosowane w przypadku skrzyzowan bedacych czescia dwóch ulic.Analogicznie name3, name4 itd. w przypadku skrzyzowan laczacych w sobie wiele ulic. Dzieki tej technice renderer bedzie mógl prawidowo przedstawiac przebieg trasy w systemie nawigacji.

Warstwa logiczna

Streetsasfacesconnection.jpg

Niezbędne restrykcje:

  • Sąsiadujące płaszczyzny MUSZĄ mieć punkty wspólne,
  • Punkty, położone na osi ulic nazywane dalej w tekście dla wygody K (na rysunku powyżej punkty w kolorze czerwonym), są także punktami płaszczyzn area:highway, tagowanymi jako crossing:end=yes w przypadku gdy nie ma dla nich innego tagu np. highway=stop.
  • Punkty leżące na obwodzie poligonu area:highway i sąsiadujące z każdym punktem K, tj. K+1 i K-1 MUSZĄ znajdować się na zewnętrznej krawędzi ulicy.

Pytanie: Dlaczego punkty K muszą być punktami wspólnymi dla highway:<value> i area:highway? Linie symbolizujące początek skrzyżowania można by przecież renderować pod kątem prostym do osi wektora highway:value w nowo dodanym punkcie?

Odpowiedz: Często zdarzają się skrzyżowania, przy których linie symbolizujące nakaz zatrzymania się nie są malowane pod kątem prostym do osi ulicy. Proponowane rozwiązanie umożliwia zgodny z rzeczywistością rendering tych linii.

Rendering

Znając liczbę pasów jezdni ( lanes=* ), oraz dysponując informacją o rodzaju linii miedzy nimi (konieczność otagowania, np.: none, solid_line, double_line, dashed_line itd.) można renderować zbliżony do rzeczywistości obraz obszaru jezdni i skrzyżowania. Przesłanką do tego jest także tagowanie punktów K. Tag dla każdego z tych punktów usuwa wartość tagów opisujących rodzaj brzegów ulicy dla danego area:highway na odcinku K-1 do K+1 i zastępuje je przez jeden bądź dwa tagi dla danego punktu K.

Streetrenderingwithoutlines.jpg

Schemat tagowania punktu K

Tag Stosowanie Typ elementu Wartość Opis
crossing:end=* wymagane node yes Punkt, gdzie zaczyna lub kończy się obszar skrzyżowania
left=* pożądane node none, solid_line, double_line, dashed_line, giveway_line Rodzaj linii ograniczajacej malowanej na fragmencie skrzyzowania na asfalcie

na lewo od osi ulicy patrzac w kierunku skrzyzowania

right=* pożądane node none, solid_line, double_line, dashed_line, giveway_line Rodzaj linii ograniczajacej malowanej na fragmencie skrzyzowania na asfalcie

na prawo od osi ulicy patrzac w kierunku skrzyzowania

Tu pojawia sie proste przyklady na zastosowanie: ....

Typy linii planowane do renderingu lane dividers

  • none - Brak jakiejkolwiek linii między pasami.
  • solid_line - Linia ciągła

MarekLineSolid.jpg

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

MarekLineDoubleSolid.jpg

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

MarekLineSolidDashed.jpg

  • dashed_line - linie przerywana

MarekLineDashed.jpg

  • giveway_line - zatrzymanie z ustąpieniem pierwszeństwa (nie jest typem line divider dotyczącym lines)


Brak tagu dla Left: i Right: oznacza: na lewo i prawo od K do renderingu może być używany ten sam kolor (lub tekstura) co nawierzchnia ulicy dając w ten sposób np. ciągłą nawierzchnie asfaltu.

Przykład współzależności rysowania osi, płaszczyzn i taggingu pasów jezdni

Marek0onlyMiddleAxis.jpg Osie ulic

Marek1outlineStreet.jpg Powierzchnia ulicy

Marek2dividingOutlineStreet.jpg Podział powierzchni na segmenty

Marek3LanesDirections.jpg Tagowanie poszczególnych directions (uwaga na szkicu są błędy w kierunku strzałek zewnętrznych pasów w segmencie 3 i 4, powinny być tam proste strzałki)

Marek4LanesDirectionA.jpg Poszczególne segmenty z podziałem na directions.

Marek5LanesDirectionFinalA.jpg Symulacja wyniku w rendererze kafelków OSM / możliwej warstwie graficznej nawigacji.

Inne

Dyskutowane dodatkowe paramatry dla area:highway . Przypisywanie kategorii ulicy do obszaru.

Pytanie: Które wartości area:highway są w przypadku skrzyżowania nadrzędne, jeśli zetkną się ze sobą różne rodzajów dróg np. secondary i residential? Czy rozdzielić area dla residential? Lub wprowadzić nowy value dla skrzyżowania?

Odpowiedz: Jesli ktos chce przypisywac kategorie do ulicy zamiast uzywac "yes" - generalnie, tak jak w przypadku "klasycznego" atrybutowania wydaje się, że ważniejsza ulica powinna być "NADRZĘDNA" i to właśnie tak powinno być atrybutowane skrzyżowanie.

Niezależnie od tego warto prowadzić dyskusje na temat tego, czy tego typu dodatkowe atrybutowanie jest w ogóle niezbędne, zwłaszcza że dotychczasowa warstwa logiczna w której ulice rysowane są jako osie, już zawiera informacje o kategorii ulicy!. Bardziej sensowna wydaje się taka atrybutacja wtedy, gdy skrzyżowanie dwóch ulic jest np. placem.

Atrybutowanie ulic przy pomocy np.: secondary, residential zostało poza tym wprowadzone w dwóch celach:

  • dla polepszenia routingu,
  • by móc odpowiednio rysować dane kategorie ulic na mapie.

Rysowanie ulicy dodatkowo jako "area" nie potrzebuje zasadniczo tej informacji, jako że dokładna geometria ulicy będzie i tak rysowana jedynie w najwyższych stopniach powiększenia na podstawie geometrii ulicy i ma inne cele niz nawigacja która i tak bedzie opierac sie na osiach ulic.

Skomplikowane skrzyżowania a nawigacja pod OSM

MarekGeneralizationCrossing0.jpg A. Początek rysowania mapy, silna generalizacja, nadaje się do prostej kalkulacji przebiegu trasy.

MarekGeneralizationCrossing1.jpg B. Uwzględnienie oddzielonych od siebie, np pasem zieleni, przystankiem tramwajowym itd., pasów jezdni. Bardziej realistyczny routing.

MarekGeneralizationCrossing2a.jpg C. Uwzględnienie manewru skrętu w prawo. W porę podany komunikat skręć w prawo

MarekGeneralizationCrossing3.jpg D. Uwzględnienie manewru skrętu w lewo. W porę podany komunikat skręć w lewo

MarekGeneralizationCrossing4.jpg E. Uwzględnienie wszystkich manewrów skrętu w lewo


Dotychczasowy paradygmat rysowania tego typu skrzyżowań w najwyższym stopniu szczegółowości jest dziełem przypadku. Stało się tak, ponieważ programy typu Keepright pokazują błąd wszędzie tam, gdzie przecinają się ze sobą dwie drogi bez punktu wspólnego. Wprowadzając punkty przecięcia także tutaj musimy w konsekwencji w celu uzyskania prawidłowego routingu, umieszczać wszędzie na nich restrykcje only straight on. Technika powoduje większy nakład pracy i jest podatna na błędy.


MarekGeneralizationCrossing5.jpg F. Nowy paradygmat: Brak punktów przecięcia na liniach typu link z innymi drogami.

UWAGA: Nowy paradygmat będzie wkrótce tj. jesień 2013, poddany dyskusji z OSMF i Data Working Group! Aby można go było używać potrzeba jest nowa kategoria dróg, nazwijmy ją po polsku "łącznik". Umożliwi ona precyzyjne pokazanie kierowcy jak należy jechać, ale nie będzie renderowana na standardowej mapie jako highway, ponieważ w większości zastosowań zaciemnia ona renderowaną mapę zbyt dużą ilością szczegółów.

Możliwy rendering skrzyżowań

MarekGeneralizationCrossingwithSurfaces0.jpg A. Raw data.

MarekGeneralizationCrossingwithSurfaces1.jpg B. Example rendering, surfaces only.

MarekGeneralizationCrossingwithSurfaces2.jpg C. Example rendering, additionally parking areas and trees with diameter.

MarekGeneralizationCrossingwithSurfaces3.jpg C. Example rendering, additionally pedestrian crossing.

MarekGeneralizationCrossingwithSurfacesNow.jpg D. Example rendering now...

Przykład możliwości zaawansowanego renderingu mapy: przejścia dla pieszych

Jeśli przejście dla pieszych to droga pod kątem prostym do osi ulicy, to nie jest konieczne rysowanie jej jako footway=yes a jedynie zaznaczenia highway=crossing. W renderingu pasy zebry będa mogły być wtedy generowane automatycznie w sposób pokazany poniżej:

MarekPedestrianCrossingCalculation1.jpg A. Pp - Punkt otagowany jako highway=crossing

MarekPedestrianCrossingCalculation2.jpg B. Punkty 1 i 2. łączą prostą prostopadłą do osi ulicy.

MarekPedestrianCrossingCalculation3.jpg C. Wynik renderingu.


Inaczej ma się sprawa, gdy przejście dla pieszych przebiega pod kątem lub jest w bardzo rzadkich przypadkach linią łamaną:


MarekPedestrianCrossingCalculation4.jpg D. Linia 1-2 to narysowany na mapie wektor otagowany jako highway=footway plus footway=crossing

MarekPedestrianCrossingCalculation5.jpg E. Wynik renderingu.