Adresacja

Z UMP

Wersja z dnia 12:27, 18 mar 2017; Ts (Dyskusja | wkład)
(różn) ← Poprzednia wersja | Aktualna wersja (różn) | Następna wersja → (różn)

Spis treści

Po co?

Odpowiedź jest dość prosta – adresacja jest po to, aby w urządzeniu można było podać Piłsudskiego 13, i dojechać na tę ulicę właśnie pod ten numer.

Konsekwencją tego jest sposób wyboru celu podróży podczas podawania adresu -- po podaniu nazwy ulicy odbiornik GPS pokaże adresy, jakie zna na tej ulicy (jako alternatywę do numeru, który można i tak wpisać samemu, niżej będzie napisane dlaczego ma prawo go zlokalizować mimo iż nie jest na liście znanych). Warunkiem jest istnienie numeracji na wszystkich jej częściach.

Jeśli ulica nie ma numeracji, ale składa się z kilku części (polyline), mamy dość kłopotliwą sytuację gdy odbiornik daje nam możliwość wyboru między Piłsudskiego, Piłsudskiego a Piłsudskiego, tyle że bez żadnej dodatkowej informacji. Użytkownik wybiera więc "w ciemno" miejsce, do którego jedzie.

Podstawy

Niniejszy opis dotyczy wprowadzania numerów za pomocą programu MapEdit++. ME++ zmienia to następnie na format pliku mapy, czyli linie które możemy zobaczyć później obok definicji polyline naszej ulicy.

Do wprowadzania numerów przydatne będzie włączenie opcji Show Numbers along Roads w menu View programu ME++. Samych zmian dokonuje się w trybie edycji węzłów (Edit nodes, czyli M), przez wybranie właściwości węzła (prawy przycisk myszki nad danym węzłem, Node Properties), zakładka Numbers.

Uwaga: numery ulicy to własność odcinka danej ulicy. Nie są definiowane jak POI przez jakiś punkt, ale przez zakres zdefiniowany dla danego odcinka. Zakres ten definiowany jest z kolei w węzłach, z podziałem na prawą i lewą stronę (idąc od początku polyline).

Nazwa ulicy przypisana jest do konkretnej miejscowości atrybutem Miasto=. Zwykle nie musimy go dodawać, jeśli w jej atrybutach w polu Extras zdefiniowany jest plik zaweiarający w nazwie człon "ulice.txt", np. Plik=src\JAKIESMIASTO.ulice.txt. Atrybut ten podany jest wtedy na początku tego pliku i podczas kompilacji mapy przypisywany jest wszystkim zawartym w niej ulicom (polyline). Jeśli to my stworzyliśmy plik MOJEMIASTO.ulice.txt, należy pamiętać o dodaniu tego atrybutu na początku pliku.

Wyjątkiem są pliki typu inne.ulice.txt, gdzie każda ulica powinna mieć własny atrybut Miasto=.

Zaczynamy

Prosta numeracja

Dla przykładu: mamy piękną, prostą ulicę, która jest numerowana idealnie, tzn. z jednej strony są numery od 1 do 31 (wszystkie budynki na równych działkach), a z drugiej od 4 do 14, co prawda mniej numerów bo działki szersze, ale jednak wciąż wszystkie równe. Oznacza to, co dla nas ważne, że zmiana numeru następuje co N metrów, i jest to wartość stała dla całej ulicy.

Załóżmy, że ulicę narysowaliśmy chwilkę wcześniej od lewej do prawej, numery nieparzyste są na dole, a parzyste u góry, i rosną w prawo.

Ponieważ jest to prosta ulica bez skrzyżowań (poza wjazdem i wyjazdem z niej), jest to jeden odcinek prostej, a więc posiada ona jedynie dwa węzły. Aby określić, który z nich jest początkiem ulicy (w sensie mapy, ważna jest bowiem kolejność węzłów tej polyline, którą numerujemy, niezależnie od tego czy geograficznie jest to początek, środek czy koniec ulicy), patrzymy na kolory węzłów – ME++ oznacza pierwszy węzeł zaznaczonej polyline na różowo (w trybie edycji węzłów, oczywiście). Gdyby jakaś wersja ME++ tego nie robiła, można kliknąć prawym przyciskiem na polyline, wybrać "Nodes...", i zobaczyć które współrzędne są pierwsze od góry.

Ulica z węzłami, różowy jest pierwszy.
Ulica z węzłami, różowy jest pierwszy.

