Nesse post vamos falar sobre como adicionar label2 e pesquisa por CEP nos mapas gerados pelo mkgmap. Primeiramente o que é label? O label é o nome do objeto (Via, POI, etc), no OSM existe a tag “name” que dá nome aos objetos, por padrão do mkgmap o conteúdo dessa tag é usado para nomear os objetos, sendo que o label1 será preenchido com o valor dessa tag.
Com o mkgmap cada objeto (nome de uma rua, um estabelecimento comercial, etc) pode possuir até 4 nomes, ou seja, cada objeto pode possuir 4 labels. Mas quando isso (mais de um nome para um objeto) é necessário? Imagine que uma rua tenha o nome oficial de “Rua Mario Zanin”, porém seja popularmente conhecida como “Rua das Torres”. Nesse caso você pode atribuir cada um desses nomes ao mesmo objeto, ou seja, a mesma rua pode ter mais de um nome e assim ser encontrada por suas diferentes representações.
Outro exemplo: a rua chama-se “Rua XV de Novembro”, porém o usuário procura no GPS por “Rua 15 de novembro”. Nesse exemplo o GPS não vai encontrar a rua pois ele não sabe que semanticamente os dois nomes referem-se ao mesmo local. Para resolver esse problema pode-se atribuir as duas formas a mesma via, nesse caso podemos até mesmo atribuir três formas. Ficaria algo como:
Label1: Rua XV de Novembro
Label2: Rua 15 de Novembro
Label3: Rua Quinze de Novembro
Legal, mas como eu disse com o mkgmap posso colocar até 4 labels, então o que eu posso fazer com o último label? Uma ideia é adicionar o CEP como conteúdo do último label. Assim eu posso encontrar a via pelo nome e suas variações e também pelo CEP dela! Isso já funciona em alguns mapas comerciais.
Para fazer isso basta usar o mkgmap e alguns “Style File”. Não recomendo que você fazer um “Style File” do zero se você nunca fez isso, eu recomendo que você pegue um já pronto e apenas modifique com o que você necessita. Aqui tem um exemplo de “Style File” padrão que pode usar usado. Salve todos os arquivos em um diretório da sua máquina. Em seguida abra o arquivo “lines” e adicione no topo do arquivo as seguintes linhas:
highway=* {set mkgmap:label:2='${alt_name}'}
highway=* {set mkgmap:label:3='${loc_name}' | '${official_name}' | '${nat_name}' | '${reg_name}' | '${int_name}' | '${old_name}' | '${short_name}'}
highway=* {set mkgmap:label:4='${postal_code}'}
Nesse caso o label2 será setado com o conteúdo da tag “alt_name”. O label3 será setado com o conteúdo de algumas das tags da lista que segue após o sinal de igual. Sendo que as tags que vem antes tem prioridade. Você pode mudar essa ordem. Por último temos o label4 que vai receber o conteúdo de postal_code (CEP). Nesse exemplo apenas as vias (highway) irão receber esses labels. Você pode mudar isso e adicional label2, label3 e label4 para outros objetos também, para isso basta criar outras regras colocando uma regra diferente de “highway=*” no inicio do comando.
Por fim basta compilar usando o mkgmap, o comando ficaria parecido com o que consta abaixo, sem que “/dir/style_file” seria a pasta na qual encontra-se os “Style File” que você baixou:
java -Xmx1500m -jar mkgmap.jar --style-file=/dir/style_file --gmapsupp -c template.args
Algo que eu notei nos testes que eu realizei é que no caso de vias segmentadas (cortadas) todos os atributos de cada segmento deve possuir o mesmo valor para a pesquisa pelo label funcionar corretamente, caso os valores sejam diferentes a pesquisa não funciona. Exemplo, imagine que a “Rua Marcos Pien” está dividida em duas partes, parte1 e parte2. Sendo que a parte1 possui os atributos: name=”Rua Marcos Pien”, alt_name=”Rua do Marcos”, loc_name=”Rua da Igreja”, postal_code=”81955-400”. Já a parte2 possui os atributos: name=”Rua Marcos Pien”, alt_name=”Rua do Marcos”, postal_code=”81955-440”. Imagine que geramos um mapa usando as configurações de label2, 3 e 4 descritos nesse artigo.
Em nosso exemplo se pesquisar por “Rua Marcos Pien” e por ”Rua do Marcos” o GPS encontrara a via, agora se pesquisar por ”Rua da Igreja” o GPS não vai encontrar pois esse nome consta apenas no primeiro segmento e não consta no segundo. O mesmo acontece se pesquisarmos pelo CEP 81955-400, o GPS também não vai encontrar uma vez que esse valor consta apenas no primeiro segmento, no segundo segmento o valor é diferente.
Referências: Style File | Manual Style
0sem comentários ainda