Navit — zaawansowana konfiguracja

Zgodnie z zapo­wie­dzią, a w związku z chwi­lowo więk­szym zaan­ga­żo­wa­niem w temat, pro­po­nuję dziś nieco infor­ma­cji o kon­fi­gu­ra­cji pro­gramu Navit. Działania zmie­rzają do przy­go­to­wa­nia, w mojej opi­nii, funk­cjo­nal­nego inter­fejsu z uży­ciem naj­now­szych baje­rów dostęp­nych w stan­dar­do­wej kom­pi­la­cji z roz­wo­jo­wej gałęzi Debiana. To nie są naj­now­sze bajery w ogóle. Ale jeśli ktoś z sza­now­nych czy­tel­ni­ków pokusi się o samo­dzielną kom­pi­la­cję z naj­now­szych źródeł, to raczej mój prze­wod­nik nie będzie mu potrzebny :). Będziemy pra­co­wać na stan­dar­do­wym „czy­stym“ pliku navit.xml dostęp­nym, po zain­sta­lo­wa­niu pro­gramu, w kata­logu /etc/navit.

W ramach przy­go­to­wań należy w kata­logu domo­wym utwo­rzyć (lub zna­leźć) kata­log .navit. Katalog ten jest ukryty, więc trzeba dopro­wa­dzić do poka­za­nia ukry­tych kata­lo­gów w swoim ulu­bio­nym pro­gra­mie do zarzą­dza­nia zbio­rami (ileż ich jest :) ), albo wpi­sać odpo­wied­nią ścieżkę z kla­wia­tury (~/.navit). Do tego kata­logu należy sko­pio­wać ów zna­le­ziony w /etc/navit plik navit.xml. Edytowanie wspo­mnia­nego pliku w jego ory­gi­nal­nej loka­li­za­cji nie jest wska­zane ze względu na to, że pod­czas aktu­ali­za­cji pakietu będzie on nad­pi­sany — nie bez naszej wie­dzy jeśli go edy­to­wa­li­śmy, ale jed­nak. Parametry, o któ­rych tu będzie bar­dzo kon­kret­nie, są ogól­nie i sze­roko opi­sane na stro­nie Navitowej wiki­pe­dii oraz przy odro­bi­nie cier­pli­wo­ści dostępne są przy­kłady ilu­stru­jące kon­kretne ich wykorzystanie.

Navit

Pierwszą czyn­no­ścią jest edy­cja tagu <navit>.

center=‘5000 N 2000 E’usta­lamy współ­rzędne punktu, do któ­rego pro­gram będzie się odwo­ły­wał w przy­padku braku danych z GPS. W tym przy­padku cho­dzi o orien­ta­cyjne usta­wie­nie widoku w takim miej­scu, żeby­śmy w ogóle widzieli pobraną mapę. Jeśli mamy pod­łą­czone i aktywne urzą­dze­nie GPS (lub dowolne inne źródło danych o pozy­cji geo­gra­ficz­nej wyko­rzy­sty­walne w sys­te­mie), to możemy ten punkt pomi­nąć. Kiedy odbior­nik ustali pozy­cję i zamkniemy pro­gram, to przy następ­nym uru­cho­mie­niu widok będzie usta­wiony na tę ostat­nią pozy­cję zapi­sy­waną w pliku center.txt.

orientation=’-1′ czyli mapa usta­wiona tak byśmy widzieli drogę przed sobą (orien­ta­cja zgodna z kie­run­kiem jazdy, w prze­ci­wień­stwie do orientation=„0“ czyli mapa zorien­to­wana zawsze na północ)

zoom=‘128’ zbli­że­nie z jakim będzie się uka­zy­wała mapa po star­cie pro­gramu, war­tość z zakresu od 1 do 2097152, 1 ozna­cza mak­sy­malne powiększenie;

pitch=‘10’ czyli widok mapy pochy­lony o 10 stopni od nor­mal­nej do powierzchni mapy w kie­runku orien­ta­cji mapy. 0 ozna­cza widok „z lotu ptaka“, 90 ozna­cza­łoby, że patrzymy poziomo przed sie­bie (i pra­wie nie widzimy mapy), 270 lub –90 ozna­cza­łoby, że patrzymy poziomo „do góry nogami“ wstecz. Tym para­me­trem i moż­li­wo­ściami jego mody­fi­ka­cji zain­te­re­su­jemy się w dal­szej czę­ści poradnika.

