* MapEdit cz.3 - Nowości 2005r (luty 2005) |
Bodaj od jesieni 2004r Michaił Sotin przygotowuje dla każdej nowej wersji MapEdit pakiet "Service Pack". Zmodyfikowany Service Packiem MapEdit ma kilka istotnych ulepszeń: |
|
Publikowany przez Michaiła Service Pack - jest w postaci nie do zaakceptowania przez zwykłego śmiertelnika (o ile się zorientowałem - to nieskompilowane źródła), zatem polecam wizytę na stronie Rafała Fitta (sekcja: linki o GPS) i pobranie pełnej skompilowanej wersji MapEdit+Service Pack. Zwracam uwagę na tekst umieszczony na stronie Rafała: Skompilowany z optymalizacją dla Pentium 3 (i lepszych) oraz z użyciem instukcji SSE. Nie działa komputerach ze starszym procesorem lub bez SSE. |
UWAGA Przypominam, że w celu uniknięcia przypadkowych przesunięć obiektów ZDECYDOWANIE zaleca się wyłączenie opcji Snap to Gird !!! (Tools --> Options) |
W artykule poświęconym MapEdit - przykład Jeziora Góreckiego kreśliliśmy w postaci trzech odrębnych części - po to, aby "ominąć" występujące na jeziorze dwie wyspy. Wykorzystując nowe właściwości cgpsmappera jezioro w chwili obecnej możemy wykreślić jako jeden pełen obiekt. |
|
Na tak wykreślonym jeziorze, przy włączonej opcji Transparent polygons możemy wykreślić wyspy. Typ obieku użyty do wykreślenia wysp powinien być inny niż typ obiektu podstawowego. W omawianym przykładzie użyłem typ różniący się od jeziora "Lake" również kolorystyką. To: Airport runway. |
|
Po wykreśleniu wszystkich "wysp" przy wyłączonej opcji Transparent polygons (lepiej widać) wykorzystując funkcję Select objects - lewym przyciskiem myszy zaznaczamy w pierwszej kolejności jezioro, a następnie przytrzymując klawisz shift lewym przyciskiem myszy zaznaczamy (a może odznaczamy ?) po kolei wszystkie wyspy. |
|
Na koniec prawym przyciskiem myszy klikamy na jezioro wywołując okienko dialogowe i wykonujemy funkcję Join objects (połącz obiekty). W efekcie uzyskamy to, czego od nas oczekuje kompilator. Tzn. definicję poszczególnych obiektów w .... jednym RGN80 |
12
stycznia 2005r na pl.rec.gps napisałem: Miałem taki sen: Idę z Murowańca przez Krzyżne do "piątki", a
na moim 60CS piękna fioletowa krecha prowadzi mnie po szlaku jak po sznurku :-))) Do
szczęścia to potrzebne może nie jest, ale pobawić się można. A już 18 stycznia 2005r Staszek GPSmapper napisał: Udostępniłem program MapRoute (odsyłam do 'Routable maps' na mojej stronie - przykład użycia, oraz 'Toolbox') W ten sposób wraz z umieszczoną wcześniej na MapCenter wersją cgpsmappera, obsługującą routing trafił w ręce użytkowników program MapRoute generujący na amatorskich mapkach odpowiednie dane do routingu. W sumie w pełni funkcjonalny zestaw dla amatorów UMP-owców. Na razie (stan na dzień 22-02-2005) dostępny kompilator ma ograniczenie związne z routingiem do 1500 ulic/dróg. |
Temat
routingu jest dla mnie tematem nowym. Nie ukrywam, że względu na specyfikę moich mapek
- routing
tyrystyczny dla piechurów - nie interesowałem się takimi zagadnieniami jak: ulice
jednokierunkowe, zakazy ruchu numeracja budynków itp. W moim przykładzie pokażę jak wygląda "techniczna" strona przygotowania mapki z routingiem. Nieznane mi szczegóły w tym dotyczące specyficznych zagadnień mapek samochodowych musisz już rozwiązać sam lub - korzystając z pomocy kolegów obeznanych z "miejskimi" projektami UMP: zobacz Porady z UMP_Warszawa |
UWAGA
|
Osobiście (czytelność obiektów na etapie kreślenia) wykonywałem odrębną mapkę (nazwijmy ją umownie NR1) z elementami do routingu (drogi, szlaki itp.), a osobno mapkę z pozostałymi elementami (NR2) obejmującą punkty, obszary, linie kolejowe, warstwice itp. Dopiero kiedy miałem pewność że mapka z drogami jest pozbawiona błędów (można ją skompilować), przed końcową kompilacją do pliku źródłowego mapki NR1 dodawałem obiekty z mapki NR2. Ta "ręczna" precedura została obecnie przeze mnie całkowicie zarzucona. W chwili obecnej proces generowania pliku wynikowego build.mp mam całkowicie zautomatyzowny. Szczegółowo całą procedurę - odpowiadającą turystycznemu charakterowi moich mapek opisałem w artykule "Routing GPS Maniaka". Jeżeli zamierzasz tworzyć mapki turystyczne polecam skorzystać z "mojej" metody. Przedtem jednak proponuję zapoznać z dalszą częścią bieżącego artykułu wyjaśniającego ogólne zasady tworzenia mapek z routingiem. |
Byłem niestety
przyzwyczajony kreślić proste odcinki dróg liniami prostymi bez zbędnych punktów
pośrednich. Dla potrzeb routingu ta droga jest wykreślona nieprawidłowo. Brak węzłów w miejscu potencjalnego skrzyżowania. |
|
Dlatego też
drogę należy wykreślić (bądź uzupełnić) z punktami
pośrednimi w miejscach przyszłych skrzyżowań. Zwracam uwagę na napis michus addons, co oznacza że używam MapEdita z Service Packiem Michaiła Sotina |
Uaktywniona opcja Snap to .. z przyciąganiem do punktu obiektu (pozostałe opcje nie są aktywne) ułatwia idelane połączenie dwóch różnych obiektów. Podkreślam: różnych. MapEdit z ServicePackiem blokuje przyciąganie do punktu na tym samym obiekcie. Nie próbowałem zrobić tego na siłę. Dlatego też nie wiem czy cgpsmapper potrafiłby wygenerować routing przy skrzyżowaniu ulicy nr1 z ulicą nr1. Może lepiej nie próbować ? |
Stosując w.wym.
zasadę nie łączenia tego samego obiektu, pętelki takie jak na ilustracji
kreśliłem jako dwa różne obiekty. Czy słusznie ? Nie wiem, ale mapka działa. |
Kreśląc
"normalną" mapkę turystyczną zapewne zrobiłbym to tak jak po lewej. Szlak i
droga zgodne z tym co widzę na podkładzie. Nietrudno jednak wymyśleć, że przejście
pomiędzy ścieżką (szlakiem) a drogą w rzeczywistości jednak jest. Zatem dla
potrzeb routingu, aby była możliwość "przeskoku" z obiektu na obiekt
musiałem sobie pozwolić na małe oszustwo i "nagiąć" szlak w kierunku drogi
dając wspólny węzeł. Takie połączenie umożliwi wygenerowanie prawidłowej trasy
gdyby od widocznej drogi odchodziła jakaś ścieżka na wschód. Można też to rozwiązać poprzez dodanie łącznika np. krótkiego odcinka obiektu "unpaved road". Należy jednak pamiętać o "minimalnej odległości" pomiędzy dwoma węzłami. |
UWAGA Dalsza obróbka mapki z routingiem powoduje utratę
zdefiniowanych leveli. Zatem wykonywanie mapki z danymi pod routing proponuję ograniczyć
do Level_0 (ustawionego na 120 lub 200/300m) No a teraz najważniejsza i zarazem ...... najprostsza sprawa. Wygenerowanie danych do routingu. Zapisujemy naszą mapkę w formacie polskim w dowolnym katalogu (folderze) pod dowoloną nazwą. Tu w przykładzie: 1.mp |
Następnie do
tego samego katalagu kopiujemy kompilator (freewarowy cgpsmapper) oraz dodatkowo pobrane
ze strony Staszka GPSmappera pliki
MapRoute.exe i MapRoute.ini. Aby uniknąć ręcznego pisania poleceń, proponuję w tym samym katalogu umieścić plik: !go.bat W efekcie w naszym katalogu powinniśmy mieć pliki takie jak widoczne na ilustarcji obok. Następnie uruchamiamy !go.bat i ....... |
|
Plik wsadowy wykonuje następujące polecenia:
W efekcie tych transformacji z pliku "1.mp" otrzymujemy prawie gotowy plik "build.mp". |
|
Za pomocą
Notatnika w pliku "build.mp" zmieniamy ID oraz nazwę mapki. W końcu plik "build.mp" zipujemy i wysyłamy na MapCenter w celu kompilacji pełną wersją cgpsmappera. |
Tu drobne
wyjaśnienie na temat parametru "14" z polecenia maproute. Otóż z części opisowej
pliku MapRoute.ini wynika, że parametr wynikowy budujemy jako sumę składników cząstkowych: ; work code Nie ulega wątpliwości, że na pewno musimy zastosować "8" i "2". Opcja "4" jako generująca punkty łącznikowe pomiędzy mapami też może się przydać (chociaż mi na razie nie udało się zrobić dwóch sąsiadujących mapek współpracujących ze sobą). Znaczenie parametru "1" jest dla mnie niejasne. Wykonałem wiele prób zarówno z "11" jak też "14" i "15". Ponieważ przy "15" zauważyłem pewne błędy w działaniu mapki w odbiorniku (może to przypadek ?), na razie pozostałem przy "14". |
Wracamy do mapy. Jeżeli okazało się że nasze drogi na mapcenter skompilowały się prawidłowo, to czas na połączenie mapek. Z mapki "nr 2" (tj. mapki zawierającej obiekty nie objęte routingiem) kopiujemy np. za pomocą notatnika (nie skopiuj przez pomyłkę nagłówka !!!) do pliku build.mp wszystkie obiekty. Następnie (jeżeli istnieje taka potrzeba) modyfikujemy (uzupełniemy) nagłówek. |
[IMG ID] ID=90000000 Name=MapRoute...... Routing=Y Levels=5 Level0=24 Level1=22 Level2=20 Level3=19 Level4=18 [END] |
Dla porównania nagłówek wygenerowany przez MapRoute i fragment nagłówka moich Tatr z routingiem. Znaczenia TreSize i TreMargin nie rozumiem, więc nie będę się upierał, ale na pewno warto do nagłówka pliku build.mp wpisać informację o indeksacji POI Pamiętaj też o prawidłowym ID oraz Name |
[IMG ID] ID=48060011 Name=TATRY_3_0 Elevation=M Preprocess=F TreSize=1000 TreMargin=0.00000 POIIndex=Y Routing=Y ....... [END-IMG ID] |
Zwracam uwagę, że mapka "build.mp" została wygenerowana z filtrem [Dictionary] zobacz: ;Followind DICTIONARY section can/should be
modified to meet your requirements ..................
Więcej na temat tego zagadnienia możesz przeczytać tu: KSW Ja mogę tylko wspomnieć, że sekcja Dictionary jest odpowiedzialna za automatyzację wyświetlania obiektów w poszczególnych levelach. Dlatego też, tak jak pisałem wyżej mapki dla routingu można wykonywać tylko dla warstwy 0. Ustawienie pozostałych warstw załatwi za Ciebie MapRoute. Gdybyś nie był zadowolony z automatyki zaproponowanej przez MapRoute możesz po zapoznaniu się z artykułem KSW samemu wprowadzić odpowiednie zmiany w sekcji Dictionary. Możesz też sekcję Dictionary usunąć i po połączeniu mapek NR1 i NR2 spróbować ustawić lokalizację obiektów w poszczególnych warstwach "po staremu" czyli MapEditem. Próbowałem (ver. 1.021) Mapka była OK, routing działał. Można też zrobić tak jak ja to uczyniłem. W artykule "Routing GPSManiaka" (kwiecień 2005) pokazałem w jaki sposób przygotowuję swoje mapki z routingiem. W moim przypadku jest to proces w 100% zautomatyzowany.
Na koniec jeszcze jedna sprawa. Podłączanie mapek do MapSource W tej materii odsyłam do artykułu: Routowalne pliki IMG, a MapSource |