Międzymapowy routing w GARMIN-ie

Z UMP

(Różnice między wersjami)
Linia 2: Linia 2:
1. Na obu arkuszach drogi muszą się kończyć w punkcie o tych samych współrzędnych
1. Na obu arkuszach drogi muszą się kończyć w punkcie o tych samych współrzędnych
 +
[[Grafika:w1.png]]
2. W tym punkcie na obu arkuszach musi zostać wygenerowany szczególny rodzaj węzła (external node)
2. W tym punkcie na obu arkuszach musi zostać wygenerowany szczególny rodzaj węzła (external node)

Wersja z dnia 20:43, 20 cze 2008

Mapy dla odbiorników Garmin mogą być tworzone jako pojedyncze mapki i wtedy sprawa routingu jest dość oczywista. Większe mapy tworzone są jako zestawy map i tak jest w przypadku naszej mapy. Aby routing mógł "przeskoczyć" z jednego arkusza na drugi muszą być spełnione dwa warunki:

1. Na obu arkuszach drogi muszą się kończyć w punkcie o tych samych współrzędnych Grafika:W1.png

2. W tym punkcie na obu arkuszach musi zostać wygenerowany szczególny rodzaj węzła (external node)

Można oczywiście wykonać to w używanym przez nas mapedicie (zarówno w wersji "kanonicznej" jak mapedit+) generując najpierw węzły dla routingu a następnie oznaczając każdy graniczny jako external. Jednak w naszym projekcie generowanie węzłów dla routingu odbywa się bezpośrednio przed kompilacją i wykorzystywany jest do tego program netgen Mariusza Dąbrowskiego. Program ten oprócz generowania "zwykłych" węzłów w miejscach przecięcia czy styku dróg potrafi wygenerować węzły "external" w miejscach przecięcia dróg ze specjalnym rodzajem linii (0x4b) nazywanej graniczną. Warunkiem powstania takiego węzła jest istnienie węzła w linii granicznej w punkcie, w którym kończy się droga mająca ciąg dalszy w sąsiednim arkuszu. Zatem każdy z obszarów mających drogi wspólne z sąsiednim jest otoczony liniami granicznymi (są one wspólne dla sąsiednich obszarów). Te linie w źródłach przechowywane są w katalogu narzedzia w pliku granice.txt i z tego pliku pobierane podczas montowania dowolnego obszaru. Dodając nową drogę znajdującą się w dwóch (lub więcej) arkuszach możemy zastosować taką metodę:

1. Montujemy obszar A

2. Rysujemy drogę w pobliże granicy obszaru

3. W linii granicznej dodajemy węzeł w miejscu, gdzie droga będzie przechodziła na sąsiedni arkusz

4. Dociągamy ostatni węzeł narysowanej wcześniej drogi do tego punktu w granicy

5. Zamykamy mapedit zapisując pracę

6. Uzyskujemy !nowości.txt lub diff'a dla pliku z drogami oraz plik granice-wspolne.txt.diff.txt (jeśli używamy mont-demont.bat) lub narzedzia-granice.txt.diff (jeśli używamy mont-demont-perl.bat)

7. Aplikujemy diff'a (paczuj.bat) lub/i dorzucamy nowości do pliku z drogami - zmiany w granicach nie zostaną zaaplikowane, bo plik granic jest poza katalogiem obszaru w którym pracujemy.

8. Aplikujemy zmiany do pliku granice.txt. Można to zrobić ręcznie (odradzam) znajdując odpowiednią linijkę i zamieniając ja na tę z pliku diff lub uwzględniając odpowiednią nazwę pliku diff stworzyć plik bat do tego celu o treści:


if not exist ..\setenv.bat copy ..\narzedzia\setenv.bat ..\setenv.bat

call ..\setenv.bat

rem ## setenv wychwytuje, ze zmiennych nie bylo, i przerywa

%ump%\narzedzia\patch.exe %ump%\narzedzia\granice.txt granice-wspolne.txt.diff.txt

pause 0


9. Montujemy obszar B - w lini granicznej powinien już być nowy punkt

10. Rysujemy ciąg dalszy drogi dbając by kończyła się ona dokładnie w nowym punkcie w granicy.

11. Aplikujemy diif'y lub/i nowości

12. Commitujemy zmiany dla obu obszarów pamiętając by wycommitować też granice.txt z katalogu narzedzia