OSD

Przy pierw­szym uru­cho­mie­niu pro­gramu zoba­czymy mniej wię­cej taki widok:

Lub, jeśli skon­fi­gu­ro­wa­li­śmy źródło danych kar­to­gra­ficz­nych, taki:

Przydatne byłoby usta­wie­nie ele­men­tów dostar­cza­ją­cych dodat­ko­wych infor­ma­cji. Jeśli cho­dzi o ele­menty ste­ru­jące i infor­ma­cyjne widoczne na ekra­nie głów­nym prócz mapy, to mając do dypo­zy­cji urzą­dze­nie wyświe­tla­jące o roz­dziel­czo­ści 120 dpi i geo­me­trii 1024×768 wybra­łem nastę­pu­jące odpo­wied­nio je rozmieszczając:

Informacja o odle­gło­ści od celu, liczona po wyzna­czo­nej trasie:

<osd enabled="yes" type="text" x="4" y="2" h="45" w="130" align="4"
label="D: ${navigation.item.destination_length}" font_size="350"/>

Według powyż­szego wzorca defi­niu­jemy wszyst­kie kolejne ele­menty. Typ ele­mentu (type) dostępny jest w doku­men­ta­cji. Wszystkie ele­menty infor­ma­cyjne akcep­tują znacz­niki poło­że­nia lewego gór­nego rogu obiektu x,y i liczone są nor­mal­nie od lewego gór­nego rogu ekranu, a z minu­sem (-) od rogu prze­ciw­nego. Konkretnie x=‘0’ y=‘0’ ozna­cza lewy górny róg ekranu, x=‘0’ y=’-0′ ozna­cza lewy dolny róg, x=’-0′ y=’-0′ ozna­cza prawy dolny róg. Znaczniki roz­cią­gło­ści w(idth) i h(eight) można nadać wszyst­kim polom tek­sto­wym i nie­któ­rym iko­nom. Ustawiając ele­menty obok/ponad sobą pod­czas usta­la­nia ich poło­że­nia należy brać pod uwagę ich wyso­kość i sze­ro­kość. Wszystkie pola tek­stowe, skala, kom­pas akcep­tują znacz­nik font_size=’ ‘.

Nazwa następ­nej (w sto­sunku do tej, na któ­rej się znaj­du­jemy) drogi/ulicy lub jej numer sys­te­ma­tyczny (jeśli jest nadany) — dostępna po wyzna­cze­niu trasy pod­czas nawigacji:

<osd enabled="yes" type="text" x="137" y="2" h="55" w="650" font_size="600"
label="${navigation.item[1].street_name} ${navigation.item[1].street_name_systematic}"/>

Graficzna pre­zen­ta­cja następ­nego manewru, który nas czeka (koniecz­nie należy zacho­wać roz­wagę na ron­dach, które nie zawsze są dobrze wykre­ślone i popraw­nie inter­pre­to­wane przez program):

<osd enabled="yes" x="4" y="50" h="130" w="130" type="navigation_next_turn" />

I odle­głość do tego manewru:

<osd enabled="yes" type="text" x="4" y="183" h="45" w="130" align="4" font_size="350"
label="N: ${navigation.item[1].length[value]} ${navigation.item[1].length[unit]}" />

Przyciski ste­ru­jące zbli­że­niem i nachy­le­niem mapy:

<osd enabled="yes" type="button" x="30" y="250" h="110" w="110"
command="zoom_in();pitch=pitch<14?pitch+2:14;redraw_map()" src="gui_zoom_in.svg"/>

<osd enabled="yes" type="button" x="30" y="380" h="100" w="100"
command="zoom_out();pitch=pitch>0?pitch-2:0;redraw_map()" src="gui_zoom_out.svg"/>

Ponieważ wraz ze zbli­ża­niem się do powierzchni mapy, siłą rze­czy, widzimy coraz mniej­szy frag­ment mapy tego co przed nami, to w tej defi­ni­cji wyko­rzy­stano instruk­cję warun­kową, która wraz ze zbli­ża­niem nachyla widok w kie­runku jazdy, oczy­wi­ście we w miarę roz­sąd­nym prze­dziale. Oddalając w kro­kach 2 ° osią­gamy w końcu widok „z lotu ptaka“ przy­bli­ża­jąc zaś, znów w kro­kach 2 ° osią­gamy kąt 14 °.