Klikamy więc na pierwszym węźle (zaczynać należy od prawym przyciskiem, wybieramy "Node Properties", a następnie zakładkę "Numbers". Wygląda ona tak:

Zakładka Numbers
Zakładka Numbers

Zaznaczamy This node has associated house numbers info.

Mamy teraz możliwość podania numeracji dla lewej i prawej strony ulicy. Dla stworzonej wcześniej ulicy lewą stroną będzie góra (bo zaczynaliśmy od lewej). W Left side numbers, after point wybieramy więc Even (parzyste), a jako Start wpisujemy 4. Podajemy w ten sposób, że w tym węźle rozpoczyna się odcinek, na którym po lewej stronie mamy parzystą numerację, a pierwszy budynek ma numer 4 (nie ma znaczenia w tej chwili, gdzie i czy w ogóle jest numer 2).

W Right side numbers, after point wybieramy Odd (nieparzyste), wpisujemy jako Start 1'.

Jak widać, nie podajemy tu zakresu ani ostatniego numeru. Opisujemy pierwszy węzeł odcinka, i numery, jak opisane jest nad polami, after point, czyli za tym punktem (węzłem). Nie jest to więc cała praca – trzeba jeszcze zdefiniować koniec zakresu. Robi się to na drugim węźle odcinka, w naszym przypadku na ostatnim (na razie) węźle ulicy:

Na tym węźle po zaznaczeniu znów This node has associated house numbers info nie możemy podać jak poprzednio początku zakresu, aktywują się jedynie okienka Left/Right side number, before point. W tym miejscu podajemy więc ostatni numer zakresu. Będzie to w naszym przypadku 14 dla lewej strony i 31 dla prawej.

Uwaga: jeśli zdarzy nam się zapomnieć ustawienia końca zakresu dla jakiegoś odcinka, i zostanie tam domyślne 0, skutek będzie zapewne mało oczekiwany, tzn. ME++ potraktuje to 0 jako koniec zakresu, i będziemy tam mieli wszystkie numery pośrednie. Tu początkiem było 1, ale gdyby było to np. 13, będzie nieco gorzej.

Wnioski z prostej numeracji

W ME++ ulica powinna w tym momencie wyglądać tak:

Jak widać, ME++ narysował nam numerację ulicy, przy czym na niebiesko zaznaczył punkty zdefiniowane przy danych węzłach, a na czerwono punkty wyliczone.

Jeśli teraz podamy w wyszukiwaniu Piłsudskiego, urządzenie wyświetli nam w "podpowiedzi" Piłsudskiego 1, 4, 14 i 31, wpisanie jednak numeru "17" spowoduje skierowanie nas do punktu w okolicy czerwonej siedemnastki w ME++.

Prosta numeracja cz. 2

A teraz załóżmy, że numery od 16 do 22 są przy jednej ze stron przecznicy od naszej ulicy, idącej "w górę", ale gdzieś ze środka aktualnego odcinka. Przecznica jest gruntówką, rysujemy ją więc jako "Unpaved road". W tym celu w ciągu ulicy musimy stworzyć nowy węzeł w ciągu ulicy, i pociągnąć od niego nowy odcinek.

Ważne jest, aby nazywał się tak samo, z oczywistych względów: adresacja przypisana jest do nazwy polyline.

Jak widać na załączonym obrazku, dodanie nowego węzła nie zburzyło dotychczasowej numeracji:

Dzieje się tak, ponieważ nowy węzeł (starego odcinka) nie ma włączonej informacji o numerach (brak zaznaczenia This node has associated house numbers info). Jest to wygodne ze względu na równą numerację ulicy, i dość logiczne, ale niestety nie możemy tego tak zostawić. Zdarza się bowiem że na etapie kompilacji jest to błędnie interpretowane, i numery danej ulicy są później przeliczane nieprawidłowo. Dodajemy więc definicje before i after dla punktu pośredniego:

I pamiętamy, że zakresy definiujemy zawsze na dwóch sąsiadujących węzłach. Nie zostawiamy węzłów "pośrednich" (do czasu usunięcia problemów przy kompilacji). W tym miejscu muszę dodać że chodzi o miejsce styku 2 lub więcej odcinków drogi (skrzyżowania), droga może mieć węzły bez styku innych dróg (poprawa odwzorowania drogi) i w tych miejscach nie trzeba definiować numeracji.

UWAGA: Wstawienie nowego węzła wraz z numerację można zrobić też szybciej w następujący sposób:
  • wstawić nowy węzeł Insert Node Here
  • podzielić drogę na dwie części Split Polyline
  • połączyć znowu obie części w jedną całość Merge Polylines
W Mapedit++ ostatnie 2 kroki można zastąpić jednym, wybierając opcję Split Numbering.
Numery domów dla wstawionego węzła zostaną wyliczone proporcjonalnie do długości drogi po obu jego stronach.


Teraz trzeba podać numerację dla nowego odcinka. Ponieważ był rysowany od dołu, a hipotetyczne budynki są po jego prawej stronie, konfiguracja węzłów wyglądała będzie tak:


A uliczka wyglądała będzie tak:

Prosta numeracja cz. 3

Mamy więc dwa kawałki Piłsudskiego, okazuje się jednak że z biegiem lat wybetonowali idącą dalej ścieżkę, bo zaczęli się przy niej budować ludzie. Z jednej strony jest skarpa, więc nie ma tam ani domów ani nawet krzaków, nie było więc sensu dawać tam numeracji – numery poleciały już kolejno z jednej strony.

Dorysowana droga:

Jak widać, tym razem wykorzystany został tryb Both, czyli adresacja ciągła (parzyste i nieparzyste).


Problem: inny kierunek ulicy

Jeżeli odcinek został narysowany w odwrotnym kierunku, niż idzie numeracja, wyjścia są dwa.

Jeśli ulica nie jest jednokierunkowa, można sobie dla wygody polyline odwrócić: prawy przycisk na polyline (ale nie na węźle), i Reverse Polyline.

Ale można też (albo trzeba, gdy ulica jest jednokierunkowa w "odwrotną" stronę) po prostu podać jako początek zakresu np. 12, a jako koniec 2 – numeracja może także być malejąca.


Problem: nierówne rozłożenie budynków

Okazuje się jednak, że nie jest tak różowo – na nowym odcinku numery wcale nie są rozłożone równomiernie, na początku jest gęściej, potem dość rzadko.

Musimy więc zmodyfikować numerację. Robimy to wyznaczając węzeł lub węzły pośrednie, tak aby z jednej strony odwzorować rozłożenie numeracji, a z drugiej – nie przesadzić. Nawigacja ma pomóc w trafieniu do budynku samochodem, rowerem lub na piechotę, a nie rakietą ziemia-ziemia. Błąd rzędu 10 czy 20 metrów nie ma większego znaczenia, szczególnie gdy właściwy budynek jest w zasięgu wzroku (weź pod uwagę że 100m to ~2 min pieszo). Ważne jest, aby "gość" trafił w miejsce, w którym nie będzie już dylematów "gdzie skręcić" albo czy to ta dzielnica ;)

