Mostrar mensagens com a etiqueta Gps. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Gps. Mostrar todas as mensagens

segunda-feira, maio 07, 2012

Mapas Garmin no Navitel para Android

(Nunca mais escrevi nada aqui, pois o OruxMaps está a preparar o suporte à leitura de IMG's, sendo que nesse caso não é necessario utilizar o Navitel. Seja como for, o método aqui descrito funciona ;))

Uma das opções para se visualizar mapas custom Garmin em dispositivos Android é o software Navitel. E digo mapas custom, pois mapas originais NT(ou custom's que utilizem o formato NT) não são possíveis de reverter. Assim para demonstrar a coisa, vou utilizar um segmento do TopoLusitania.
Então para o processo precisam do seguinte software:
-Navitel para Android (utilizei a versão 5.1.0.47)
-GPSMapEdit (v1.1.73.2)
-Ficheiro *.img (usei a 35100011.img do TopoLusitania)
-WinRar

É necessário converter img em nm2, sendo este ultimo o formato lido pelo Navitel. Para isso usamos o GPSMapEdit. Abrimos o programa, vamos a Arquivo>>Abrir e seleccionamos o img que queremos converter. Assim que ele abrir, vamos a Arquivo>>Exportar>>Navitel 3.2.6 nm2, escolhemos a pasta de destino, é feita a conversão e temos o mapa pronto a utilizar no Navitel.
Depois de instalado o Navitel no equipamento, basta colocar esse ficheiro nm2 na pasta NavitelContent\Maps\ e correr o programa e está, terão algo como o que está na imagem à direita. A nível de aparência e legibilidade está bastante agradável.




No entanto, para mapas topográficos, existirá um problema de raiz: as curvas de nível não vêm visíveis, sendo que terão apenas visível a numeração das linhas como na seguinte imagem:






E aqui entra o filme do processo (pelo menos na versão 5.1.0.47). A Navitel utiliza uns skins que alteram as cores dos diferentes tipos de linhas/pontos vectoriais, estilo Typ da Garmin mas muito mais complicado de se trabalhar. Tanto quanto pesquisei (e não foi pouco!) não há editores para estes skins, pelo que todo o trabalho tem de ser feito à mão. Uma solução para quem não queira ter trabalho passa por utilizar o skin feito pelos rapazes da TopoHispania/Elgps, para a versão Navitel 5.0.3.70, e que se encontra aqui. Neste caso terão de usar o Navitel 5.0.3.70, pois o 5.1.0.47 não irá reconhecer esse skin (Não testei este método, nem sei como é este skin).

No meu caso optei por modificar o skin, o que é uma operação manhosa. De origem o programa trás um skin (as imagens acima usam esse skin) chamado Navitel.ns2 no qual eu decidi não mexer pois podia causar o bloqueio do programa (algo que aconteceu bastantes vezes com skins alterados!). Passei na pagina da Navitel onde saquei a skin Glass, sobre a qual iria trabalhar. O formato ns2 consiste num ficheiro zip sem compressão, onde estão várias pastas e ficheiros com as definições visuais. No entanto, descomprimir o ficheiro, editar e voltar a comprimir, faz que altere alguma coisa na estrutura do ficheiro, que depois de voltar a colocar o skin na pasta do equipamento, este bloqueia a aplicação. Então arranjei um método simples de contornar a coisa. Pegando por exemplo o skin sacado da Navitel "Glass_for_Android_v5.1.0.47.rar", é necessário descomprimir este ficheiro. Ficamos depois com o "Glass_for_Android_v5.1.0.47.ns2". Vamos renomear para "Glass_for_Android_v5.1.0.47.ns2.rar", abrir no WinRar e descomprimir tudo para uma pasta. Mantemos aquele ficheiro *.ns2.rar. O que descomprimimos terá este aspecto:
Podem ver nesta estrutura que está dividida em pastas e ficheiros *.dat e *.ttf. As pastas correspondem a resoluções aproximadas, nos aparelhos Android, no formato HEIGHTxWIDTHxBIT DEPTH. Para cada resolução existem duas pastas, uma na vertical e outra na horizontal. Não consegui concluir qual das resoluções seria a certa, no entanto no meu A5 de 800*480 as alterações foram feitas nas pastas 762x442x240 e 442x762x240. Se abrirem uma destas pastas poderão ver uma serie de imagens em formato png e ficheiros day.skin e night.skin. Estes dois ficheiros são o que interessa, tudo o resto é descartável. Existem pastas que têm mais imagens, outras quase não têm imagens, e os ficheiros skin não existem em todas as pastas. Não consegui chegar a uma conclusão desta organização, mas também percebi que não é necessário entender isso, a não ser que seja para criar um skin de raiz (em russo há alguma informação). Assim vamos ao que interessa, escolhemos duma pasta os dois ficheiros day.skin e night.skin. Guardamos esses dois ficheiros noutra localização e podemos apagar toda a pasta que tínhamos descomprimido. (Em vez de descomprimir todo o skin *.ns2.rar, podemos com o winrar percorrer o conteúdo e descomprimir estes dois ficheiros logo de lá). Agora abrimos o ficheiro day.skin com o bloco de notas. Este parece um Typ, onde cada tipo de linha ou icone vectorial têm uma cor, tamanho, formato ou outro atributo definido. Assim basta editar os tipos que nos interessar.



















Ora o que nos faltava ver eram as linhas de contorno das curvas de nível. Estas estão no grupo das "polylines" e são chamadas de "minor land contour", "interm. land contour" e "major land contour", consoante sejam as linhas menos relevantes (ex de 20 em 20 metros) ou as mais relevantes (ex: de 100 em 100 metros). Assim procurem por este texto que define as curvas de nível:
"# Minor land contour
20 0 none 0 none 0 none Font5 B67824 AAFF20 false none
# Interm. land contour
21 0 none 0 none 0 none Font5 B67824 AAFF20 false none
# Major land contour
22 0 none 0 none 0 none Font5 B67824 AAFF20 false none
"

E substituam por:

"# Minor land contour
20 0 dot 1/1m B67824 0 none small B67824 AAFF20 false
# Interm. land contour
21 0 solid 1/1m B67824 0 none small B67824 AAFF20 false
# Major land contour
22 0 solid 2/2m B67824 0 none small B67824 AAFF20 false
"
Salvem o ficheiro.
Esta simples alteração, o que faz é alterar os parâmetros do tipo de polilinha 20/21/22 (Update- curiosamente ou não, respeita a mesma numeração dos Typ da Garmin-Nos typs, as polilinhas 20, 21 e 22 também são curvas de nível!), que passam a ser do tipo dot/solid, com tamanho 1/1m(ou2/2m) e cor hexadecimal B67824. No texto existente as polilinhas 20/21/22 estavam definidas como none, sendo este o motivo pelo qual não apareciam.
Curiosamente no ficheiro night.skin, estas estão definidas, pelo que quando o Navitel utilizar estas definições (à noite????) as curvas de nível deveriam ser visíveis. No entanto confirmem sff.
O texto que está a seguir ao cardinal,  não é interpretado. Assim existe ao longo do ficheiro, indicações sobre os diversos tipos de elementos vectoriais e os parâmetros editáveis. No caso das polilinhas podem encontrar o seguinte texto:
"# "Type begin"  "Type end"
# "Pen 1 style" "Pen 1 width" "Pen 1 color"
# "Pen 2 width" "Pen 2 color"
# "Label font" "Label color" "Label outline color" "Label v-center alignment"
# "Arrow color, for road types" "Scale index, optional"
#
# "Pen 1 width" is the inner width (without borders)
"

Estes são os parâmetros editaveis e a disposição deles para todas as polilinhas. Por exemplo:

"22 0 solid 2/2m B67824 0 none small B67824 AAFF20 false"
equivale a: 
22 = "Type begin"
 0 = "Type end"solid = "Pen 1 style"
2/2m = "Pen 1 width"B67824 = "Pen 1 color"...

E por aí fora. Isto é valido para todo o ficheiro. No inicio também tem indicações importantes. Fica a dica para quem se quiser debater a alterar uns skins ;)

Voltando ao que interessa, editaram e salvaram o ficheiro day.skin com as definições que queriam, agora é necessário voltar a colocá-lo no *.ns2. Para tal vão usar o Winrar e abrir o ficheiro "Glass_for_Android_v5.1.0.47.ns2.rar". Utilizando o explorador do rar vão procurar a ou as pastas com a resolução mais perto da do vosso equipamento (ou podem fazer em todas as pastas) e vão substituir o ficheiro day.skin existente nessa pasta, pelo que salvaram atrás. Entrem na pasta, façam Add File To Archive e escolham o day.skin editado. Depois (E ISTO É MUITO IMPORTANTE!!!!) na janela dos parâmetros do WinRar alterem o Compression Method para Store, confirmem que o Update Mode está em Add and Replace File e dêem OK. Se precisarem de substituir mais day.skin, de outras pastas, repitam o processo. Depois de substituidos os day.skins podem voltar a renomear o ficheiro para "Glass_for_Android_v5.1.0.47.ns2" e colocar na pasta dos skins do Navitel. Depois correm o Navitel, vão a Menu>>Definições>>Interface>>Visual>>Seleccionar Visual e escolhem o "Glass_for_Android_v5.1.0.47.ns2" e façam OK. Se tudo correu bem e foi bem feito deverão ter algo parecido a isto:

Se ao seleccionarem o skin que editaram, no menu do Navitel, este bloquear, provavelmente algo foi mal feito na parte em que usam o WinRar. Voltem a fazer tudo, tendo em atenção em nunca usar compressão, nem descomprimir e voltar a comprimir todo o ficheiro-basta apenas substituir o day.skin nas pastas necessárias.
Podem também haver skins com o problema das visualizações resolvido, pela net. No meu estudo encontrei alguns, mas não para esta versão do Navitel, por isso resolvi perceber como a coisa funcionava.
Quando mudam de skin, os icones de menus, zoom e tudo mais mudam também.

Resumindo a coisa:
Usam o GPSMapEdit para converter um *.img (que não esteja em formato NT) em *.nm2.
Editam um skin *.ns2 que funcione na vossa versão de Navitel, extraindo um ficheiro day.skin, fazendo as alterações necessárias e voltando a colocá-lo no skin *.ns2.

No futuro faço um video da coisa ;-)