Skala dla orien­ta­cji w sto­sun­kach odległości:

<osd enabled="yes" type="scale" x="2" y="-55" w="130" h="50" font_size="300" />

Nazwa ulicy, ew. sys­te­ma­tyczny numer drogi na któ­rej się znajdujemy:

<osd enabled="yes" type="text" x="140" y="-60" h="55" w="650" font_size="600"
label="${tracking.item.street_name} ${tracking.item.street_name_systematic}" />

Czas jaki upły­nie nim osią­gniemy zapla­no­wany cel:

<osd enabled="yes" type="text" x="-172" y="2" h="50" w="170" align="4" font_size="350"
label="LFT: ${navigation.item.destination_time[remaining]}" />

Godzina przy­jazdu do zapla­no­wa­nego celu:

<osd enabled="yes" type="text" x="-172" y="54" h="50" w="170" align="4" font_size="350"
label="ETA: ${navigation.item.destination_time[arrival]}" />

Aktualna pręd­kość (dla porów­na­nia cho­ciażby ze wska­za­niami prędkościomierza):

<osd enabled="yes" type="text" x="-172" y="107" h="50" w="170" align="4" font_size="350"
label="SPD: ${vehicle.position_speed}" />

Wysokość na któ­rej się znajdujemy:

<osd enabled="yes" type="text" x="-172" y="160" h="50" w="170" align="4" font_size="350"
label="ALT: ${vehicle.position_height}" />

Kompas, poka­zuje pół­noc — białą strzałką i azy­mut na nasz cel — zie­loną strzałką, oraz odle­głość do celu w pro­stej linii:

<osd enabled="yes" type="compass" x="-172" y="213" h="195" w="170" font_size="350" align="14"/>

Jako uzu­peł­nie­nie kom­pasu, cyfrowa postać aktu­al­nego azymutu:

<osd enabled="yes" type="text" x="-172" y="245" h="70" w="170" font_size="400"
background_color="#00000000" label="${vehicle.position_direction} D" />

Przycisk prze­łą­cza­jący udzielanie/nieudzielanie wska­zó­wek mówionych:

<osd enabled="yes" type="button" src="gui_sound.svg" x="-150" y="410" w="90" h="90"
command="speech_active=!speech_active" />

Przycisk anu­lo­wa­nia prze­biegu nawigacji:

<osd enabled="yes" type="button" x="-77" y="410" w="90" h="90"
command="gui.abort_navigation()" src="gui_maps.svg"/>

Zerowalny i prze­ży­wa­jący wyłą­cze­nie pro­gramu odległościomierz:

<osd enabled="yes" type="odometer" w="220" h="55"  x="-222" y="-60" font_size="350" align="15"
label="DT:${distance} MS:${avg_spd}" name="persistent_odometer_1" disable_reset="0" />

Po wpro­wa­dze­niu powyż­szych usta­wień (w przy­padku kopio­wa­nia pro­szę zadbać by pomię­dzy „<“ a “ />“ każ­dego znacz­nika osd nie było znaku nowej linii, zawi­ja­nie wier­szy przez edy­tor może tu zaciem­niać obraz, należy albo włą­czyć nume­ro­wa­nie linii, albo wyłą­czyć zawi­ja­nie wier­szy) otrzy­mamy coś co wygląda mniej wię­cej tak:

Vehicle

Przejdźmy teraz do kon­fi­gu­ra­cji tagu <vehicle>, inte­re­su­jące nas war­to­ści to:

fol­low= ‘1’ czyli każda pozy­cja ode­brana z GPS spo­wo­duje odświe­że­nie mapy — dla urzą­dzeń o małej mocy obli­cze­nio­wej to bar­dzo dobry spo­sób by oszczę­dzić nieco tak­tów pro­ce­sora — wtedy należy zwięk­szyć tę war­tość, ale bez przesady.

lag= ‘10’ czyli korek­cja opóź­nie­nia pozy­cji uzy­ska­nej każ­do­ra­zowo z GPS w sto­sunku do rze­czy­wi­stej pozy­cji pojazdu w dzie­sią­tych czę­ściach sekundy, war­tość reko­men­do­wana zawiera się pomię­dzy 10 a 20, trzeba tro­chę poeks­pe­ry­men­to­wać z tymi war­to­ściami dla kon­kret­nego odbior­nika GPS/systemu