Przykład wstawienia dodatkowego węzła poniżej. Należy zauważyć, że dla węzła pośredniego danego odcinka definiujemy zarówno numery poprzedzające (before), jak i następujące (after):

Uwaga: przy wstawianiu węzłów pośrednich i włączaniu informacji o numeracji ME++ lubi wrzucić sobie błędne ustawienia domyślne, w tym wypadku po stronie lewej proponował mi Both, a po prawej None, trzeba więc za każdym razem sprawdzić czy ustawienia są właściwe. Aby sobie ułatwić w tym miejscu można przeciąć polyline (split polyline na węźle Tryb M) a później skleić (Merge Polyline na zaznaczonych 2 odcinkach Tryb S) -- dostaniemy numeracje na niebiesko. Można jeszcze prościej, bo wystarczy "Split numbering", czyli rozciąć numerację bez rozcinania linii (obecne w ME++/ME2).

Jeszcze raz: Nie należy przesadzać z dokładnością, jeżeli jest to krótka ulica to bardzo dokładna lokalizacja numerów na drodze zajmie dużo czasu, który mógłbyś spożytkować do zbierania nowych śladów :), a korzyści będą nikłe dla innych mapowiczów. Jak widzisz nie ma tu definicji krótka ulica, sam ja sobie tworzysz :)

Problem: "obce" budynki

Z zaszłości historycznych wynika jednak, że przy "nowym" kawałku ulicy stoi budynek, którego adres to np. "Ogrodowa 4". Ulica Ogrodowa jest co prawda dalej, ale nie bardzo jest jak dopisać na jej odcinku budynek o numerze 4 – nikt w ten sposób tam nie trafi.

Do zaadresowania go posłużymy się więc ścieżką (walkway/trail), której najważniejszym atrybutem będzie nazwa, tj. "Ogrodowa". Ważne, aby ścieżka ta dołączona była do sieci ulic, aby dało się wyliczyć trasę na tej podstawie, wystarczy jednak że będzie to krótki kawałek przy budynku (lub budynkach), które chcemy opisać:


Jak widać, początek i koniec zakresu to "4". W ten sposób opisujemy pojedynczy budynek.

Uwaga: W żadnym wypadku NIE NALEŻY nakładać na ulicę A drugiej kreski "ulica B" po to, żeby dowiązać do niej numer domu stojącego na rogu dwóch ulic "bo dom ma adres ulica B 17 a wejście od ulicy A". Numer domu przypisujemy do właściwej ulicy i w 99% przypadków nie przeszkodzi to trafić, a wejście za rogiem każdy znajdzie. W pozostałym 1% należy dorysować chodniczek, niepokrywający się z żadną z ulic.

Problem: jeszcze bardziej nierówne rozłożenie budynków, pomieszana numeracja

W praktyce numeracji ulic niestety dość często nie da się w pełni zrealizować z zastosowaniem zakresów. Pojedyncze numery, lub ich większą liczbę, trzeba wskazać "ręcznie". Robimy to korzystając z opisanego powyżej sposobu opisania pojedynczego budynku jednym odcinkiem polyline. Może się nam więc zdarzyć, że będziemy mieli kolejne węzły zdefiniowane na przykład tak:



Czyli numerujemy częściowo zakresami, częściowo odcinkami nieopisanymi, częściowo odcinkami opisującymi pojedynczy numer.

Uwaga: jak widać, jeden numer można "rozciągnąć" na dwa odcinki, podając after = 11, na następnym before = 11, after = 11, i na kolejnym znów before = 11.

Z przypadkiem całkowitego pomieszania numerów mamy najczęściej do czynienia na wsiach lub w małych miejscowościach, gdzie numery są porozrzucane zgodnie z kolejnością budowania domów (podobno tak samo jest w Austrii). Tu przykład z Jaworza [[[1]]], (49.80292,18.92272).

Numery są losowo rozrzucone bez podziału na stronę parzystą/nieparzystą - ich wartości skaczą jak pchły na psie. Autor mógł wybrać jedną z dwóch możliwości:

  • tak jak zrobił
  • dorobić ścieżki prowadzące do każdego budynku - wtedy musiałby prawdopodobnie stawiać bojki oznaczające koniec drogi, czyli więcej obiektów, więcej klikania.

Niestety wyskoczył błąd zgłaszany na listę:

-------- Błąd zbyt wielu skrzyżowań (numeracja nie działa)
Label=cisowa
Data0=(49.80531,18.92181),(49.80483,18.92198),(49.80465,18.92205),

Kompilator zgłasza błąd, że ulica z numeracją ma zbyt wiele skrzyżowań - dosłownie to co jest napisane w komunikacie. Cała ulica Cisowa wygląda tak:

Ulica została podzielona mniej więcej w połowie liczby węzłów z numeracją i wygląda tak:

Fragment nie zaznaczony w trybie edycji węzłów nadal ma węzły, ale chciałem pokazać gdzie nastąpił podział. --Micra 10:52, 16 mar 2014 (UTC)

Problem: adresacja 2a, 2b, 2c, 2d etc.

Niestety, nie ma supportu dla "podnumerów". W numeracji możemy podawać jedynie liczby. Aby spróbować jakoś to rozwiązać mamy dwa wyjścia: oznaczyć mniej więcej miejsce występowania 2a, 2b itd. zbiorczo jako "2" (w jednym miejscu ulicy), albo wskazywać każdy budynek jako "2" przy innych, nie sąsiadujących ze sobą odcinkach ulicy. (Takie rozwiązanie nie jest polecane z innych względów).

