Do Google Maps ao Open Street Map

O objetivo deste texto é documentar algumas dificuldades encontradas para substituir o framework Google Maps pelo Open Street Map.

Este texto não é um tutorial do OSM, seja no nível de instalação, configuração ou uso; e se limita a apresentar os detalhes de implementação específicos ao caso de uso do portal web Biblioteca Virtual da FAPESP (BV FAPESP - http://bv.fapesp.br).

Caso de uso

A BV FAPESP utiliza mapas georreferenciados para apresentar informações de concessão de fomentos de Projetos de Pesquisa (Auxílios à Pesquisa e Bolsas de Pesquisa) relacionados às cidades de origem das Instituições-sede de pesquisa e instituições no exterior, quando o Projeto de Pesquisa se relaciona com alguma instituição no exterior.

Deste modo é necessário que o sistema de mapas tenha uma abrangência global.

A BV FAPESP sempre utilizou o framework de mapas Google Maps, porém o mesmo passou a cobrar pelos seus serviços à partir de Junho de 2018. Isso levou a uma decisão interna do projeto para que fosse efetuada a migração para o Open Street Map.

Um dos requisito para a adoção novo framework, era que as funcionalidades existentes no Google Maps continuassem existindo. Foi feito um estudo onde se verificou que o OSM oferecia a possibilidade de continuação das funcionalidades, à partir de algumas adaptações.

Tecnologias

O Google Maps disponibiliza para os seus usuários as imagens dos mapas (tiles), um framework Javascript para o controle da apresentação dos mapas em páginas web, e uma API em Javascript que permite a impressão de elementos vetoriais sobre os mapas.

A BV FAPESP implementa, além das funcionalidades oferecidas pelo Google Maps, mais duas camadas para suprir a montagem dos mapas. 

d3.js

A primeira é uma camada em d3js, um framework para apresentação de elementos vetoriais.

JQuery

A segunda é uma camada implementada com a utilização do framework JQuery, para a apresentação de controles de apresentação.

Open Street Map

Macro atividades

A implementação do serviço de mapas do Open Street Map na Biblioteca Virtual da FAPESP foi realizada de acordo com as atividades abaixo.

  • Download do arquivo fonte planet.osm 
  • Infraestrutura 
    • Configuração de um servidor para testes e homologação 
    • Configuração de um servidor para o ambiente de produção 
    • Instalação e configuração do banco de dados Postrgres 
  • Configuração do ambiente para importação dos dados 
  • Carga dos dados do arquivo planet.osm no banco de dados 
  • Configuração do ambiente para renderização dos tiles 
  • Pre-renderização 
Essas atividades não serão detalhadas porque existe um vasto material na Internet cobrindo cada uma delas. Os pontos onde foram feitas maiores personalizações, ou que fugiram aos padrões utilizados serão abordados mais à frente.

Visão macro dos processos

Dois macro processos envolvem as atividades que são executadas para a execução de um ambiente com o OSM.
  • Carga no banco de dados 
  • Renderização dos tiles 
Uma vez que os servidores estão configurados, é necessário dar a carga do arquivo .osm no banco de dados.

osm2pgsql massachusetts.osm.bz2 -d osm -U postgres -P 5432 -S default.style --hstore

Durante este processo, é selecionado o mecanismo que define os estilos que serão utilizados. Por exemplo o carto. (https://github.com/gravitystorm/openstreetmap-carto)

osm2pgsql -d gis --append --slim -G --hstore --tag-transform-script $HOME/openstreetmap-carto/openstreetmap-carto.lua -C 8 --number-processes 100 -S $HOME/openstreetmap-carto/openstreetmap-carto.style $HOME/downloads/south-america-latest.osm.pbf

Definição da língua nos textos

A escrita utilizada nos textos dos mapas do OSM segue como padrão a língua e a escrita original de cada país, conforme pode ser observado no mapa abaixo.

Esta é uma política do OSM, para que a comunidade internacional envolvida no projeto tenha um reconhecimento horizontal frente as apresentação padrão do OSM.


Open street map - Original language all around the world

Esta forma de apresentação porém, encontra restrições na prática, porque torna o mapa praticamente ilegível para quem não domina todas as línguas do mundo, ou aquela parte do mapa que o usuário pretende visualizar e que ele não conheça a escrita da língua.

Existem diferentes maneiras de se abordar essa questão, como por exemplo criar diferentes colunas no banco de dados para se armazenar diferentes língua/escrita. Uma outra abordagem, é utilizar somente o campo padrão de nome, para armazenar o nome na língua/escrita desejada.

No caso da BV FAPESP, foi escolhido armazenar os nomes em uma única coluna no banco de dados, a coluna padrão “name”, seguindo o modelo abaixo:
  1. Se existir a nomenclatura em português armazena-se em português 
  2. Senão, se existir a nomenclatura em inglês armazena-se em inglês 
  3. Senão armazena-se na escrita original 
Os arquivos que são carregados na base de dados, conforme já explicado, vem com a nomenclatura na escrita local de cada país. Opcionalmente, outras línguas e/ou escritas podem compor o arquivo. Portanto no momento da carga dos dados dos arquivos de origem, no banco de dados é que deve ser feito o tratamento para utilizar diferentes opções de língua/escrita.

No comando de linha do script osm2pgsql, que faz a carga dos dados dos arquivos .osm para o banco de dados, deve-se passar um parâmetro de transformação no script openstreetmap-carto.lua para transformar os dados de acordo com o padrão definido.

No nosso caso, bastou incluir as linhas abaixo nas três funções:
  • filter_tags_node 
  • filter_basic_tags_rel 
  • filter_tags_way 
Código a ser inserido:

if keyvalues["name:pt"] then
keyvalues["name"] = keyvalues["name:pt"]
elseif keyvalues["name:en"] then
keyvalues["name"] = keyvalues["name:en"]
end

Renderização parcial

Durante algumas etapas da montagem do ambiente, testes, desenvolvimento ou mesmo em ambiente de produção, é necessário renderizar somente algumas partes dos mapas.

A API do OSM oferece um endpoint para marcar o tile que deve ser renovado (re-renderização). Para saber quais tiles devem ser marcados para renovação, é necessário conhecer o mecanismo de coordenadas do OSM.

O sistema de coordenadas do OSM, basicamente lida com 3 dimensões (x,y,z), sendo x o eixo horizontal, y o eixo vertical e z o nível de zoom. Como os pontos de georeferenciamento são dados em latitude e longitude, é necessário converter esses pontos para sistema de coordenadas do OSM.

Mesmo que o mecanismo de conversão de latitude/longitude para coordenadas do OSM não seja preciso, é possível por aproximação renovar os tiles desejados.

Mapas OSM utilizados na Biblioteca Virtual FAPESP

Atualmente, a BV FAPESP apresenta três mapas georeferenciados que utilizam o Open Stree Map.

Mapa da distribuição do fomento por município do Estado de São Paulo

Este mapa é utilizado em diversas páginas da BV FAPESP, para apresentar a distribuição dos fomentos nos municípios do Estado de São Paulo.

Mapa de São Paulo georefenciado com distribuição dinâmica no tempo
Este mapa apresenta os seguintes controles e dados descritos abaixo:
  • OSM 
    • Tiles (imagens que montam o mapa, com nome das cidades, rios, estradas etc) 
  • Leaflet 
    • Controle de zoom (+/-) 
    • Pan (movimentos laterais) 
    • Recarregamento dos tiles 
    • Borda do Estado de São Paulo 
  • d3js 
    • Sobreposição dos dados de fomento das cidades (bolotas laranjas) 
  • JQuery 
    • Elementos HTML utilizados para dar dinamismo aos dados georeferenciados. 
    • Apresentação do ano sobre o mapa 

Convênios e acordos de cooperação com a FAPESP

Este mapa é utilizado na página de Convênios e Acordos de Cooperação da BV FAPESP https://bv.fapesp.br/pt/acordo_convenio/, e na página de Bolsas no Exterior, https://bv.fapesp.br/pt/11/bolsas-no-exterior/ . Ele apresenta o relacionamento entre os municípios do Estado de São Paulo e as cidades no exterior.

O município de origem é a localização da Instituição Sede de Pesquisa , e a cidade no exterior é a localização relacionada a Instituição no Exterior.

Convênios e acordos de cooperação BV FAPESP - Cooperações internacionais

Este mapa apresenta os seguintes controles e dados descritos abaixo:
  • OSM 
    • Tiles (imagens que montam o mapa, com nome das cidades, rios, estradas etc) 
  • Leaflet 
    • Controle de zoom (+/-) 
    • Pan (movimentos laterais) 
    • Recarregamento dos tiles 
    • Borda do Estado de São Paulo 
    • Bolas verdes, que identificam a cidade (Brasil e exterior) e a quantidade de fomentos. 
    • Linhas laranjas, que ligam a cidade no Brasil as cidades no exterior

Mapa de distribuição dos acessos da página

Este mapa é utilizado em diversas páginas da BV FAPESP para mostrar a origem dos acessos das páginas, como por exemplo em https://bv.fapesp.br/pt/10/bolsas-no-brasil/



Este mapa apresenta os seguintes controles e dados descritos abaixo:

  • OSM 
    • Tiles (imagens que montam o mapa, com nome das cidades, rios, estradas etc) 
  • Leaflet 
    • Controle de zoom (+/-) 
    • Pan (movimentos laterais) 
    • Recarregamento dos tiles 
    • Pinos que identificam as cidades de origem dos acessos das páginas 

Mapa de distribuição de resultados de patentes

Este mapa é utilizado na página de Patentes da BV FAPESP para mostrar a distribuição de patentes geradas por cidade referente a Instituição Sede de Pesquisa, https://bv.fapesp.br/pt/papi-nuplitec/



Este mapa apresenta os seguintes controles e dados descritos abaixo:
  • OSM 
    • Tiles (imagens que montam o mapa, com nome das cidades, rios, estradas etc) 
  • Leaflet 
    • Controle de zoom (+/-) 
    • Pan (movimentos laterais) 
    • Recarregamento dos tiles 
    • Bolas verdes que identificam as cidades e tooltip para mostrar os dados referentes a cidade (legenda)


Revisões
Publicado em 28/12/2018 em aprox. 0:30 hr

Referências:https://ircama.github.io/osm-carto-tutorials/editing-guidelines/
https://www.openstreetmap.org/user/demonshreder/diary/43956

How to trigger a repaint for a specific OSM map tile?

https://help.openstreetmap.org/questions/1049/how-to-trigger-a-repaint-for-a-specific-osm-map-tile

Pegar as coordenadas dos tiles

http://tools.geofabrik.de/calc/#type=geofabrik_standard&bbox=-840.497093,-44.132988,-542.119163,73.86274&tab=2&grid=1



Popular posts from this blog

Atom - Jupyter / Hydrogen

Design Patterns

Robson Koji Moriya disambiguation name