Ir para o conteúdo
ou

Software livre Brasil

 Voltar a Blog
Tela cheia Sugerir um artigo

Como arrumar bairros (suburb) erroneamente classificados como hamlet

6 de Junho de 2016, 12:25 , por OpenStreetMap diary entries in Brazilian Portuguese - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 9 vezes

Estava pensando em algumas ideias utilizando o QGIS e trabalhando com os place do estado de SP, quando olho os place=hamlet e reparo que existem algumas aglomerações estranhas:

Por exemplo, em Assis: Assis

Bauru: Bauru

Osasco: Osasco

Sertãozinho: Sertãozinho

Me veio na cabeça que esses locais, muito provavelmente, deveriam ser bairros e não hamlets.

Olhar 745 hamlets, um por um, é algo trabalhoso de se fazer; mas pensei em algo que acabou dando certo (e detalho abaixo).

Minha lógica para tentar achar os locais errados foi: criar uma área ao redor de cada ponto, unindo as áreas que que se interceptam e contar o número de place dentro de cada área.
Se for maior que 1, então verifico manualmente para ver se é bairro ou não.

Primeiro obtendo os dados, através do plugin QuickOSM no QGIS (ou exportando como um geojson no próprio overpass, por exemplo; a consulta vai ser a mesma):

[out:json];
{{geocodeArea:são paulo, brasil}}->.searchArea;
(
  node["place"="hamlet"](area.searchArea);
);
out body;
>;
out skel qt;

Os dados estão em EPSG:4326 mas converti para EPSG:3395 (mesma projeção padrão do JOSM, apenas para calcular algumas áreas logo após).

Com os locais já projetados criei um buffer de 1000m, dissolvendo os resultados, através de Vetor → Ferramentas de Geoprocessamento → Buffer

A área do buffer, apesar de possuir várias partes, acaba sendo um objeto só (que não serve para o cálculo de objetos dentro de cada área que preciso fazer).
Então separo as áreas distintas através de Vetor → Geometrias → Multiparte para partes simples

No fim temos vários polígonos dessa forma:

Como o raio utilizado no buffer foi de 1000m, dentro de um mesmo polígono teremos objetos distantes a no máximo 2000m entre si (que acho um valor razoável como distância entre bairros).

A contagem de objetos dentro de cada um desses polígonos pode ser feita através de Vetor → Analisar → Pontos no polígono, utilizando o método soma

Ele gera uma nova camada com um atributo contendo a contagem.

Filtrando as áreas com valor > 1 temos 22 regiões potenciais.

Para selecionar os locais dentro dessas áreas (que é o que interessa) dá para efetuar uma consulta espacial através de Vetor → Consulta Espacial → Consulta Espacial

Queremos selecionar as feições da camada de place sempre que a feição interceptar a camada filtrada.

O resultado são 246 objetos selecionados, que exporto para CSV:

X,Y,full_id,osm_id,population,name,place
-50.094927,-22.111716,n368262779,368262779,,Colônia Nova,hamlet
-50.0935428,-22.122513699999,n368262783,368262783,,Colônia da Usina Paredão,hamlet
-48.605132,-22.225059,n368262852,368262852,,Pouso Alegre de Baixo,hamlet
-48.118025,-20.950358,n368262978,368262978,,Usina Barbacena,hamlet
(…)

Como a única informação importante para este caso é o id do objeto, eu o separo com magia negra:

fgrep hamlet saida.csv | awk -F , '{print $3}' | sort | sed ':a;N;$!ba;s/\n/ /g'

Que me retorna os objetos numa forma fácil de abrir no JOSM:

n1443265134 n1443267306 n1443267309 n1560596774 (…) n4028586019 n4163372418 n4165851984

Já no JOSM, para baixar apenas esses objetos utilizamos Arquivo → Baixar objeto, com o tipo de objeto sendo ou misturado e colamos a linha inteira no campo ID do objeto

Não dá para simplesmente substituir hamlet por suburb em todos os objetos porque alguns são realmente hamlet, por exemplo. É praticamente trabalho manual de verificar tudo.

No fim tinha nó duplicado, praça representada de forma errada e outras coisas.
Dos 246 nós com place=hamlet, 232 (94.3%) estavam realmente errados (e fiquei muito satisfeito com o resultado do processo).


Fonte: http://www.openstreetmap.org/user/naoliv/diary/38795

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.