Nie sąsiadowanie jest o tyle ważne, że jeśli na jednym węźle before będzie równe 2, i after też 2, zostanie to potraktowane jako ciągłość (patrz wyżej). Jeśli natomiast będą to dwa osobne odcinki, przy zapytaniu nawigacji o ulicę Asnyka numer "2" (nie można i tak podać "a", "b" etc) użytkownik dostanie do wyboru dwie lokalizacje "Asnyka 2", analogicznie jak przy nienumerowanej ulicy składającej się z dwóch polyline dostaje do wyboru dwie ulice "Asnyka". Żadnej dodatkowej informacji poza "Asnyka 2" niestety miał nie będzie. Nadawanie tego samego numeru na odcinkach nie sąsiadujących ze sobą ma trzy podstawowe wady -- 1. w Garminach widzimy dwa takie same numery i nie pozostaje nic innego, jak tylko zalosować, 2. w niegarminowych kaompilacjach urządzenia mobilne potrafią taki podwójny adres uśrednić (prowadząc do geometrycznego środka pomiędzy nimi), co może się okazać jeszcze gorszym wyjściem, szczególnie gdy odległość między np. 2 a 2a jest duża, 3. psuje nam to możliwość sprawdzania/wyszukiwania duplikatów adresów.

Trzecim wyjściem, zapewniającym lepsze doprowadzenie do niektórych miejsc, jest oczywiście postawienie POI, czyli założenie że użytkownik będzie szukał sklepu najpierw przez POI, a dopiero potem po adresie. Oczywiście nie jest to de facto żadne rozwiązanie problemu, ale coś, o czym warto pamiętać jeśli kwestia nie dotyczy tylko budynków mieszkalnych. Np. jeśli budynek mieszkalny ma numer "2", a odległy od niego sklep numer "2a", można według mnie spokojnie skierować numer "2" na budynek, a przy sklepie postawić POI właściwy dla typu sklepu.

No i wreszcie czwartym rozwiązaniem które można zastosować, jest odpowiednie nazwanie ulicy. Jeśli na przykład na danej ulicy są tylko numery z literkami, można nazwać ulice w taki sposób aby od razu było wiadomo jakie tam są numerki np: Skłodowskiej-Curie {157b-157e}. Gdy odnajdziemy taka ulice w spisie od razu będzie jasne co to jest. Przykłady takiego numerowania można znaleźć w Skierniewicach (N51.98357 E20.16519), czy w Tomaszowie Mazowieckim (N51.52095 E20.02276). Takie coś można jednak zastosować tylko i wyłącznie na drogach dojazdowych, główne ulice nie powinny być w ten sposób numerowane.

TxF, 2008.07

Problem: Ulice będące granicą miejscowości

Zdarza się, że po jednej stronie drogi jest inne miasto niż po drugiej.

Sposoby:

  1. Dodać w zakładce Extras wpis
    Miasto=Miejscowość1@Miejscowość2[@Miejscowość3]
    Wadą tego rozwiązania jest to, że adresy po obu stronach drogi będą się wyszukiwać w obu miejscowościach.
    Przykłady: Grunwaldzka pomiędzy Pruszkowem i Piastowem, Klamrowa pomiędzy Warszawą (Targówkiem) a Ząbkami.
  2. Zrobić dwie nałożone ulice, z odpowiednimi nazwami (jeśli są różne dla obu stron ulicy) i numeracją, i umieszczone w odpowiednich plikach z ulicami miast.
    Wadą jest mała 'elegancja' i ograniczenie do 60 węzłów nałożonych ulic. Zaleta: można stosować do ulic o różnych długościach.
  3. Ręcznie (edytorem tekstowym) edytując linie opisujące numery.
    Zamiast standardowego opisu numeracji
Numbers1=0,O,1,3,E,2,4
Numbers2=1,O,5,7,E,6,8

należy wpisać

Numbers1=0,O,1,3,E,2,4,05-500,05-500,Julianów,Mazowieckie,PL,Józefosław,Mazowieckie,PL,
Numbers2=1,O,5,7,E,6,8,05-500,05-500,Julianów,Mazowieckie,PL,Józefosław,Mazowieckie,PL,
Nowe pola zawierają odpowiednio
kod pocztowy po lewej stronie drogi
kod pocztowy po prawej stronie drogi
miasto po lewej stronie drogi
region po lewej stronie drogi
państwo po lewej stronie drogi
miasto po prawej stronie drogi
region po prawej stronie drogi
państwo po prawej stronie drogi
Wadą jest pojawienie się takich kodów, regionów i krajów na sztywno w indeksach. Nie można stosować teoretycznego "-1" bo to nie działa tak jak mówi teoria.

Testowanie – szukanie błędów numeracji

Samodzielne sprawdzanie numeracji

Ergonomia wprowadzania numeracji w mapedicie pozostawia niestety wiele do życzenia, a efektem tego jest mnogość popełnianych podczas edycji błędów. Najczęstsze, to źle zdefiniowana parzystość (czyli np. zadeklarowanie początku numerów nieparzystych i ustawienie na odcinku numerów od 2 do 10, albo od 2 do 9). Spora ich część daje się znaleźć w wyniku prostej analizy plików źródłowych. W katalogu narzędziowym znajdują się odpowiednie skrypty, które mogą to zadanie ułatwić.

Są to:

 check_num.awk – skrypt w awku sprawdzający numerację
 check_num     – skrypt w shellu wywołujący awka z odpowiednimi parametrami dla pracujących pod uniksem
 check_num.bat – odpowiedni bat dla pracujących w systemie Windows.

