OpenStreetMap

portalaventura's Diary

Recent diary entries

Essas ruas já foram retas, agora a Apple quer que elas sejam assim: Ruas já foram retas

Se você se preocupa em manter as geometrias relativamente alinhadas, seu trabalho provavelmente será desfeito por editores da Apple, que estão atuando como uma nuvem de gafanhotos atacando uma plantação, fazendo esses tipos de alinhamento da imagem acima.

Se você se preocupa em manter o alinhamento relativo entre as diversas geometrias presente nos dados, seu trabalho provavelmente será desfeito pela Apple. Essa rede elétrica estava do lado certo da rua, agora a Apple quer ela do outro lado: Rede elétrica fora do lugar

Location: Nossa Senhora das Dores, Sede, Santa Maria, Região Geográfica Imediata de Santa Maria, Região Geográfica Intermediária de Santa Maria, Rio Grande do Sul, Região Sul, Brasil

Cade vez mais tenho gasto tempo verificando e consertando edições de mapeadores corporativos, principalmente da Apple. Ao mesmo tempo, minha vontade em contribuir com o OSM diminui.

É ruim contribuir para depois ver o trabalho prejudicado por uma empresa que quer ajustar os dados aos seus interesses.

Ignoram a comunidade local, ajustam dados de estradas à uma fonte de imagem de satélite (ao invés de alinharem a fonte aos dados existentes) e esquecem os demais dados (construções, pontos de ônibus…), simplificam geometrias desnecessariamente…

Será que o volume de edições e quantidade de editores corporativos vai acabaram afugentando os demais contribuidores, tornando o OSM um mapa que, basicamente, atenderá os interesses dessas empresas?

Pelo Top 500 Brazil, nos últimos 2 meses, 37% dos contribuidores pertencem a corporações, respondendo por 80,29% dos changeset e por 41,83% das modificações no mapa. Parece que o interesse dessas empresas está mais no mapeamento de vias (criação das geometrias, denominação e restrições de conversão),

Fiquei impressionado em como cresceu a participação das empresas no OSM.

As tabelas abaixo foram feitas com as estatísticas de 11 de Junho de 2021.

  Contributors Changesets Map changes Created nodes Created ways Created relations Created buildings Created highways Created landuse Created names
Apple 158 64076 3730307 1264198 90924 1818 1014 89464 0 15704
Kaart 23 28358 620876 322092 48091 3790 11076 36667 335 21092
Microsoft 4 302 17402 11104 566 24 58 147 0 111
Outros 315 22764 6075771 4954846 336670 4965 134371 82172 5754 31925
Totais 500 115500 10444356 6552240 476251 10597 146519 208450 6089 68832
                     
Apple 31,60% 55,48% 35,72% 19,29% 19,09% 17,16% 0,69% 42,92% 0,00% 22,81%
Kaart 4,60% 24,55% 5,94% 4,92% 10,10% 35,76% 7,56% 17,59% 5,50% 30,64%
Microsoft 0,80% 0,26% 0,17% 0,17% 0,12% 0,23% 0,04% 0,07% 0,00% 0,16%
Outros 63,00% 19,71% 58,17% 75,62% 70,69% 46,85% 91,71% 39,42% 94,50% 46,38%
Totais 100,00% 100,00% 100,00% 100,00% 100,00% 100,00% 100,00% 100,00% 100,00% 100,00%
Location: Centro Histórico, Sede, Santa Maria, Região Geográfica Imediata de Santa Maria, Região Geográfica Intermediária de Santa Maria, Rio Grande do Sul, Região Sul, Brasil

Reproduzo um trecho de conversa que tive com um amigo sobre o que é o OpenStreetMap.

Essencialmente, o OpenStreetMap é um banco de dados de elementos geométricos (pontos, segmentos de reta, poligonais e polígonos) georreferenciados e elementos lógicos (relações) que representam elementos do mundo real (estradas, rios, construções, pontos de interesse, etc.). As características desses, são atribuídas àqueles elementos por meio de pares chave=valor. Por exemplo, para representar um rio, se usa uma poligonal para representar seu leito e aplica-se o par waterway=river.

Esse banco de dados é licenciado utilizando a Open Database License (ODbL). Porque essa licença? Bem, é uma licença especifica para banco de dados que garante, às pessoas, as liberdades de usar, modificar e compartilhar o banco de dados desde de que mantenham essas liberdades. Repare nessa condição, ela perpetua as liberdades. Essa é a essência do copyleft! Então, a ODbL é uma licença copyleft. Porque isso é importante? Não existe um mágico que tira da cartola um banco de dados com informações do mundo inteiro com uma licença assim, ele precisa ser construído. E como é construído? De maneira colaborativa, num grande bazar (lembra de “A Catedral e o Bazar”?) à semelhança da Wikipédia e do software livre. E para ser construído colaborativamente, são fundamentais essas liberdades. Para modificar, ou só usá-lo, alguém tem que ter compartilhado com você, e não seria justo, com aqueles que contribuíram com a copia compartilhada, se você pudesse restringir essas liberdades ao compartilhar a cópia que obteve ou suas modificações e, geraria incertezas sobre a perenidade da disponibilidade desse banco de dados. Você usufruiu, as outras pessoas também devem usufruir dessas liberdades.

