Esta mañana casi me da esa tontería de sentirme orgulloso de ser de donde soy, Zaragoza. Al fin y al cabo, podría haber sido de cualquier otro lugar. Pero es que Zaragoza tiene uno de los portales de datos públicos municipales más avanzados. En eso es una ciudad pionera.
(Se lo hemos de agradecer a nuestro alcalde, Belloch, que, dicen las malas lenguas, además de socialista y barbudo, es linuxero).
Entre los datos disponibles, los hay de tráfico en tiempo real. En particular, existe una serie de tramos de calle y un fichero que se actualiza cada pocos segundos que indica el estado del tráfico en ellos.
Y he pensado que tal vez podría hacer una virguería con R.
Así que he escrito lo siguiente:
library( rjson ) # tmp <- readLines( "http://www.zaragoza.es/trafico/estado/tramos23030.json" ) tmp <- readLines( "http://www.zaragoza.es/trafico/estado/tramoswgs84.json" ) tmp <- fromJSON( tmp )[[1]] status <- fromJSON( readLines( "http://www.zaragoza.es/trafico/estado/estado.json" ) ) status.time <- status$timestamp status <- strsplit( status$estados, "" )[[1]] # length( kkk ) tmp <- lapply( tmp, function( x ) { id <- x$id name <- x$name status <- status[id] lat <- sapply( x$points, function( y ) y$lat ) lon <- sapply( x$points, function( y ) y$lon ) data.frame( id = id, name = name, status = status, lat = lat, lon = lon ) }) tmp <- do.call( rbind, tmp ) # tmp <- merge( tmp, status ) plot( range( tmp$lon ), - range( -tmp$lat ), xaxt = "n", yaxt = "n", type = "n", main = paste( "Estado del tráfico en Zaragoza", strptime( gsub( "-|Z", " ", status.time), format = "%Y%m%d %H%M%S" ), sep = "\n" ), xlab = "", ylab = "" ) foo <- function( x, y, status ){ colores <- c( "black", "red", "yellow", "green", "lightgray" ) color <- colores[ match( status, c( "b", "r", "y", "g" ), nomatch = 5 ) ] lines( x,y, col = color, lwd = ifelse( status == "-", 1, 2 ) ) } by( tmp, tmp$id, function( x ) foo( x$lon, x$lat, status = x$status ) )
Que da como resultado (a la hora en la que lo he ejecutado, cuando los zaragozanos están ya casi todos en su casa)
Pero me ha sabido a poco y he querido hacerlo todavía más a lo maño. Así que he añadido
library( OpenStreetMap ) map <- openmap( c( max(tmp$lat), min(tmp$lon) ), c( min( tmp$lat ), max(tmp$lon) ), type = "osm") plot(map,raster=TRUE) tmp.mercator <- data.frame( projectMercator( tmp$lat, tmp$lon ) ) tmp.mercator$status <- tmp$status foo <- function( x, y, status ){ colores <- c( "black", "red", "yellow", "green", "lightgray" ) color <- colores[ match( status, c( "b", "r", "y", "g" ), nomatch = 5 ) ] lines( x,y, col = color, lwd = ifelse( status == "-", 1, 2 ) ) } by( tmp.mercator, tmp$id, function( x ) foo( x$x, x$y, status = x$status ) )
Hay algunas cosas que me gustaría poder añadir, minucias, pero que estoy demasiado ocupado para investigar y que me gustaría dejar de tarea a mis lectores:
- ¿Cómo poner un título al segundo gráfico?
- ¿Cómo difuminar la imagen de fondo para que resalten más los tramos de tráfico sobre el excesivo detalle del mapa subyacente?
Excelente. ¿Atasco en el puente de Hierro? ¿A esas horas? Curioso. Espero que ese tranvía sea beneficioso para la ciudad porque bien que se está haciendo pagar.
En dos palabras, expec tacular.
Dos palabras y una mal escrita, eSpectacular …
Algunos habrían cobrado decenas de miles de euros al Ayuntamiento de Zaragoza por ese mapa embebido en un html y actualizándose con la misma frecuencia que el .json…
@ffernandez
Medalla al mérito de la Inmortal para Datanalytics ya! 🙂
Jajaja … Bravo!
¡Bravo! ¡Bravo!
Hace pocos días estuve estudiando a la empresa Octo Telematics que seguramente montó este sistema en Zaragoza (http://www.octotelematics.com/es/news/octo-telematics-y-centro-zaragoza-117.htm) ¿Casualidad o análisis del comportamiento siniestral en función de las zonas de circulación? R puede ser una herramienta muy útil en este análisis.
Carlos for president! Yo si fuera tú les presentaría el proyecto a a varios ayuntamientos…. eso sí, ¿cobrarás?
Esta vez te has pasado Carlos. Espectacular.Me das envidia..
Un consejo, hazlo para Android y sube la aplicación a la venta, que más de un Zaragozano de los que nos recorremos kilómetros de ciudad en coche a todas horas le daremos buen uso 😀
Ya, pero no es en el fondo mi oficio. ¡Pero lo cedo o colaboro con quien quiera poner en valor esos datos que regala el Ayto. de ZGZ!
Las aplicaciones ya están disponibles tanto para iphone como para android.
@Iván García Subero
@Javier ¿Podías indicarnos dónde y cómo?