Dodatkowo w uniksowym Makefile.common znajdują się 2 cele służące do testowania numeracji:

  • make number – testuje bieżący plik wynik.mp pod kątem podstawowych błędów numeracji. Nie znajdzie brakującej numeracji w węzłach routingu, ale nie wymaga netgena i działa szybciej :). Plik musi być zmontowany w katalogu bieżącym, czyli "make number" możemy wywołać po edycji, przed rozmontowaniem. Jeśli dopiero zaczynamy edycję, to "make mont number".
  • make numbers – korzysta dodatkowo z netgena (tworząc pośredni plik wynik.mr z danymi routingowymi) i szuka także błędów typu brak węzłów pośrednich i końcowych.

W razie wykrycia jakichkolwiek błędów informacje raportowane są na wyjściu, a dodatkowo w bieżącym katalogu tworzony jest plik wynik-x.wpt zawierający waypointy wskazujące miejsca błędów (błąd jest zawsze na odcinku rozpoczynającym się we wskazanym miejscu, a więc w mapedicie jest to bieżący lub następny węzeł). Po wygenerowaniu listy błędów można dodatkowo wykonać "make bm", co spowoduje przerobienie jej na format bookmarków i dzięki temu – łatwiejszą edycję, jeśli błędów takich jest kilka.

Znaczenie nazw punktów jest wyjaśnione poniżej. Pierwsze cztery generowane są zawsze, także w wypadku szybkiego sprawdzania na pliku źródłowym (wynik.mp), pozostałe tylko przy wykorzystaniu netgena.


Etykieta waypointa Znaczenie Co robić?
Par E/1/7 w tym punkcie rozpoczyna się odcinek oznaczony "numeracja parzysta", ale podane liczby "od 1 do 7" są nieparzyste. Analogicznie w odwrotnym przypadku, np. Par O/24/12. Popraw oczywisty błąd, edytując węzeł w mapedicie lub otwierając plik źródłowy w ulubionym edytorze tekstowym (wówczas dla podanych przykładów poszukaj tekstu "E,1,7" czy "O,24,12" i tam zamień literkę E na O lub odwrotnie – w nazwach waypointów dla uproszczenia nie są stosowane przecinki, stąd nieco inna nazwa).

Błędy "Mix" mogą wymagać poprawienia punktu końcowego odcinka, czyli tak naprawdę – edycję kolejnego węzła wzdłuż drogi. Przed zmianą upewnij się, że wiesz jak naprawdę wygląda numeracja ulicy w tym miejscu.

Mix E/2/7 w tym punkcie rozpoczyna się odcinek oznaczony jako parzysty lub nieparzysty, ale podane liczby na początku i końcu mają różną parzystość, co sugeruje jedną z dwóch rzeczy: albo powinien zostać zdefiniowany jako "B" (Both), albo jest to błąd wynikający z zamiany lewej/prawej strony w następnym węźle.
End E/40/-1 w tym lub w następnym punkcie zabrakło definicji, na jakim numerze rozpoczynają się lub kończą adresy przypisane do tego odcinka (-1 w źródłach, mapedit pokazuje tam 0). Analogicznie End O/21/-1, End B/17/-1 itp. Popraw edytując ten (jeśli to było np. E/-1/40) lub kolejny węzeł (jeśli to było np. E/40/-1).

End E/-1/-1 najprawdopodobniej oznacza, że zapomniałeś zakończyć numerację (wystarczy zmienić w zaznaczonym węźle "Even" na "None").

