Strona Wiki: Generalizacja obiektów.

Myślałem ostatnio o wojnie edycyjnej w Nepalu i faktycznie powodem jest brak ścisłej definicji jak generalizować mapę.
Dlatego zrobiłem mały początek:
https://wiki.openstreetmap.org/wiki/Generalization

Prosił bym Was o dodawanie kolejnych elementów tudzież poprawki językowe.
Jestem zdania, że wektor opisujący drogę powinien co najmniej nie opuszczać powierzchni drogi.

Mam poważną wątpliwość czy generalizowanie mapy powinno odbywać się na danych w bazie osm.
Jak wiadomo z tych danych powstają mapy w wielu różnych skalach i technologiach i z całą pewnością nie da się wykonać dobrej generalizacji sprawdzającej się w każdej skali. A już z całą pewnością nie zrobi tego dobrze żaden automat.

Moim zdaniem dane w bazie powinny znajdować się dane jak najwierniej odwzorowujące rzeczywistość, a generalizacji powinno dokonywać oprogramowanie które przygotowuje mapy do wyświetlenia (niezależnie czy w formie rastrowej czy wektorowej).
Zaś podstawowej generalizacji powinien dokonywać maper decydując jak dużą ilością nodów odwzorować obiekt z wystarczającą dokładnością. Szczególną sytuacją jest zasada odwzorowywania prostego odcinka drogi za pomocą jednej prostej (dwóch punktów).

Obawiam się że jeśli generalizacja (podejrzewam że automatyczna) będzie zmieniała dane na zasadzie że “wektor opisujący drogę powinien co najmniej nie opuszczać powierzchni drogi”, to maperzy będą te generalizacje poprawiać i wywołamy tylko kolejne wojny edycyjne.

Z Twoimi uwagam zgadzam się całkowicie. Tu nie chodzi o automat który miałby coś poprawiać:

Wiesz, mi chodzi głównie o to, jaka powinna być minimalna dopuszczalna jakość, tj. postawienie bariery na zbyt niedokładne mapowanie.
Na przykład: http://www.openstreetmap.org/node/765144016#map=19/27.95371/83.70922 taka sytuacja jak na tej drodze powinna być niedopuszczalna.

To jest dobry temat. W Poznaniu notorycznie mam problem ze zbyt dokładnie zmapowanymi zaokrągleniami. Mam tu na myśli np. wysepkę drogową zakończoną zaogrągleniem o średnicy 1,5 m, które wyrysowane jest kilkunastoma punktami, albo np. zaokrąglony chodnik na rogu ulicy, wyrysowany kilkudziesięcioma punktami. Teoretycznie to dobrze. W praktyce - widzę same wady takiej dokładności:
-na mapie nie widać różnicy między zaokrągleniami z rozsądną ilością punktów (~5 w pierwszym przykładzie, 5-10 w drugim), a taką hiperdokładną
-część osób zniechęca to do mapowania, bo oznacza to sklejanie każdego punktu jeśli dorysowuje się sąsiadujący obszar (np. area:highway i trawnik obok)
-część osób zastając coś takiego mapuje, ale niechlujnie, bo nie skleja ze sobą sąsiadujących obszarów (teraz to tylko kwestia estetyki, ale kiedy w przyszłości pojawią się routingi po obszarach, to to się zemści, bo każda taka dziura między obszarami będzie dla oprogramowania niewiadomą)
Dlatego też kiedy zastaję przesadną dokładność, zmniejszam ilość punktów, tak żeby kolejne osoby które będą chciały coś przesunąć lub dokleić nie czuły się zniechęcone.

““Bad” has the same distance between nodes and wasted map:”

(a) “wasted map” chyba nie ma sensu po angielsku
(b) równy odstęp pomiędzy punktami sam w sobie nie jest problemem

czyli szukamy złotego środka :slight_smile:

zbyt dokładnie wrysowany jest na przykładten obiekt, choć on akurat pochodzi z importu:
http://www.openstreetmap.org/way/201898207
361 punktów, a w terenie ruina bez większego znaczenia. Takie na pewno można generalizować bez straty dla mapy.

To zależy. Miałem przypadki odealnie prostej drogi, gdzie ktoś rysował co 3 metry punkt. Zazwyczaj to się dzieje gdy ktoś mapuje na dużym stopniu zoomu i przesuwa sobie podkład co chwilę.
O ile jestem za bardzo dokładnym, ale bez przesady, mapowaniem o tyle akurat tutaj jest to zbędne. Każdy dodatkowy węzeł oznacza dodatkowy punkt do liczenia przez algorytm np. wyznaczania trasy. Nie jest to jakaś zbrodnia przy obecnych mocach obliczeniowych, ale wprowadziło by to jakąś czystość na mapie.

Racja. Sam, gdy jeszcze nie miałem narzędzi do rysowania granic, rysowałem linie ręcznie na dużym powiększeniu.
Oczywiście punkty na granicy były bardzo blisko siebie. Co widać na granicach w południowej części Polski.
Później, mając podkłady, ustawiłem w JOSM dokładność rysowania linii i było już lepiej. Może kiedyś ktoś to automatem skoryguje.

Chociaż, przy dużym skupisku różnych obiektów i linii granicy przebiegającej miedzy nimi, lub granicy w szczerym polu, dokładność powinna być zmienna.
I wtedy, co? Ręcznie dodawać/odejmować punkty? :slight_smile:

Tak jest. To zależy od promienia okręgu na którym leży krzywa.

Dołożyłem podrozdział practical examples w https://wiki.openstreetmap.org/wiki/Generalization

@Marek
Jak dodajesz jakiś nowy artykuł do Wiki, to pamiętaj dodać kategorię grupy do której chcesz aby przynależał i {{Languages}}.
W przeciwnym razie artykuł “tonie” i zostaje potraktowany jako bezwartościowy.

Uuu, nie umiem tego :slight_smile:
Dodasz proszę odpowiednią kategorię?
Z góry dziękuję!
Marek

Dodałem. Zobacz jak to zrobiłem. :slight_smile:

Fajnie, podoba mi się. Dziękuję Władku.

Dobrze by było dołączyć tam przykłady które mają zdecydowanie za dużo lub za mało nodów.

Ta dyskusja chyba nie jest o generalizacji mapy ale o precyzji rysowania. Generalizacja jest szerszym pojęciem, np. zastąpienie ronda przez punkt czy 2 nitek autostrady przez jedną linię, to jest problem generalizacji.

Nie wiem, czy jest jakaś ogólna sugestia, jaka powinna być precyzja danych OSM. Czy to ma być np. 1m czy może 1cm? Dysponując taką wartością, można użyć typowych algorytmów upraszczania krzywych, które usną nadmiarowe punkty, gwarantując, że żaden segment krzywej nie będzie dalej od usuwanych punktów niż zadana wartość precyzji rysowania.

JOSM zawiera funkcję upraszczania linii. Z tego co widzę, upraszczanie stosuje precyzję 3m. To by była wartość odpowiadająca możliwościom GPS, być może niezbyt atrakcyjna dla mikromapowania. Tak czy inaczej powinna istnieć określona wartość precyzji rysowania, rekomendowana dla wszystkich edytorów. Lub może kilka rekomendowanych precyzji, zależnie od typu obiektu.