Międzymapowy routing w GARMIN-ie
Z UMP
(→Wzór pliku bat do pachowania granic) |
|||
Linia 49: | Linia 49: | ||
- | ====Wzór pliku bat do | + | ====Wzór pliku bat do patchowania granic==== |
+ | ---- | ||
if not exist ..\setenv.bat copy ..\narzedzia\setenv.bat ..\setenv.bat | if not exist ..\setenv.bat copy ..\narzedzia\setenv.bat ..\setenv.bat | ||
Wersja z dnia 11:28, 22 cze 2008
Jak to działa
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
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ę:
Jak to zrobić
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:
Wzór pliku bat do patchowania granic
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