14 comentarios sobre “Cartociudad

  1. Rubén 2 abril, 2016 18:02

    Muchas gracias por compartir la herramienta. Una de las cosas que no logro obtener de Cartociudad es la sección censal de una dirección. Sabes si existe alguna manera de hacerlo?

  2. Rubén 20 mayo, 2016 13:14

    No sé si a alguien más le pasa, pero al geolocalizar elementos de un vector da error que no acierto a subsanar:

    library(caRtociudad)

    direccion <- "Casp 1, Barcelona"
    direccion2 <- c("Casp 1, Barcelona", "Casp 2, Barcelona")

    # Geolocaliza correctamente
    cartociudad_geocode(direccion)

    # Error en la geolocalizacion:
    cartociudad_geocode(direccion2[1])

    #Error in vapply(elements, encode, character(1)) :
    # values must be length 1,
    # but FUN(X[[1]]) result is length 3

    Alguna idea?

  3. Carlos J. Gil Bellosta 20 mayo, 2016 13:27

    La función no está vectorizada: geolocaliza direcciones una a una.

  4. Rubén 20 mayo, 2016 14:12

    Lástima, ya que se complementaría muy bien con get_cartociudad_location_info(), que si acepta vectores.

    Gracias por la respuesta.

  5. Carlos J. Gil Bellosta 20 mayo, 2016 14:20

    En realidad, lo que quieres hacer es
    vector.coordenadas <- lapply(vector.direcciones, cartociudad_geocode) En términos de eficiencia, no se gana nada: las llamadas al servidor se hacen una a una. Solo tendría sentido permitir vectores de direcciones si el API de cartociudad aceptase listas de direcciones y las geolocalizase en una sola llamada. Pero creo que no es el caso.

  6. Rubén 20 mayo, 2016 14:37

    lapply genera el mismo error.
    Al final lo que pretendía era algo así (dentro de mis limitados conocimientos):
    for (i in 1:nrow(directorio)){
    try(directorio$latitud[i] <- cartociudad_geocode(directorio$Direccion_completa[i])[13])
    try(directorio$longitud[i] <- cartociudad_geocode(directorio$Direccion_completa[i])[12])
    i <- i + 1
    }

  7. Carlos J. Gil Bellosta 20 mayo, 2016 14:42

    Hummmm… ¡cuidado! En primer lugar, haces dos llamadas a geocode por cada dirección. Te basta con una. Además, ten en cuenta que geocode puede devolver más de una fila. Normalmente, la dirección «buena» está en la primera fila del bloque de respuestas. Pero eso lo tienes que gestionar tú.

  8. Rubén 20 mayo, 2016 15:02

    Cierto, ¿pero cómo hacer para asignar valores a 2 variables con una única llamada a la función?
    ¿alguna idea para generar un loop que geolocalice un data frame?
    PD: Si impartieses el master en BCN te lo preguntaría en persona 🙂 Gracias!

  9. Carlos J. Gil Bellosta 20 mayo, 2016 15:14

    Para geolocalizar un df, haz
    res <- lapply(df$direcciones, cartociudad_geocode) Si todo funciona bien (puede haber errores por el camino, puede que no se encuentre alguna dirección, etc.) tendrás una lista de dfs con una geolocalización por entrada. Si haces library(plyr) ldply(res, function(x) data.frame(long = x[1,12], lat = x[1,13])) tendrás un dataframe con el mismo número de filas que el original con la latitud y longitud correspondiente a las direcciones en cuestión. Le puedes pegar luego esas filas al df original.

  10. Rubén 21 mayo, 2016 14:29

    Muy agradecido, pero lapply no funciona con cartociudad_geocode.

Los comentarios están desabilitados.