Update@08/05 Tinha eu escrito que não existia um editor ns2, mas afinal existe(com algumas falhas lol). Assim já andei a estudar a maneira de trabalhar isto. Na pratica, todos os elementos vectoriais seguem a numeração comum (utilizada no GPSMapedit) como tal é possível criar uma visualização aproximada da dos aparelhos Garmin, utilizando os *.typ's e editando os elementos respectivos no skin para ficarem com as mesmas cores e tamanhos (quando possível!). Infelizmente, isto leva tempos, o programa tem bugs a salvar os ficheiros, algumas modificações bloqueiam o Navitel... Uma infinidade de chatisses. Para testar a coisa fiz três versões, uma delas que bloqueia o Navitel, mas dá para perceber o resultado:




































Do mesmo modo detectei um erro, que presumo ser na conversão para nm2. Algumas das curvas de nível perdem o zero no final, aparecendo apenas 1, 2, 15 quando devia ser 10, 20, 150 por exemplo.
Entretanto se alguém tiver interesse em utilizar o TopoLusitania com o Navitel, façam os autores saber em http://topolusitania.blogspot.pt/2012/05/como-instalar-o-topolusitania-em.html
Assim que tiver mais algumas informações logo posto por aqui.


Update@14/05  Após uma longa serie de try-and-error, penso ter arranjado maneira de resolver o problema dos textos nas curvas de nível. Mas continuo sem perceber exactamente o porquê de acontecer, visto saber que as curvas têm a informação correcta, mesmo no Navitel. Ahh e testei outra versão e acontecia exactamente o mesmo!