E de onde veem as informações para esse banco de dados? São coletadas em campo, por exemplo, em placas que informam o nome de ruas (e algumas, também, CEP e numeração de lotes), de tracklogs de sistemas de posicionamento, de imagens de satélite, de ortofotos, de leis, etc. Podem ser obtidas, também, de órgãos públicos, de empresas ou qualquer outra fonte com licença compatível com a ODbL. Por exemplo, a Microsoft disponibiliza imagens de satélite para auxiliar o projeto. É importante ressaltar que não se pode usar informações do GoogleMaps, GoogleEarth, mapas impressos, outras fontes comerciais e qualquer fonte que não explicite sua licença. Mas a informação está ali, porque não copiar? Usando informações com licenças incompatíveis, você restringe as liberdades, e pior, contamina qualquer outra modificação feita sobre essas. Com isso, não está ajudando mas, prejudicando o projeto. E expondo-o a riscos de processos judiciais. Pegue o exemplo do rio. Se você obteve a poligonal sobre uma imagem de satélite do google, essa geometria terá que ser removida. Mas e se outra pessoa já tivesse adicionado o nome desse rio usando o par name=Rio Jacuí? O nome é removido junto com a poligonal.

Pragmaticamente, isso tudo produz informações melhores? Bem, a realidade é dinâmica. Empresas comerciais com desenvolvimento no estilo catedral, dificilmente conseguem acompanhar esse dinamismo. Além disso, não se preocupam com o usuário das informações, ao introduzir erros propositais em seus dados. Já imaginou o efeito, na vida das pessoas, de uma informação errada? Dois nomes de ruas trocados de lugar, propositalmente, podem, por exemplo, atrasar um atendimento de emergência… Não da para responder, simplesmente, com um “sim!” essa pergunta. Onde existem pessoas contribuindo, usando, e mantendo as informações, no mínimo, são mais confiáveis. Além de poderem ser utilizadas onde quiser sem as limitações impostas pelas empresas comerciais.

Foi solicitado à EPTC, por meio do e-mail eptc@eptc.prefpoa.com.br, uma lista com os números dos prefixos lotados em cada um dos pontos fixos de táxis da cidade de Porto Alegre/RS. Em resposta ao e-mail, a EPTC forneceu um arquivo no formato PDF contendo duas colunas. A primeira delas, contem o nome do ponto fixo, a segunda, informa o prefixo do táxi lotado no ponto.

Solicitei à EPTC um arquivo num formato livre, estruturado e legível por máquina. Curiosamente, e em desconformidade com a lei de acesso a informação, respondeu que o formato disponível é em pdf. Diante disso, vou explicar como manipulei esse arquivo em PDF para deixar estruturado da maneira mais conveniente para mim.

Quero um arquivo em formato texto onde cada linha contem informações sobre um ponto fixo da seguinte forma:

nome-do-ponto:quantidade-de-prefixos-no-ponto:prefixo1;prefixo2;prefixo3

Onde o delimitador é :, o primeiro campo é o nome do ponto fixo, o segundo é a quantidade de prefixos no ponto e o terceiro campo são os prefixos lotados no ponto separados pelo delimitador ;. Reparem que a quantidade de prefixos em cada ponto não consta no arquivo original, e será obtida contando, com o awk, os prefixos em cada ponto.

O primeiro passo é converter o arquivo do formato PDF para txt. Utilizei a ferramenta pdftotext disponível no pacote poppler, em um sistema baseado em Arch (uso Parabola GNU Linux-libre) ou no pacote poppler-utils, em um sistema baseado em Debian:

pdftotext PrefixosPorPontos.pdf PrefixosPorPontos.pdf.txt

O resultado é um arquivo com as colunas do arquivo original intercaladas, ora os nomes dos pontos, ora os prefixos. Por isso usamos o sed para separa-las.

Como os prefixos são números de 4 dígitos usamos a expressão regular ^[0-9]\{4\}$ para selecionar as linhas que começam e terminam com numeros de 4 dígitos e o > para grava-las no arquivo PrefixosPorPontos.pdf.txt.prefixos:

