OpenStreetMap

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).

Discussion

Comment from santamariense on 6 June 2016 at 17:12

Legal o método. Sobre as hamlet eu tenho desgosto de as usar porque o OSM as classifica dentro de micro-regiões (admin_level=7), e não leva em consideração o municipio > distrito > bairro onde estão. Então fui pesquisar o porquê desta bruxaria e descobri que hamlet são áreas não incorporadas, ou seja, que não pertencem a município algum, o que no Brazil, não existe.

Quanto aos bairros acho que há confusão entre o uso de place=suburb e place=neighbourhood. Eu entendo que um suburb é um conjunto de neighbourhoods (que ao pé da letra significaria vizinhança). Na pratica, tenho usado suburb para os bairros oficiais (que tem delimitações determinadas por lei) e neighbourhood para os loteamentos, parques residenciais, vilas e afins que estão dentro daquele.

Porém o usuário lbschenkel mudou os suburb para neighbourhood porque ele entende que os suburb é para os distritos e tá assim até hoje.

Comment from Linhares on 7 June 2016 at 20:16

Parabéns, Nelson! Da magia negra eu só entendi a parte que remove as quebras de linha! ;-)

Abraços, Linhares

Comment from ivaldonm on 8 June 2016 at 20:26

Santamariense, sua visão está correta ao usar suburb par bairro e nighbourhood para os parcelamentos, vilas, etc. mas isso em relação ao ponto ondo se coloca o nome. Onde houver delimitação, tanto para bairros como para vilas o admin_level será sempre 10.

Fizemos isso aqui em Campo Grande/MS, onde todos os bairros estão delimitados. Agora falta os “milhares” de parcelamentos.

Comment from wille on 2 August 2016 at 21:10

teste

Log in to leave a comment