NoLabel Brak etykiety lub etykieta pusta. Jeśli etykieta zawiera wyłącznie numer drogi (np. "~[0x2d]23") lub rzeczy wpisane w nawiasach klamrowych, które nie są indeksowane, to także jest traktowana jak pusta. Dodaj nazwę ulicy (np. "~[0x2d]23 Przykładowa"), albo usuń nawiasy klamrowe
Node n (Nazwa) n-ty punkt drogi jest na odcinku numerowanym pomiędzy dwoma innymi punktami o zdefiniowanej numeracji, ale sam nie ma danych o numeracji, mimo że jest to skrzyżowanie (problem opisany w punkcie #Prosta_numeracja_cz._2). Nazwa to zawartość pola Label=, żeby łatwiej było zidentyfikować, o którą z krzyżujących się dróg chodzi.

W emailach na listę sygnalizujących błędy błąd ten oznaczany jest przez "Missing node at point Numer (Nazwa ulicy)"

Dodaj w tym miejscu numerację. W ME++ zrób w tym miejscu prawy klik i "Split numbering", w zwykłym ME spróbuj metody rozcięcia i ponownego sklejenia (Merge) linii w tym węźle – wyznaczy ona dobrze numerację w tym węźle, jeśli tylko jest ona w miarę równomierna. Jeśli nie, zawsze możesz potem poprawić w edycji węzła na predefiniowanych w ten sposób danych.
eNod n (Nazwa) n-ty punkt drogi znajduje się za ostatnim punktem o zdefiniowanej numeracji, ale domyślnie zostaje ona rozciągnięta do ostatniego węzła, tyle że w tym węźle jest skrzyżowanie. Błąd polega zwykle na tym, że dodatkowy węzeł routingu występuje gdzieś na tym ostatnim odcinku numerowanym, czyli niekoniecznie w ostatnim węźle drogi, ale np. 1-2 punkty wcześniej (ale za ostatnim, w którym została zdefiniowana numeracja).

W emailach na listę sygnalizujących błędy błąd ten oznaczany jest przez "Missing extra node at point Numer (Nazwa ulicy)"

Oznacz w pierwszym takim punkcie koniec numeracji albo dodaj ją w tym i w kolejnych. Jeśli brak numeracji w którymś wcześniejszym punkcie przed ostatnim, dodaj ją tam (ME++: prawy klik i "Split numbering", albo rozetnij i sklej)

Ostatnie dwa rodzaje błędów powstają najczęściej wtedy, kiedy do ulicy z numeracją zostanie dołączona w środku jakaś ulica lub jeszcze częściej – chodnik. Żeby go poprawnie "podłączyć" do istniejącej ulicy, musimy w niej dodać punkt, a co ważniejsze – w tym punkcie podzielić numerację (problem #Prosta_numeracja_cz._2). Wystarczy pamiętać o opcji "Split numbering", albo na moment rozciąć i połączyć ulicę. Jeśli błąd powstał dlatego, że tuż przed ostatnim (albo zaraz za pierwszym) punktem ulicy zostało dodane przecięcie ze ścieżką rowerową lub chodnikiem, najprościej będzie postąpić w ten sposób: (w trybie edycji punktów, czyli "M") -- usuń ten przedostatni (lub drugi) punkt, przesuń ostatni (pierwszy) -- ten z numeracją -- w jego miejsce, po czym tam, skąd go przesunąłeś - naciśnij Insert (zostanie dodany nowy punkt końcowy;początkowy) i przesuń go dokładnie na skrzyżowanie (żeby zadziałało dociąganie -- "Snap to neighbours").

Nawet poprawiając trywialne błędy (Par, Mix) zwracaj uwagę na to, jak wygląda numeracja w węzłach sąsiednich. Najlepiej to widać bezpośrednio w źródłach, ale i w mapedicie. Na przykład jeśli w wyniku "oczywistego" poprawienia wpisu Numbers2=1,O,10,26,E,7,9 na "E,10,26,O,7,9" okazałoby się, że tylko na tym odcinku po lewej jest numeracja parzysta, a po prawej nieparzysta, a na całej reszcie ulicy odwrotnie, to zamiast zmiany literek trzeba było najprawdopodobniej zamienić ze sobą "7,9" z "10,26". align=right

Raporty dostępne na WWW

Raporty dotyczące błędów numeracji generowane są przy okazji kompilacji mapy i wysyłane emailem na listę UMP. Oprócz tego od sierpnia 2012 generowane są raporty szczegółowe wraz załącznikami w postaci plików PLT obrazującymi gdzie występuje numeracja, a gdzie jeszcze jej brak. Od października 2016 raporty te zawierają także informacje o duplikatach adresowych (ten sam adres liniowy zdefiniowany w kilku miejscach) oraz brakach w adresacji liniowej wynikających z porównania z adresami w plikach ADR. Raporty dostępne są pod adresem http://ump.ict.pwr.wroc.pl/ump/testy/numeracja/ i zawierają spakowane ZIP-em raporty dla poszczególnych obszarów UMP. Obecnieraporty generowane są automatycznie co 3h od 9:00 do północy, ale może to ulec zmianie zależnie od częstości ich pobierania.

Raportów tych można używać do:

  • znalezienia duplikatów adresów (w adresach "liniowych")
  • znalezienia braków w adresacji - tam gdzie mamy też pliki ADR (więc można znaleźć, że jakiś adres jest w ADR, ale ciągle go nie ma w liniowych)
  • znalezienia niespójności pomiędzy ADR a nazwami ulic - bo w jednych np. jest Jagiełły, w drugim Władysława Jagiełły, albo inne warianty pisowni lub literówki (z powodów sprawdzania terytowego obecnie większość takich błędów to jednak pliki ADR, a nie .txt)

Żeby wykorzystać w sensowny sposób te pliki raportów trzeba sobie doinstalować trochę ikon bookmarków, które są wykorzystywane - wszystkie znajdują się w bookmarks.zip - można albo selektywnie dodać te, których brak, albo rozpakować cały katalog w odpowiednim miejscu (tam, gdzie mapedit.exe). http://ump.ict.pwr.wroc.pl/ump/testy/numeracja/bookmarks.zip

Jak już mamy dodane i działające bookmarki, ściągamy plik zip dla danego obszaru, po czym montujemy obszar, doklejamy do niego plik z bookmarkami i otwieramy w mapedicie. Nieco dalej zamieszczam legendę, jak interpretować poszczególne typy bookmarków, ale najpierw parę rodzajów błędów jakie widać na mapie - wszystkie na przykładzie UMP-PL-Warszawa, Można wczytać warszawa-adr.zip i oglądać w mapedicie, albo screenshoty na http://ump.ict.pwr.wroc.pl/ump/testy/numeracja/ pliki waw-*.png. Ilustracje występujące poniżej na stronie Wiki zostały nieco przycięte, klikając w link można obejrzeć całość. W ME++ działają EndLevele dla bookmarków, więc na EL=3 są "grube" błędy, jak duplikaty ADR i niespójności nazewnistwa (albo braki ulic), na EL=2 - braki w numeracji i duplikaty, EL=1 i 0 - pomniejsze błędy.

Poszczególne archiwa zawierają:

nx.wpt  - ślepe, niestyki, błędy numeracji itp.                                 
bad.plt - brązowe: gdzie nie ma numeracji,a mogłaby być (nazwane, bez numerów)
new.plt - niebieskie: gdzie jest numeracja
chg.plt - żółte - nienumerowane kawałki na ulicach z numeracją.
old.plt - czerwone: błędy numeracji
bm.tmp  - plik bookmarków zawierający informacje o duplikatach adresów
check-num.stat - statystyka, podsumowanie znalezionych błędów.

Ulice bez nazw i te, które mają ustawiony komentarz ";NoNumbers" nie są uwzględniane w żadnym z powyższych plików PLT, czyli nie będą kolorowane.

Pliki PLT należy wczytać do mapedita jako załączniki -- nazwy "new/old/chg" są takie same jak w plikach załączników generowanych narzędziami pokazującymi różnice w plikach mapy (paczuj, "make diff", pltdiff i inne), więc jeśli mamy podczas montażu standardowo dołączany plik "attach" z listą domyślnych/stałych załączników, to tylko trzeba tam raz dodatkowo dopisać plik "bad.plt".

Pliki bm.tmp w ZIP-ach poszczególnych obszarów zawierają wskazania (potencjalnych) duplikatów adresów, tzn. punkty adresowe występujące więcej niż jeden raz. Nie należy ich traktować na razie jako wyroczni czy coś jest dobrze czy źle, bo mamy ciągle problem z tym, że duplikatem będzie np. nr 91 i 91a, a także ten sam numer, jeśli występuje na początku i końcu 2 stykających się ze sobą ulic, co nie zawsze jest błędem. Dla niektórych obszarów pliki bookmarków są tak duże, że ME/ME++ mają problem z ich wczytaniem do pamięci wraz z mapą. Dlatego już w archiwum taki plik może być podzielony na bm-braki-00.mp, bm-braki-01.mp, itd. Podział jest robiony po rozmiarze, a kolejność wpisów w całości wynika z kolejności przetwarzania plików ADR, więc chociaż miasta powinny tam występować w miarę alfabetycznie (wg nazwy gminy), to może się zdarzyć, że któreś miasto zostanie podzielone pomiędzy dwa pliki. Boookmarki znakuujące duplikaty adresowe zawsze znajdują się na początku raportu, więc trafią do pierwszego pliku w razie podziału (tego z indeksem -00).

Typowe błędy powodujące duplikaty adresowe

Typowe błędy generujące duplikaty to:

  • powtórzenie numeru na narożniku - wystarczy by numer został tylko na jednej ulicy, a nie na obu
  • powtórzenie numeracji bloku po jego dwóch stronach (od ulicy głównej i osiedlowego parkingu)
  • zamiana kolejności w węźle (początek z końcem, czyli np. 1-11,9-15 zamiast 1-9,11-15)
  • pomyłki edytorskie, np. 38 zamiast 28 albo 115 zamiast 15. Pomaga zmontowanie mapy wraz z danymi ADR, by sprawdzić jak powinno być naprawdę.
  • niewłaściwie nazwana ulica - szczególnie na osiedlach, ale nie tylko. A przez to numery przypisane są do niewłaściwej ulicy i kolidują z tymi samymi numerami, które gdzieś indziej występują w prawidłowym miejscu.
  • powtórzenie numeracji dla wariantu z literką - np. 17 i 17a. Tu nie ma prostej recepty na poprawę, ale też występuje kilka typowych przypadków:
    • Jeśli numeracja rozszerzona (17a) jest tuż obok "zwykłej", można z niej bez szwanku zrezygnować, licząc na to, że jak ktoś znajdzie nr 17, to 17a lub 17b też, bo jest zaraz obok.
    • Jeśli numeracja zwykła/rozszerzona występuje wzdłuż tej samej ulicy, ale przed/za skrzyżowaniem z inną ulicą, wystarczy przeciągnąć ją przez cały ten odcinek, czyli nie kończyć przed skrzyżowaniem, a potem przerwa i znów, tylko zagwarantować ciągłość.
    • Jeśli rozszerzona występuje zupełnie gdzie indziej niż zwykła, pozostaje jedynie dodać dopisek w nawiasach do nazwy ulicy, tzn. np. "Ulica {17a}", "Ulica {1a-g,3a-c}" itp. W odbiorniku nazwa z numerami pojawi się już na etapie wyboru ulicy i pozwoli na rozróżnienie numerów typu 17 i 17a.

Przykłady z mapy

align=center


Bukowa 2. W dwóch niezależnych miejscach. Na "dolnym" odcinku poprawnie (w ADR są numery 1 i 2), ale powyżej skrzyżowania z "Pod Skocznią" w ADR jest 4,6,8,8A, a w liniowych numeracja ponownie startuje od 2. Analogicznie Jaśminiwa 2 - zdefiniowana w 2 niezależnych miejscah (na drodze 0x6 i na podjeździe typu 0x7. Czerwone/zielonkawożółte punkty wskazują miejsca, gdzie jest ADR, a nie ma liniowej - czyli brak numeracji dla całęj ulicy Inspektowej a na Bzowej od 11/12 w górę. Na Imielińskiej jest wprowadzona 1-11, alle zabrakło pojedynczego numerka 2. (I to jest inny typowy problem w wielu miejscach - brak pojedynczego numeru "brzegowego" - np. numeracja 2-16, a powinno być 2-18, bo tego "18" ktoś się nie dopatrzył)

align=center

Wołoska 40. Zupełnie niepotrzebnie numer 40 występuje w 2 miejscach na tej samej drodze (chodniku), ale z przerwą. Powinien tylko w jednym, albo nawet na całym tym odcinku, ale jako ciąg, a nie 2 osobne kawałki.

align=center

Bachmacka 6. Numeracja zarówno po lewej stronie "pionowego" (N-S) odcinka, jak i po północnej stronie poziomego. Ta druga wynika zapewne z numerów 6A i 6B, ale imho w przypadkach jak ten, spokojnie można te 6a/6b pominąć z numeracji liniowej. 6 i 6a są praktycznie obok siebie i jak ktoś poszuka i znajdzie "podstawowy" numer 6 to do 6a/6b też trafi. W bardziej skomplikowanych przypadkach (numery oddalone od siebie) jedyne sensowne wyjście to dodatkowe odcinki oznaczać "Ulica {6a-6f}", ale z rozwagą i bez przesady.

align=center

ogólny widok na centrum Warszawy - widać, że braków (czerwone) oraz duplikatów (zielone) nie jest dużo, ale nadal jest jeszcze trochę rzeczy do poprawienia. W skali całej Warszawy to jest 9000 braków i 700+ duplikatów. 2 Niebieskie bookmarki i wiodące od nich czerwone linie łączą duplikaty w obrębie plików ADR. W tym przypadku - adresy Szymańskiego 1 i 2 w Warszawa-Wola i Warszawa Rembertów. (Jak ktoś będzie szukał "Warszawa, Szymańskiego, 1", to mu się pojawią oba, albo punkt gdzieś w środku :)

align=center

Lelechowska 8,10,12,14 - podwójna numeracja, bo te same numery są dodane zarówno na drodze 0x6 od południa, jak i na równolegle narysowanej 0x7 (30m na północ). Jedna z tych numeracji powinna zniknąć - zostawić najlepiej tę, od której strony jest wejście do budynku.

Legenda znaczenia bookmarków i do statystyk:

>        Warszawa: 81979 74.78%, 55.58% (12574/16815/22624)  ADR: 9593 to go
>    Warszawa@Mysiadło:    16 100.00%, 100.00% (1/1/1)
>   Warszawa@Opacz-Kolonia:    61 100.00%, 87.50% (7/7/8)
> ...

Czyli jest wprowadzonych 81979 adresów garminowych (spośród 22624 POLYLINE z Miasto=Warszawa 16815 (55.58%) ma Label= z nazwą ulicy, a 12574 (74.78%,) ma dodaną numerację), ale nadal można wprowadzić 9593 adresy, które są w ADR, a ich brak w liniowych.

Znaczenie ikon

  • czerwony półprzezroczysty kwadrat

(ikona/bookmark adrold):, EL=2 adres jest w ADR, brak go w liniowych

  • żółty półprzezroczysty kwadrat (adrmisc),

EL=2 jw, ale dotyczy adresu z literką, do którego brak w liniowych adresu bez literki (czyli np. 11a, ale nie mamy 11, więc można ten 11 dodać w liniowych)

  • zielony półprzezroczysty kwadrat (adrmiss),

EL=4 jak czerwony, ale nawet nie ma takiej ulicy w liniowych

  • granatowy półprzezroczysty kwadrat, granatowy z dziurka i czerwona linia łącząca (adrdup/routerr), EL=4

duplikat w plikach ADR

  • zielony z dziurką x2, do tego zielona linia łącząca oba

duplikat adresu liniowego

  • niebieskie kółko

duplikat adresu liniowego ale w tym samym miejscu, czyli np. podwojnie zdefiniowany adres narozny (na obu dochodzacych ulicach)

  • czerwone kółko

inne błędy (parzystość itp.), w tym także potencjalny błąd "Too many", jeśli na odcinku jest więcej niż różnica 70 numerów (np. O,1,101,E,2,32 wygeneruje to ostrzeżenie dla strony nieparzystej). Jeśli numeracja jest jednostajna, można zignorować, ale z reguły warto sie przyjrzeć i dostawić punkt w środku tam, gdzie się interpolacja zbytnio rozjeżdża z rzeczywistością.

Dodatkowo w plikach new/chg/bad.plt są kolorami pokazane miejsca gdzie jest numeracja liniowa, a gdzie brak. Niebieskie - jest, żółte - na tym odcinku nie ma (ale ogólnie jest na tej ulicy), brązowe - brak, ale ulica nazwana więc potencjalnie może być, bladoniebieskie (miasta..plt) -- ulica nie ma nazwy, ale ma przypisane miasto (być może zadziała numeracja automatyczna).

W plikach UMP-PL-OBSZAR-adresy.zip są pliki raportów. Na przykładzie Białegostoku:

Archive: UMP-PL-Bialystok-adresy.zip 67 2017-01-07 20:35 nx.wpt 1560646 2017-01-07 20:35 bad.plt 554854 2017-01-07 20:35 new.plt 132 2017-01-07 20:35 old.plt 320764 2017-01-07 20:35 chg.plt 8023 2017-01-07 20:35 Bialystok.check-num.txt 16953 2017-01-07 20:35 Bialystok.duplikaty.txt 5604 2017-01-07 20:35 bm.tmp 5627 2017-01-07 20:35 bm-dup.mp 9094892 2017-01-07 20:35 bm-braki-00.mp 9157420 2017-01-07 20:35 bm-braki-01.mp 4089762 2017-01-07 20:35 bm-braki-02.mp --------- ------- 21948931 11 files


W plikach txt są logi z odpowiednich "make" robiących różne testy. W bm.tmp oraz bm-dup.mp są wyniki szukania duplikatów w obrębie adresów liniowych bm-dup.mp to to samo co bm.tmp ale z dodanym nagłówkiem, dzięki czemu (podobno) można przeciągnąć plik bm-dup.mp na otwarty w ME/ME++ plik mapy i się te bookmarki dołożą. bm.tmp natomiast trzeba sobie dołożyć do mapy w trakcie montowania. Te testy nie uwzględniają plików ADR, czyli to są "stare" testy, które opisywałem ze 2-3 miesiące temu. Oprócz błędów/duplikatów numeracji bookmarki zawierają także punkty 'NA' (niestyki) i BX/BE (ślepe jednokierunkowe. Punkty te są również jako waypointy w nx.wpt.

bm-braki.mp natomiast zawiera testy uwzględniające duplikaty liniowe (to co wyżej), ale także braki wynikające z tego, że adres występuje w pliku ADR, a nie ma go w liniowych. Z dokładnością do okolic granic z innymi obszarami, bo pliki ADR nie są dzielone dokładnie na granicach, tylko pełnymi miastami/gminami. Jak będzie potrzeba uwzględniania plików ADR z obszarów sąsiednich, to będziemy kombinować jak to zrobić. Jeśli plik bm-braki.mp jest zbyt duży (powyżej 50000 elementów), jest automatycznie dzielony na kilka, jak w przykładzie powyżej. Wczytywanie większych plików bookmarków może powodować problemy z pamięcią w ME/ME++, stąd ten podział.

(TS, 29.08.2012, 7.01.2017, 18.3.2017)