[R-br] georeferenciamento CEP Curitiba

Elias T. Krainski eliaskrainski em yahoo.com.br
Terça Maio 5 04:41:03 BRT 2015


Oi Éder,

Eu havia ignorado essa opção "output=more"... Não cheguei a ver quantos 
níveis de acurácia há agora. Você sabe: Na antiga eram oito:
    c("País", "U. F.", "Município", "Cidade", "CEP",
                "Rua", "Cruzamento", "Endereço")

Quando você fala em considerar apenas os primeiros dígitos, é possível 
ver que isso diminui a acurácia apenas notando que dos 9183 CEPs 
georeferenciados temos 6414 coordenadas únicas. Não sei o que essas 
quase três mil repetições são...

Tentando a sua sugestão (usar primeiros 5 digitos), obtemos apenas dois 
endereços com os 30 primeiros CEPs, enquanto que com os 8 dígitos temos 
16 coordenadas diferentes. Mas isso é porque esses CEPs estão ordenados, 
e os CEPs iniciando 80010 estão no início e vários deles apontam para a 
central de distribuição dos correios. Ou seja, quanto aos dados públicos 
do DATASUS, ao nível de CEP, não dá para fazer mais que isso... Os dados 
completos, com nome de logradouro e número não são públicos, são mais 
informativos.

Falando sobre o georeferenciamento de todos os endereços de Curitiba, os 
meio milhão de endereços são referentes a cada domicílio. Como muitos 
estão em condomínios, pode-se conseguir uma drástica redução. Além 
disso, uma coisa que pode-se levar em conta é que os números das ruas de 
Curitiba são e metros a partir do início da rua e se é a direita ou 
esquerda da rua. O número 310 indica um endereço 310 metros a partir do 
incício da rua à direita enquanto que 311 indica à esquerda. Geralmente 
a ruas "nascem" do centro e vão para os extremos. Um algoritmo pensando 
nessa estrutura pode ajudar a diminuir também o número de consultas.

Elias

On 04/05/15 21:53, Éder Comunello wrote:
> Elias, boa tarde!
>
> Fiz uns testes com o georreferenciamento por cep, usando 
> ggmap::geocode(). Na verdade, dá pra fazer uma avaliação da acurácia 
> pelos campos type e loctype retornados  quando se utiliza a opção 
> "output=more". Pelo que pude entender, endereços "precisos/acurados" 
> são retornados com a indicação "street_address" em type e as demais 
> formas são aproximações. No entanto, códigos "postal_code" são 
> melhores que "postal_code_prefix".
>
> ### <code r>
> require("ggmap")
> # geocodeQueryCheck()
> adr1 <- c('Rua Toshinobo Katayama, 178, Dourados, MS, Brazil, 
> 79806-030', ### endereço completo
>           'Rua Toshinobo Katayama, 171, Dourados, MS', ### endereço 
> completo
>           'Dourados, MS, 79806-029',                   ### não 
> cadastrado, prefixo válido
>           'Dourados, MS, 79899-333',                   ### cep inexistente
>           'Dourados, MS, 79806',                       ### apenas prefixo
>           'Dourados, MS, 79806030',                    ### cep correto
>           'Dourados, MS, 79823460',                    ### cep correto
>           'Dourados, MS, 79804970')                    ### cep 
> correto, zona rural
>
> res1 <- geocode(adr1, output="more")
> res1[c(1:4, 10)]
> #         lon       lat           type            loctype postal_code
> # 1 -54.80372 -22.23004 street_address            rooftop        <NA>
> # 2 -54.80460 -22.22413 street_address range_interpolated        <NA>
> # 3 -54.80027 -22.22395 postal_code_prefix        approximate        <NA>
> # 4 -54.79138 -22.22623    bus_station        approximate        <NA>
> # 5 -54.80027 -22.22395 postal_code_prefix        approximate        <NA>
> # 6 -54.80409 -22.22820    postal_code        approximate   79806-030
> # 7 -54.83732 -22.21741    postal_code        approximate   79823-460
> # 8 -54.80988 -22.21471 postal_code_prefix        approximate        <NA>
> ### </code>
>
> Testando apenas os primeiros 30 ceps do arquivo que você disponibilizou...
>
> ### <code r>
> url0 <- 
> "http://leg.ufpr.br/~elias/tmp/cep_curitiba_cwb_georef_longlat.txt 
> <http://leg.ufpr.br/%7Eelias/tmp/cep_curitiba_cwb_georef_longlat.txt>"
> tmp0 <- read.table(url0, head=T, nrows=30)
> adr2 <- paste0("Curitiba, PR, Brazil, ", tmp0[,1])
>
> res2 <- geocode(adr2, output="more")
> cbind(tmp0, res2[c(1:4,10)])
> table(res2$type)
> #             route postal_code_prefix        postal_code
> #                  2           14                 14
> ### </code>
>
> Nesse pequeno teste, 16 consultas retornaram resultados muito 
> imprecisos (route , postal_code_prefix) e os demais são poucos 
> precisos (postal_code).
>
> Desse modo, acredito que não há grande vantagem em consultar todos os 
> ceps e o número de consultas poderia ser diminuído consideravelmente 
> se eles fossem 'generalizados" . A opção mais radical seria fazer a 
> consulta pelos prefixos (primeiros 5 dígitos) e outras mais brandas 
> seriam algo do tipo:
>
> df      <- read.table(url0, head=T, nrows=1000)
> df$cep2 <- round(df$cep/100)*100
> un <- unique(df$cep2); length(un) # 135
>
> Nesse caso seriam 135 consultas ao invés das 1000 iniciais, o que 
> facilitaria bem a tarefa. Logicamente, haveria uma perda ainda maior 
> de precisão/acurácia. Resta saber se  a perda é tolerável/aceitável.
>
> A descrição dos códigos está em 
> <https://developers.google.com/maps/documentation/geocoding/?csw=1>.
>

-- 
In God we trust, all others bring data.
  – William Edwards Deming (1900-1993)

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20150505/efd89fdd/attachment-0001.html>


Mais detalhes sobre a lista de discussão R-br