Log

Oraz tag <log> umiesz­czany w obrę­bie tagu <vehicle>:

type=‘gpx’ jeśli chcemy bez kło­potu (koniecz­no­ści kon­wer­sji danych) uczest­ni­czyć w roz­wi­ja­niu Openstreetmapy

enabled=‘yes’ :)

data=’~/tracks/%Y%m%d-%i.gpx’ tu mamy mozli­wość zde­fi­nio­wa­nia ścieżki gdzie nasze trasy będą zapi­sy­wane oraz sfor­ma­to­wać nazwy pli­ków %Y ozna­cza rok, %m — mie­siąc, %d — dzień, %i — kolejny numer pliku z danego dnia

overwrite=‘0’ zna­czy dane będą dopi­sy­wane na końcu pliku

flush_size=’ ‘; flush_time=’ ’ usta­wie­nie któ­re­goś (lub oby­dwu) z tych para­me­trów powo­duje, że plik z trasą jest utrzy­my­wany w pamięci i zapi­sy­wany na dysku po osią­gnię­ciu któ­re­goś z zada­nych warun­ków, nada­nie któ­re­muś z tych para­me­trów war­to­ści ‘0’ spo­wo­duje zapi­sy­wa­nie danych na bieżąco.

Wielkość czcionki

Program nie­stety nie hono­ruje sys­te­mo­wego usta­wie­nia dpi dla­tego cza­sem pożą­dana jest zmiana wiel­ko­ści czcionki napi­sów opi­su­ją­cych ele­menty pre­zen­to­wane na mapie (nazwy miej­sco­wo­ści, ulic, numery dróg). Są skrypty w perlu umoż­li­wia­jące ska­lo­wa­nie tematu, ale ze względu na dyna­miczny roz­wój pro­gramu i zmie­nia­jące się for­maty ikon nie zawsze się spraw­dzają. Pewnie można by przy­go­to­wać jakiś skrypt samo­dziel­nie, z wyko­rzy­sta­niem perla, awka lub seda, nie jest to jed­nak czyn­ność, którą wyko­nuje się czę­sto. Póki co, nie­za­wodna oka­zała się metoda pole­ga­jąca na znaj­do­wa­niu ciągu opi­su­ją­cego okre­ślony roz­miar i ręcz­nej (pół­au­to­ma­tycz­nej) zamia­nie war­to­ści. Przykładowa pro­ce­dura zwięk­sza­nia roz­miaru czcionki wygląda następująco:

Otwieramy plik navit.xml dowol­nym edy­to­rze tek­stu, który dys­po­nuje funk­cją „znajdź i zamień wszyst­kie“, znaj­du­jemy ciąg

<text text_size="24"/>

i chcąc zwięk­szyć czcionkę o +4 pt zamie­niamy w całym pliku ten ciąg na:

<text text_size="28"/>

Edytor zazwy­czaj poin­for­muje nas ile zamian doko­nał. Czasem będzie to zero — zatem w prze­dziale wiel­ko­ści uży­tych czcio­nek jest „prze­rwa“. Następnie wyszu­ku­jemy ciąg opi­su­jący czcionkę o sto­pień mniejszą:

<text text_size="23">

i zamie­niamy go w całym pliku o war­tość prze­su­niętą o +4, czyli na:

<text text_size="27">

Czynności te powta­rzamy, aż osią­gniemy i nad­pi­szemy roz­miar bodajże 7 pt. Należy pamię­tać, że zwięk­sza­jąc czcionkę zaczy­namy „od góry“ (tak jak w opi­sy­wa­nym przy­kła­dzie — zwięk­szamy war­to­ści więk­sze), zmniej­sza­jąc zaś idziemy „od dołu“ (zmniej­szamy war­to­ści mniej­sze) tak by nie powta­rzać edy­cji tych samych war­to­ści. W prze­ciw­nym przy­padku zrów­namy sobie wiel­ko­ści czcionki jak walcem.

Zapraszam do wymiany poglą­dów i doświad­czeń oraz do zwięk­sza­nia este­tyki i uży­tecz­no­ści zapro­po­no­wa­nych ustawień :)

Możesz jesz­cze przeczytać:

Kategorie: CarPC, GNU/Linux, Technika, Vademecum | Tags: , , , , , , , Skomentuj »


Napisz swój komentarz:



Na górę