sexta-feira, fevereiro 24, 2012

Utilizar imagens de satélite em equipamentos Garmin

 Enquanto saco mais uns tiles do OCM...
 O MOBAT o que faz, muito simplesmente, é gravar imagens de servidores de mapas (tipo GoogleEarth, VisualEarth, OpenStreetMaps, Nokia\Ovi maps, etc) para utilização offline, em formatos compatíveis com softwares de pc (Ozi, CompeGPS, GoogleEarth...), softwares de smartphones (no caso de android: Orux, Locus, Maverick, OutdoorNavigation...) e equipamentos Garmin (directamente, salvando como Garmin Custom Maps,KMZ com limitações...). E é por isso que gosto dele, num só software crio mapas para tudo o que faz falta, consoante o local e a actividade que vá fazer (btt, geocaching...). Existe um bom tutorial aqui: http://att-tutoriais.blogspot.com/2011/11/mobac.html , vídeos de como criar um mapa para um aparelho Garmin http://youtu.be/lDiBnBgx-_E , ou http://youtu.be/m4exhu4EThE . Os vídeos demonstram como é simples criar um tipo de mapa, escolhendo a fonte "mapsource", os níveis de zoom e guardá-lo com o formato pretendido. Nos vídeos é possível ver a criação dum ficheiro KMZ, que serve para os equipamentos Garmin(ou para o GoogleEarth). Basta colocar esse ficheiro na pasta Garmin\CustomMaps, e passam a ter uma camada de imagem sobreposta aos mapas vectoriais da Garmin (Isto se o KMZ tiver bem configurado, com uma DrawOrder correcta-Mas isso já é outro assunto...). O problema deste método é que estes ficheiros KMZ têm limitações, nomeadamente o tamanho das "tiles" que não deve ser maior que 1024x1024 ou 1Mega, o numero de tiles por equipamento (penso que é 100, menos nos modelos Montana que são 500), a velocidade de rendering lenta e apenas permite um nível de zoom. Como tal, podemos utilizar o formato proprietário da Garmin, o "JNX". Este permite até 50000 tiles, 5 níveis de zoom e é bastante mais rápido no rendering (internamente, no ficheiro, existe uma organização multi-tiles de 256x256). Como este formato foi desenhado para ser utilizado com o serviço pago BirdsEye da Garmin, os equipamentos têm alguns mecanismos que impossibilitam de criar mapas pessoais destes, e os colocar no equipamento, a não ser que se use um firmware que retire essa limitação.
 Posto isto, surgiu-me a duvida de como criar JNX, utilizando o MOBAC, e pesquisei. Infelizmente, não tenho um equipamento Garmin para poder testar a funcionalidade dos ditos, como tal limito-me a demonstrar o processo. Há funcionalidades como as escalas, níveis de zoom e customizações, as quais não posso testar =( Assim, para a conversão, precisam do MOBAC e do MOBAT2JNX.
 1º- No MOBAC escolhem até 5 níveis de zoom e respectivas fontes de mapas (podem ser diferentes consoante o nível de zoom) e escolhem o formato do atlas como "OSMTracker tile storage". É importante ser este formato, pois com qualquer outro o processo não funcionará. Este grava os mapas em tiles de 256x256, com uma organização de pastas estilo GoogleEarth "{ZOOM}\{X}\{Y}.jpg" (Não entendem o esquema? vejam http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/ que vos demonstra a organização GE "zoom\x\y", a organização TMS "zoom\y\x" utilizada pelo TileMapService e a "quadtree" utilizada pela Microsoft/Bing ;) ). Criem o mapa e entrem na pasta onde o guardaram. Se apenas criaram com uma mapsource terão uma pasta "nome da mapsource"\"nivel de zoom-12, 15, etc"\"x"\"y.jpg". No caso de várias mapsources terão várias pastas com o respectivo nome. Nesta situação precisam de juntar todos os níveis de zoom em apenas uma pasta(ou seja, juntam os vários níveis das diferentes pastas-17, 15, 14, 12, 9 P.Ex.- apenas numa pasta). Isto tem de ser feito pois o MOBAC2JNX apenas vai processar os dados de uma pasta.
 2º-Instalem o MOBAC2JNX. Não corram o programa do menu iniciar pois este não vos vai fazer nada. Este programa não tem GUI, logo terão de utilizar uma linha de comandos para trabalhar com ele. Vão ao menu Iniciar>>Executar>>cmd para abrirem uma linha de comandos. Depois escrevam "o caminho onde está instalado o programa" "espaço" "o caminho para a pasta onde guardaram o atlas" e dêem Enter (Ex:"C:\programas\MOBAC2JNX\mobac2jnx.exe C:\mapas\"). O programa vai converter os tiles num ficheiro "jnx.jnx", na mesma pasta dos tiles. Agora é só colocar este ficheiro no gps, na pasta \Garmin\BirdsEye\ do cartão de memoria(se não exitir, simplesmente criem uma pasta com esse nome). Não coloquem estes mapas na memoria interna do equipamento, pois qualquer erro pode deixar o aparelho bloqueado.
  Infelizmente, não tenho um equipamento Garmin recente que me permita testar na pratica este método, embora saibe que funcione. O que gostaria de testar e perceber como funciona tem a ver com as atribuições de níveis de zoom nos JNX, que têm o seu funcionamento especifico, assim como modificar o nível a partir do qual se apresentam estes mapas e não os vectoriais normais(se alguém quiser brincar com isso: JNXCustomizer).
  Fica um vídeo a demonstrar o processo. Aqui criei um atlas com 2 mapsources, 5 níveis diferentes, intercalados. Depois fiz a conversão, sem utilizar nenhuma opção do MOBAC2JNX. Por fim, abri o ficheiro JNX criado no QLandkarteGT, onde se podem perceber as alterações nos 5 diferentes níveis de zoom.
 Resumindo: Mobac>OSMTracker tiles>Mobat2jnx>*.JNX