sed '/^[0-9]\{4\}$/!d;/^$/d' < PrefixosPorPontos.pdf.txt > PrefixosPorPontos.pdf.txt.prefixos

Como curiosidade, podemos saber quantos prefixos existem em Porto Alegre/RS, usando o wc -l:

wc -l < PrefixosPorPontos.pdf.txt.prefixos

São 2685 táxis lotados em pontos fixos.

Para gerar um arquivo com os nomes dos pontos fixos selecionamos as linhas que NÃO começam e terminam com números de 4 dígitos e removemos as linhas em branco e que começam e terminam com as strings “Prefixo”, “Ponto” e “LISTAGEM DE PONTOS FIXOS E PREFIXOS DE TÁXI”. Salvamos o resultado no arquivo PrefixosPorPontos.pdf.txt.pontos:

sed '/^[0-9]\{4\}$/d;/^$/d;/^Ponto$/d;/^Prefixo$/d;/^LISTAGEM DE PONTOS FIXOS E PREFIXOS DE TÁXI$/d' < PrefixosPorPontos.pdf.txt > PrefixosPorPontos.pdf.txt.pontos

Como curiosidade, podemos saber quantos pontos fixos de táxi existem em Porto Alegre/RS, usando o wc -l combinado com o uniq:

uniq < PrefixosPorPontos.pdf.txt.pontos | wc -l

São 156 pontos fixos.

Com esses dois arquivos usamos o paste para gerar um arquivo de duas colunas delimitadas por ::

paste -d':' PrefixosPorPontos.pdf.txt.pontos PrefixosPorPontos.pdf.txt.prefixos | sort > PrefixosPorPontos.txt

Reparem que foi usado o sort para ordenar o arquivo PrefixosPorPontos.txt, que possui duas colunas, onde cada linha é da seguinte forma:

nome-do-ponto:prefixo

Assim, calculamos, usando o awk, quantos prefixos possuem cada ponto:

awk -F":" '{ a[$1]++; } END { for (i in a) print i, a[i]; }' OFS=: PrefixosPorPontos.txt | sort > PrefixosPorPontos.txt.quantidade

O arquivo PrefixosPorPontos.txt.quantidade possui duas colunas, separadas pelo delimitador :, onde cada linha é da seguinte forma:

nome-do-ponto:quantidade-de-prefixos-no-ponto

Podemos confirmar se o camando anterior contou corretamente, somando todos os valores da segunda coluna do arquivo PrefixosPorPontos.txt.quantidade, usando:

awk -F":" '{ x+=$2 } END { print x }' PrefixosPorPontos.txt.quantidade

ou, usando

cut -d':' -f2 PrefixosPorPontos.txt.quantidade | paste -sd'+' - | bc

O que resulta em 2685.

Agora concatenamos os prefixos de táxi do arquivo PrefixosPorPontos.txt:

awk -F":" '{ a[$1]=a[$1]?a[$1]";"$2:$2; } END { for (i in a) print i, a[i]; }' OFS=: PrefixosPorPontos.txt | sort > PrefixosPorPontos.txt.concatenado

Obtendo o arquivo PrefixosPorPontos.txt.concatenado onde cada linha terá a seguinte estrutura:

nome-do-ponto:prefixo1;prefixo2;prefixo3

Agora usamos o cut para gerarmos uma lista dos prefixos de táxi concatenados:

cut -d":" -f2 PrefixosPorPontos.txt.concatenado > PrefixosPorPontos.txt.concatenado.sem.ponto

Por fim, usamos novamente o paste para gerar um arquivo texto PrefixosPorPontos.txt.quantidade.concatenado estruturado da forma pretendida:

paste -d":" PrefixosPorPontos.txt.quantidade PrefixosPorPontos.txt.concatenado.sem.ponto > PrefixosPorPontos.txt.quantidade.concatenado

Então, temos um arquivo texto com três colunas, separadas por :, onde a primeira contem o nome do ponto fixo de táxis, a segunda tem a quantidade de táxis lotados no ponto, e a terceira, os prefixos dos táxis lotados no ponto separados por ;.

O próximo passo é adicionar a quantidade e os prefixos lotados em cada ponto fixo de táxis da cidade de Porto Alegre/RS usando:

capacity=*

taxi:prefix=*

taxi:colour=red or white

description:payment=A tarifa é calculada assim: tarifa = 5,18 + (2,59 na bandeira I ou 3,36 na bandeira II) x distancia percorrida (km) + 18,31 x tempo parado (h).

Location: Centro Histórico, Porto Alegre, Região Geográfica Imediata de Porto Alegre, Região Metropolitana de Porto Alegre, Região Geográfica Intermediária de Porto Alegre, Rio Grande do Sul, Região Sul, Brasil