Olá pessoal.. Uma API que me ajudou bastante quando é necessário certo grau de precisão e muitas consultas é o serviço dessa equipe : https://www.geocode.farm/ Uma das modalidades de consulta é paga mas nada exorbitante. Grande abraço. Pedro Em 05/05/2015 10:00, "Éder Comunello" <[email protected]> escreveu:
> Elias, bom dia! > > Fiz mais um exercício pra tentar medir o impacto da "simplificação" dos > ceps... > > O primeiro fato que percebo é que a consulta por cep, mesmo completo, é > pouco precisa/acurada. A busca por logradouro é possível, mas talvez > complicada pra implementar nessas bases... > > Se você tiver paciência de seguir o código abaixo, o que eu queria mostrar > é que quando você trunca o cep, zerando o último dígito, 99% dos valores > retornados vão diferir até 2 km da consulta original, mas economizam 22% de > consultas ao geocode(). > > Zerando os dois últimos dígitos, 97% dos dados variam até 2 km, mas > economiza 90% das consultas. > > E essa variação não é necessariamente erro, porque não temos as > coordenadas "reais" pra avaliar... > > No código eu não reconsultei os valores, mas tentei aproveitar sua base. > Daí a presença dos NA's... > > ### <code r> > url0 <- "http://leg.ufpr.br/~elias/tmp/cep_curitiba_cwb_georef_longlat.txt > " > df0 <- read.table(url0, head=T) > head(df0) > length(unique(df0$cep)) # 9183 ceps > length(unique(paste(df0$long, df0$lat))) # 6414 pares de coordenadas > distintas > > ### Truncando "xxxxx-xxx" para "xxxxx-xx0" > ### Desconsiderando o último dígito do cep > df1 <- df0 > df1$cep2=trunc(df0$cep/10)*10 > head(df1) > length(unique(df1$cep2)) # 7135 ceps (-2048 ou -22%) > > ### Pra não gastar minhas 2500 consultas :D, vou usar os dados já > consultados! > df2 <- merge(df1, df0, all.x=T, sort=F, by.x="cep2", by.y="cep") > head(df2) > sum(complete.cases(df2)) # 9071! Com a consulta de geocode, provavelmente > todos retornariam valor > > ### Valor aproximado de 1 grau dessa área (em km) > require(sp) > spDistsN1(matrix(c(-49,-50, -25,-26),2,2), matrix(c(-50,-25),1,2), > longlat=TRUE) > > df2$dist <- sqrt((df2[,3]-df2[,5])^2+(df2[,4]-df2[,6])^2)*105 ### > distância aproximada em km! > hist(df2$dist) > range(df2$dist, na.rm=T) > table(cut(df2$dist, breaks=c(-1:5,20))) > # (-1,0] (0,1] (1,2] (2,3] (3,4] (4,5] (5,20] > # 7528 1132 362 24 2 0 23 > > sum(table(cut(df2$dist, breaks=c(-1:5,20)))[1:3]) > ### 99% dos dados (9022/9071) diferem até 2 km em relação a consulta > original > > sum(df2$dist>5, na.rm=T) ### 23 valores bem imprecisos > df2[which(df2$dist>5),] > > ### Onde estão ocorrendo problemas? > require(ggmap) > adr <- paste0("Curitiba, PR, Brazil, ", df2[which(df2$dist>5),2]) > res <- geocode(adr, output="more") > res[c(1:4,10)] > > cbind(df2[which(df2$dist>5),1:4],res[1:6]) > ### boa parte dos problemas referem-se aos ceps da cidade industrial > ### você pode filtrar esses ceps e tratá-los diferenciados > > > ### Truncando "xxxxx-xxx" para "xxxxx-x00" > df10 <- df0 > df10$cep2=trunc(df0$cep/100)*100 > head(df10) > length(unique(df10$cep2)) # 941 ceps (-8242 ou -90%) > > df20 <- merge(df10, df0, all.x=T, sort=F, by.x="cep2", by.y="cep") > head(df20) > sum(complete.cases(df20)) # 8312! Com a consulta de geocode, provavelmente > todos retornariam valor > > df20$dist <- sqrt((df20[,3]-df20[,5])^2+(df20[,4]-df20[,6])^2)*105 ### > distância aproximada em km! > hist(df20$dist) > range(df20$dist, na.rm=T) > table(cut(df20$dist, breaks=c(-1:5,20))) > # (-1,0] (0,1] (1,2] (2,3] (3,4] (4,5] (5,20] > # 1647 5403 1050 131 17 6 58 > > sum(table(cut(df20$dist, breaks=c(-1:5,20)))[1:3]) > ### 97% dos dados (8100/8312) diferem até 2 km em relação a consulta > completa > > sum(df20$dist>5, na.rm=T) ### 23 valores bem imprecisos > df20[which(df20$dist>5),] > > ### Onde estão ocorrendo problemas? > require(ggmap) > adr1 <- paste0("Curitiba, PR, Brazil, ", df20[which(df20$dist>5),2]) > res1 <- geocode(adr1, output="more") > res1[c(1:4,10)] > > cbind(df20[which(df20$dist>5),1:4],res1[1:6]) > ### aumentam as localidades com problema, mas acho que ainda assim dá pra > contornar > ### </code> > > > Éder Comunello <c <[email protected]>[email protected]> > Dourados, MS - [22 16.5'S, 54 49'W] > > > > _______________________________________________ > R-br mailing list > [email protected] > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça > código mínimo reproduzível. >
_______________________________________________ R-br mailing list [email protected] https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
