Importar csv a R, extraer polígono y decodificarlo con paquetes de googlePolylines

3 minutos de lectura

Avatar de usuario de Gerardo Flores
Gerardo Flores

He estado tratando de decodificar polígonos de Google encriptados con R usando el paquete googlePolylines que he logrado configurando el polígono como texto pero no puedo hacer el mismo procedimiento importando un archivo csv con los polígonos.

Por ejemplo, tengo el siguiente código:

library(googlePolylines)
pol<-"j~thAxdvtMtXmL|LgCpKxCjQzD~T`GzXrAlMePnDsKpVoF`QgBnNoM~IcA`JiGnd@iYvZuLzKkSlH_d@wDef@iJwFyZfUmc@hCsa@N{\\|SeCzOaFgQwD{SaPiC|WwBpPr@bGsG{FeQxEkOtXa@dXgFtHyJoIiGui@NqaAvFuRyQxEia@he@u_@b\\og@dHuZyJaX_d@zK_Ua@eBwMq`A}AyRcTkKce@c]uWeS{DuRzZtCh]|b@zGuCbm@fUdTsLbS__@wBoTlu@zVbm@dc@l]oExn@gf@vUgPbAkL|HtCnXi@zKtRvc@CzPxBpLxAnEvFvDpPx^cFlBTh@??Dn@@f@~G|QFH~\\gMj@Su@}@"
polylines<-c(pol)
coordinates<-decode(polylines)

Esto funciona pero para esto tengo que cambiar manualmente el polígono encriptado. Lo que quiero hacer es importar un csv (datapolygons.csv) con el polígono encriptado (polígono de columna) y luego decodificarlo. He probado con el siguiente código pero me da un mensaje de error.

datapolygons.csv (el polígono se escribe igual que el polígono codificado anterior)

store_id | nombre_tienda | polígono

12345 | AL AZAR | “j~thAxdvtMtXmL…”

library(googlePolylines)
polyfile=read.table('datapolygon.csv', header=TRUE, sep=',')
pol<-levels(droplevels(polyfile$polygon))
polylines<-c(pol)
coordinates<-decode(polylines)

Mensaje de error: Error en rcpp_decode_polyline(polilíneas, “coords”) : basic_string::at: __n (que es 363) >= this->size() (que es 363)

Cualquier ayuda sería muy apreciada. ¡Gracias!

  • Hola Gerardos, puedes proporcionar una muestra del objeto. polyfilepor ejemplo con dput(head(polyfile))?

    – Ian Campbell

    26 de marzo de 2020 a las 3:24


  • Hola Ian, obtengo esto: estructura (lista (store_address_id = 12345L, store_name = estructura (1L, .Label = “ALEATORIO”, clase = “factor”), polígono = estructura (1L, .Label = “\”j~thAxdvtMtXmL |LgCpKxCjQzD~TGzXrAlMePnDsKpVoFQgBnNoM~IcAJiGnd@iYvZuLzKkSlH_d@wDef@iJwFyZfUmc@hCsa@N{\\\\|SeCzOaFgQwD{SaPiC|WwBpPr@bGsG{FeQxEkOtXa@dXgFtHyJoIiGui@NqaAvFuRyQxEia@he@u_@b\\\\og@dHuZyJaX_d@zK_Ua@eBwMqA}AyRcTkKce@c]uWeS{DuRzZtCh]|b@zGuCbm@fUdTsLbS__@wBoTlu@zVbm@dc@l]oExn@gf@vUgPbAkL|HtCnXi@zKtRvc@CzPxBpLxAnEvFvDpPx^cFlBTh@??Dn@@f@~G|QFH ~\\\\gMj@Su@}@\””, clase = “factor”)), fila.nombres = 1L, clase = “datos.marco”)

    – Gerardo Flores

    26 de marzo de 2020 a las 3:33


  • Lo siento por el formato, realmente no sé cómo solucionarlo.

    – Gerardo Flores

    26 de marzo de 2020 a las 3:34

  • El problema es que hay acentos graves (el mismo carácter en ~) en la cadena que están estropeando la sintaxis de rebajas.

    – Ian Campbell

    26 de marzo de 2020 a las 3:49

  • Sí, el polígono codificado tiene una extraña lista de caracteres y comienza con “y termina con el mismo símbolo, así que creo que ese puede ser el problema, pero realmente no sé cómo resolverlo”.

    – Gerardo Flores

    26 de marzo de 2020 a las 3:52

Avatar de usuario de Ian Campbell
ian campbell

¿Es posible que la cadena esté dañada en su .csv ¿expediente? ¿Quizás cuando hiciste el data.frame para escribir? La corrupción parece ocurrir durante la conversión a factor().

No tengo problemas para escribirlo y volver a entrar:

polyfile <- data.frame(store_address_id = 12345, 
                       store_name = "RANDOM",
                       polygon = "j~thAxdvtMtXmL|LgCpKxCjQzD~T`GzXrAlMePnDsKpVoF`QgBnNoM~IcA`JiGnd@iYvZuLzKkSlH_d@wDef@iJwFyZfUmc@hCsa@N{\\|SeCzOaFgQwD{SaPiC|WwBpPr@bGsG{FeQxEkOtXa@dXgFtHyJoIiGui@NqaAvFuRyQxEia@he@u_@b\\og@dHuZyJaX_d@zK_Ua@eBwMq`A}AyRcTkKce@c]uWeS{DuRzZtCh]|b@zGuCbm@fUdTsLbS__@wBoTlu@zVbm@dc@l]oExn@gf@vUgPbAkL|HtCnXi@zKtRvc@CzPxBpLxAnEvFvDpPx^cFlBTh@??Dn@@f@~G|QFH~\\gMj@Su@}@",
                       stringsAsFactors = FALSE)

write.csv(file="~/test.csv",polyfile)
polyfile2 <- read.table('~/test.csv', header=TRUE, sep=',',stringsAsFactors = FALSE)
decode(polyfile2$polygon)
[[1]]
         lat       lon
1  -12.07286 -76.95965
2  -12.07697 -76.95750
3  -12.07920 -76.95682
4  -12.08121 -76.95759
5  -12.08415 -76.95853
6  -12.08767 -76.95982
7  -12.09181 -76.96024
8  -12.09412 -76.95749
9  -12.09500 -76.95547
10 -12.09877 -76.95427

  • Hola Ian, desafortunadamente sigo recibiendo el mismo mensaje de error.

    – Gerardo Flores

    26 de marzo de 2020 a las 3:50

  • Creo que su .csv el archivo puede estar corrupto. Ver mi edición.

    – Ian Campbell

    26 de marzo de 2020 a las 4:11

  • Sí, estaba corrupto y tuve que eliminar el primero y el último ” en el archivo csv. Gracias, ahora funciona perfectamente.

    – Gerardo Flores

    26 de marzo de 2020 a las 16:33

¿Ha sido útil esta solución?