Międzymapowy routing w GARMIN-ie
Z UMP
(→Wzór pliku bat do pachowania granic) |
(→Wzór pliku bat do patchowania granic) |
||
(Nie pokazano 9 wersji pośrednich.) | |||
Linia 1: | Linia 1: | ||
- | |||
- | |||
- | |||
==Jak to działa== | ==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: | + | 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 | 1. Na obu arkuszach drogi muszą się kończyć w punkcie o tych samych współrzędnych | ||
Linia 20: | Linia 17: | ||
- | 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 | + | 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 na 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ę: | ||
Linia 32: | Linia 29: | ||
===Jak to zrobić=== | ===Jak to zrobić=== | ||
- | 1. Montujemy obszar A | + | |
+ | Szczegółową instrukcję wraz z obrazkami znajdziesz tu: [[Rysowanie_poza_obszar]] | ||
+ | |||
+ | 1. Montujemy obszar A (lub – jeśli korzystamy z perlowego mont-demont-multi2.pl oraz mdm-gui.pl, możemy zmontować jednocześnie obszar A i B) | ||
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 ('''a nie w rysowanej linii''') dodajemy węzeł w miejscu, gdzie droga będzie przechodziła na sąsiedni arkusz. Węzeł dodany w ten sposób na pewno będzie pomiędzy dwoma innymi na tej samej (prostej) linii, co jest bardzo ważne (linia graniczna pozostanie prostą). |
- | 4. Dociągamy ostatni węzeł narysowanej wcześniej drogi do tego punktu | + | 4. Dociągamy ostatni węzeł narysowanej wcześniej drogi do tego nowego punktu granicznego |
- | 5. Zamykamy mapedit zapisując pracę | + | 5. Zamykamy program mapedit zapisując pracę (chyba że mamy zmontowane dwa obszary naraz -- wtedy przechodzimy do punktu 10, pamiętając tylko o konieczności przypisania dwóch kawałków drogi do właściwych obszarów) |
- | 6. Uzyskujemy | + | 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 lub perlowej wersji pod uniksem) |
- | 7. Aplikujemy diff | + | 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: | ||
Linia 50: | Linia 50: | ||
====Wzór pliku bat do patchowania granic==== | ====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 | + | call ..\setenv.bat |
+ | rem ## setenv wychwytuje, ze zmiennych nie bylo, i przerywa | ||
+ | %ump%\narzedzia\patch.exe %ump%\granice.txt granice-wspolne.txt.diff.txt | ||
+ | pause 0 | ||
- | + | W uniksach po prostu kopiujemy nowy plik do narzedzia/granice.txt, zgodnie z podpowiedzią skryptu mont-demont-multi2.pl (wystarczy skopiować myszką gotową linijkę z komendą i ją wykonać) | |
- | + | 9. Montujemy obszar B s–- w linii granicznej powinien już być nowy punkt | |
- | + | 10. Rysujemy ciąg dalszy drogi, dbając o to, by kończyła się ona dokładnie w nowym punkcie 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 | ||
- | + | Jeśli jesteśmy w stanie poprawnie podzielić nową drogę na odpowiednie obszary ręcznie, to możemy od razu zmontować oba obszary, narysować drogę, dodać punkt w linii granicznej, dodać punkt na drodze blisko granicznego, dociągnąć go do granicznego (nie odwrotnie!), po czym podzielić drogę w tym miejscu (split polyline), zachować zmiany, rozmontować i pamiętać o umieszczeniu stosownych fragmentów nowej drogi w odpowiednich plikach obu zmontowanych obszarów. | |
- | + | [[Category:Routing]] | |
- | + | ||
- | + | ||
- | + | ||
- | + |
Aktualna wersja
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 na 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ć
Szczegółową instrukcję wraz z obrazkami znajdziesz tu: Rysowanie_poza_obszar
1. Montujemy obszar A (lub – jeśli korzystamy z perlowego mont-demont-multi2.pl oraz mdm-gui.pl, możemy zmontować jednocześnie obszar A i B)
2. Rysujemy drogę w pobliże granicy obszaru
3. W linii granicznej (a nie w rysowanej linii) dodajemy węzeł w miejscu, gdzie droga będzie przechodziła na sąsiedni arkusz. Węzeł dodany w ten sposób na pewno będzie pomiędzy dwoma innymi na tej samej (prostej) linii, co jest bardzo ważne (linia graniczna pozostanie prostą).
4. Dociągamy ostatni węzeł narysowanej wcześniej drogi do tego nowego punktu granicznego
5. Zamykamy program mapedit zapisując pracę (chyba że mamy zmontowane dwa obszary naraz -- wtedy przechodzimy do punktu 10, pamiętając tylko o konieczności przypisania dwóch kawałków drogi do właściwych obszarów)
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 lub perlowej wersji pod uniksem)
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%\granice.txt granice-wspolne.txt.diff.txt pause 0
W uniksach po prostu kopiujemy nowy plik do narzedzia/granice.txt, zgodnie z podpowiedzią skryptu mont-demont-multi2.pl (wystarczy skopiować myszką gotową linijkę z komendą i ją wykonać)
9. Montujemy obszar B s–- w linii granicznej powinien już być nowy punkt
10. Rysujemy ciąg dalszy drogi, dbając o to, by kończyła się ona dokładnie w nowym punkcie 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
Jeśli jesteśmy w stanie poprawnie podzielić nową drogę na odpowiednie obszary ręcznie, to możemy od razu zmontować oba obszary, narysować drogę, dodać punkt w linii granicznej, dodać punkt na drodze blisko granicznego, dociągnąć go do granicznego (nie odwrotnie!), po czym podzielić drogę w tym miejscu (split polyline), zachować zmiany, rozmontować i pamiętać o umieszczeniu stosownych fragmentów nowej drogi w odpowiednich plikach obu zmontowanych obszarów.