Pl:Relation:multipolygon
multipolygon |
Opis |
---|
Grupowanie złożonych obszarów. |
Grupa: właściwości |
Człony |
Status: w rzeczywistości |
Narzędzia |
Relacja multipolygon (po polsku wielokąt złożony) jest stosowana do przedstawiania złożonych obszarów.
Opis
Proste obszary są odwzorowywane w OSM, poprzez utworzenie jednej linii i dodanie do niej jej znaczników, które sugerują obszar zamiast tylko konturu obszaru.
Na przykład, kontur oznaczony jako landuse=forest będzie można uznać za obszar, natomiast zaokrąglony kontur oznaczony junction=roundabout już takim obszarem nie będzie.
Jednak model ten działa tylko na obszarach, w których kontur składa się z jednej linii i który nie ma otworów. Każdy obszar, który jest bardziej złożony niż ten (np. ponieważ jego kontur składa się z kilku linii połączonych ze sobą, lub powierzchnia składa się z wielu niezależnych części lub ma dziury) wymaga relacji multipolygon.
W skrócie, relacja multipolygon może mieć dowolną liczbę linii w roli outer (obrys zewnętrzny) i dowolną liczbę linii w roli inner (obrys wewnętrzny), a te znowu muszą, w jakiś sposób, utworzyć z nich wielobok. Zaleca się jednak, aby relacja nie była zbyt duża, jeżeli nie jest to konieczne.
W wielu przypadkach da się wyrysować obszary nie używając do tego wielokąta złożonego, dlatego zawsze przed użyciem zastanów się czy musisz go zastosować i czy nie można podzielić obszaru, który chcesz opisać tą relacją na mniejsze części składowe. Na przykład zamiast jednego wielkiego wielokąta złożonego pól uprawnych możesz zastosować kilka zwykłych obszarów pól. Ułatwia to także późniejsze poprawki tych obszarów, łatwiej poprawić jeden mniejszy obszar pola/łąki itp niż ogromną relację.
Oznaczenia
Klucz | Wartość | Opis |
---|---|---|
type | multipolygon | Korzystanie z zasady budowania obszaru opartego na elementach. |
Elementy
Element | Rola | Liczba | Opis |
---|---|---|---|
outer | jedna lub więcej | Linia tworząca pierścień zewnętrzny danego obszaru. | |
inner | jedna lub więcej | Linia tworząca pierścień wewnętrzny danego obszaru. |
Użycie
Zamierzone użycie wieloboków jest następujące:
- Znaczniki opisujące wielobok (np.
landuse=forest
) "powinny przejść na relację". Zewnętrzna linia powinna pozostać nieoznaczona. - Należy zawsze umieszczać znaczniki wieloboku w relacji a nie na liniach, które wchodzą w jej skład.
- Jeśli inner linia reprezentuje coś w sobie (np. las z otworem, gdzie otwór jest jeziorem), wówczas wewnętrzna linia powinna być oznaczona jako taka, w przeciwnym razie linia wewnętrzna powinna pozostać "nieoznaczona".
- Kierunek linii nie ma znaczenia.
- Kolejność członów relacji nie ma znaczenia, jednakże przy posortowaniu członów relacji wiemy na pewno, czy relacja jest zamknięta.
Prawidłowe warunki dla wielokąta
Relacje wielokątów złożonych mogą być używane aby tworzyć wielokąty w zgodności ze standadem OGC Simple Feature (strona w języku angielskim) (Przykłady zgodności ze standardem OGC). Wszystko co nie jest poprawnym wielokątem złożonym w odniesieniu do tego standardu (np. wielokąty z nachodzącymi na siebie pierścieniami) powinno być uznawane za relację błędną, z wyjątkiem przypadku opisanego poniżej.
Poprawny wielokąt (zamknięty) to wielokąt, który składa się z połączonych ze sobą linii, których punkty końcowe są ze sobą połączone i tworzą w ten sposób wielokąt zamknięty.
Linię niezamkniętą definiujemy jako zbiór węzłów w którym pierwszy węzeł jest inny niż ostatni.
Warunki aby utworzyć poprawny wielokąt złożony (multipolygon) są następujące:
- Linie będące członem relacji wielokąta złożonego muszą tworzyć zamknięte wielokąty. [1]
- Tylko dwie niezamknięte linie i nie więcej mogą współdzielić ze sobą punkty końcowe.
- W przypadku, gdy punkt końcowy jest współdzielony przez mniej niż dwie zamknięte linie, wielokąt nie może zostać zamknięty i jest utworzony niepoprawnie.
- W przypadku, gdy punkt końcowy jest współdzielony przez więcej niż dwie niezamknięte linie jest on utworzony niepoprawnie i nie może być jednoznacznie naprawiony. (Wyjątek – punkty współdzielone przez parzystą liczbę niezamkniętych linii mogą równocześnie stykać się z liniami zewnętrznymi co jest dopuszczalne.)
- Linie z rolą inner NIE MOGĄ nachodzić na linie z rolą outer bądź być ze sobą sklejone.
Przykłady
Jeden zewnętrzny i jeden wewnętrzny pierścień
Najbardziej podstawowy przykład zastosowania tego typu relacji.
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="inner" /> </relation> |
Jeden zewnętrzny i dwa wewnętrzne pierścienie
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="inner" /> <member type="way" id="3" role="inner" /> </relation> |
Wiele linii, tworzących pierścień
Zaawansowany schemat "multipolygon" pozwala każdemu wewnętrznemu lub zewnętrznemu pierścieniowi składać się z więcej niż jednej linii łamanej. Jest to przydatne w przypadku wielokątów obejmujących bardzo duże obszary, gdzie byłoby to bardzo niepraktyczne, aby mieć jedną linię łamaną biegnącą wokół całości:
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="outer" /> <member type="way" id="3" role="inner" /> </relation> |
Dwa rozdzielone pierścienie zewnętrzne
W przeciwieństwie od starego stylu wielokąta, zaawansowana relacja "multipolygon " pozwala również na dowolną liczbę pierścieni zewnętrznych, a tym samym aby były prawdziwymi wielokątami:
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="outer" /> </relation> |
Dwa rozdzielone pierścienie zewnętrzne i wiele linii tworzących pierścień
Możliwość łączenia poszczególnych odcinków w pierścień nie jest ograniczona do pierścieni zewnętrznych, może być również stosowana do wewnętrznych pierścieni:
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="inner" /> <member type="way" id="3" role="inner" /> <member type="way" id="4" role="outer" /> <member type="way" id="5" role="inner" /> </relation> |
Złożona kombinacja wszystkich zaawansowanych możliwości
Ten przykład pokazuje złożoną kombinację wszystkich zaawansowanych funkcji: trzy zewnętrzne pierścienie, z których dwa mają jeden lub więcej pierścieni wewnętrznych, a wiele z nich składa się z więcej niż jeden linii.
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="outer" /> <member type="way" id="3" role="outer" /> <member type="way" id="4" role="outer" /> <member type="way" id="5" role="inner" /> <member type="way" id="6" role="inner" /> <member type="way" id="7" role="inner" /> <member type="way" id="8" role="inner" /> <member type="way" id="9" role="inner" /> <member type="way" id="10" role="inner" /> <member type="way" id="11" role="inner" /> <member type="way" id="12" role="outer" /> <member type="way" id="13" role="outer" /> <member type="way" id="14" role="outer" /> <member type="way" id="15" role="outer" /> <member type="way" id="16" role="inner" /> <member type="way" id="17" role="inner" /> <member type="way" id="18" role="inner" /> <member type="way" id="19" role="inner" /> <member type="way" id="20" role="outer" /> </relation> |
Wyspa w otworze
Korzystając z możliwości posiadania wielu pierścieni zewnętrznych w jednej relacji, wynika również, że można łatwo modelować "wyspy" w otworze:
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="inner" /> <member type="way" id="3" role="outer" /> </relation> Taki szkic jak ten, wymagał wcześniej różnych relacji "multipolygon", jeden z "linią 1" jako zewnętrzną i "linią 2" jako wewnętrzną, a także jedną z "linią 2" jest zewnętrzną i "linią 3" jako wewnętrzną. Takie kaskadowe ujęcie jest nadal potrzebne, gdy "wyspa" jest w środku czegoś innego niż obszar na zewnątrz, ale gdzie "wyspa" jest tym samym środowiskiem który może być otworem w otworze. |
Stykające się pierścienie wewnętrzne
Stykające się pierścienie dowolnego rodzaju powinny być wyrysowane linią zamkniętą (closed ways), jeśli w ogóle, w przeciwnym wypadku są bardzo trudne do obróbki przez innych użytkowników. Tak więc linia #2 i linia #3 powiinny być liniami zamkniętymi. Jeśli to możliwe, najlepiej jest połączyć je w jedną linię łamaną, jeśli reprezentują one tę samą funkcję.
Niektórzy mapujący używają bieżącej relacji "multipolygon" do łączenia stykających się pierścieni wewnętrznych:
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="inner" /> <member type="way" id="3" role="inner" /> </relation> Wdrażanie zaawansowanych wielokątów powinno próbować uczynić je tak, jakby stykające się pierścienie były rzeczywiście jednym pierścieniem. To jest jedyny przypadek, w którym wykorzystanie w OpenStreetMap odbiega od standardowych OGC Simple Features. W Simple Features, stykające się pierścienie wewnętrzne nie są obsługiwane, ponieważ są one zbędne (po co dwa pierścienie wewnętrzne kiedy można je połączyć w jeden). Unikajmy "building multipolygon", w którym wewnętrzny pierścień dotyka zewnętrznego pierścienia. |
Przykłady jak nie należy postępować
Przykłady nieprawidłowych relacji "multipolygon" do zilustrowania jak nie powinno się postępować z tego typu relacją.
Niezamknięte wielokąty
To jest przykład niepoprawnego wielokąta kiedy "linia #2" i "linia #3" nie są połączone. |
Nakładające się na siebie, niezamknięte odcinki należące do tej samej roli
To jest przykład' niepoprawnego wielokąta kiedy punkty końcowe "linii #2" i "linii #3" mają wspólne więcej niż dwie linie.
|
Więcej przykładów
- Więcej przykładów poprawnych wielokątów jest dostępnych na stronie Multipolygon_Examples.
- Propozycja przykładów prawidłowych i nieprawidłowych nietypowych konfiguracji
Oznaczanie
- Wszystkie tagi, które opisują dany obszar, powinny być przypisane do relacji, a nie do linii, tj. linie będące członami relacji wielokąta złożonego nie powinny posiadać znaczników.
- Wyświetlanie i zgodność:
- Styl wyświetlania relacji jest oparty na znacznikach w niej zawartych.
- W przypadku relacji bez tagów, linie w niej zawarte są wyświetlane w stylu zwykłej linii bez znaczników.
- W przypadku innego tagu linii z rolą inner, linia ta będzie się wyświetlać zgodnie z jej tagiem a nie tagiem głównej relacji.
Renderowanie
- JOSM jest w stanie wyświetlać zaawansowane wielokąty złożone od poprawki 1203
- Osmarender (T@H) obsługuje zaawansowane wielokąty złożone.
- Konfiguracja renderowania mapnik na www.openstreetmap.org nie wspiera w pełni zaawansowanych wielokątów złożonych (do zweryfikowania?)
- W pełni wspierane przez mkgmap od poprawki 1497
- [GpsMid] wspiera większą część z zaawansowanych fukcji wielokątów złożonych.
- Istnieje sugerowany algorytm do obsługiwania wielokątów złożonych
Style mapowania, najlepsze sposoby
Wielokąty złożone otwierają możliwość tworzenia identycznych geometrycznie obiektów w różnych stylach: jako linie lub jako wielokąty złożone, używając zamkniętych lub otwartych linii, bądź też współdzielone i nie współdzielone linie.
W związku z tym powstaje pytanie, który styl należy stosować. Pewne style mają zalety, których inne style nie mają i powinny być uznane za dobrą praktykę. Dla innych, wybór jest kwestią osobistych preferencji i kwestią czy użytkownik jest doświadczony czy nie.
W przypadku, gdy duże obszary współdzielą te same znaczniki, można to przedstawić w postaci albo dużej liczby małych wielokątów złożonych/zamkniętych linii albo poprzez małą liczbę dużych wielokątów złożonych. Dla samych wielokątów złożonych istnieją dwie metody mapowania:
- Metoda A
- Wewnętrzne i zewnętrzne pierścienie tworzone są z linii zamkniętych o ile to możliwe, z wyjątkiem gdy te linie stają się bardzo duże (rzędu 2000 węzłów). Linie nie są zwykle wspólne dla różnych wielokątów
- Metoda B
- Każdy granica między dwoma wielokątami jest reprezentowana przez unikalną linię która jest następnie wspólna dla sąsiadujących wielokątów. W związku z tym pierścienie często składają się z kilku osobnych odcinków
Kwestia dobrych praktyk dla wielokątów złożonych była intensywnie omawiana w ostatnich latach, zobacz Talk:Relation:multipolygon i na forach. Konsensus dotychczas nie został osiągnięty, ale z dyskusji wyniknęły następujące wnioski:
- Mapowanie prostych zamkniętych obszarów jako wielokątów złożonych zwiększa liczbę obiektów w bazie danych i zwiększa czas renderowania. Powinna się unikać zbyt dużego stopnia skomplikowania danych.
- Współdzielenie części linii pomiędzy wielokątami złożonymi (metoda B) oferuje unikanie zbędnego przedstawiania nakładających się na siebie linii.
- Wielokąty złożone składające się z niezamkniętych linii (metoda B) są cięższe w edycji dla niedoświadczonych użytkowników i prostych edytorów jak Potlach 2. To często prowadzi do nieświadomego zniszczenia takich wielokątów złożonych przez niczego nie podejrzewających użytkowników.
- Wielu doświadczonych użytkowników wyraziło swój dyskomfort co do metody B, szczególnie w przypadku, gdy wielokąty złożone są bardzo duże.
- Ogromne wielokąty złożone powodują spowolnienie procesu renderowania.
- Edytowanie skomplikowanych geometrii w JOSM jest łatwiejsze, szybsze i powodujące mniejszą liczbę błędów w przypadku użycia metody A. Związane to jest z tym, że metoda B wymaga kasowania, tworzenia i wstawiania wielu segmentów do odpowiednich relacji wielokątów złożonych.
Dotychczas nie ma oficjalnych zakazów w jaki sposób używać wielokątów złożonych dopóki są one geometrycznie poprawne. Jednakże wprowadzenie rozsądnego stylu mapowania może pomóc utrzymanie czystości bazy danych i utrzymanie łatwego mapowania dla każdego użytkownika.
Jednakże POWINNO SIĘ stosować tylko metodę A, ponieważ wady metody B przewyższają jej zalety. Dlatego stosowanie metody B jest niezalecane.
Krótki poradnik tworzenia prostej relacji w JOSM
Historyczne funkcje dziś niestosowane
multipolygon miał zastosowanie głównie w Niemczech, zamiast type=boundary
dla relacji granic. Metoda ta nie była powszechnie zaakceptowana i dziś nie jest już stosowana.
Oprócz ról outer i inner istniały także "puste" role oraz rola enclave i exclave. Obecnie nie są one stosowane.
Zobacz też
- Relation Check
- OSM Inspector has support for multipolygon checks
- The Future of Areas niektóre dyskusja na temat poprawienia użycia obszarów w OSM.
multipolygon
- Multipolygon Examples – przykłady