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 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.
+
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 [http://umplodz.republika.pl/netgen.html 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
2. Rysujemy drogę w pobliże granicy obszaru
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
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
4. Dociągamy ostatni węzeł narysowanej wcześniej drogi do tego punktu w granicy
 +
5. Zamykamy mapedit zapisując pracę
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)
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.
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:
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
if not exist ..\setenv.bat copy ..\narzedzia\setenv.bat ..\setenv.bat
 +
call ..\setenv.bat
call ..\setenv.bat
 +
rem ## setenv wychwytuje, ze zmiennych nie bylo, i przerywa
rem ## setenv wychwytuje, ze zmiennych nie bylo, i przerywa
 +
%ump%\narzedzia\patch.exe %ump%\narzedzia\granice.txt granice-wspolne.txt.diff.txt
%ump%\narzedzia\patch.exe %ump%\narzedzia\granice.txt granice-wspolne.txt.diff.txt
 +
pause 0
pause 0
 +
 +
9. Montujemy obszar B - w lini granicznej powinien już być nowy punkt
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.
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
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
12. Commitujemy zmiany dla obu obszarów pamiętając by wycommitować też granice.txt z katalogu narzedzia

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