Międzymapowy routing w GARMIN-ie

Z UMP

(Różnice między wersjami)
Linia 5: Linia 5:
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)
-
Można oczywiście wykonać to w używanym przez nas mapedicie (zarówno w wersji "kanonicznej" jak mapedt+) 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.
+
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ę:
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
1. Montujemy obszar A

Wersja z dnia 20:32, 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

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