¡Maño qué mapa!

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 ) )



Y he obtenido

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?

13 comentarios sobre “¡Maño qué mapa!

  1. jbm 14 marzo, 2012 11:23

    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.

  2. ffernandez 14 marzo, 2012 12:23

    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…

  3. jbm 14 marzo, 2012 12:29

    @ffernandez
    Medalla al mérito de la Inmortal para Datanalytics ya! 🙂

  4. Jorge 14 marzo, 2012 16:03

    Jajaja … Bravo!

  5. OTTO F. WAGNER 14 marzo, 2012 17:22

    Carlos for president! Yo si fuera tú les presentaría el proyecto a a varios ayuntamientos…. eso sí, ¿cobrarás?

  6. José Luis 15 marzo, 2012 0:24

    Esta vez te has pasado Carlos. Espectacular.Me das envidia..

  7. Iván García Subero 16 marzo, 2012 23:43

    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 😀

  8. datanalytics 19 marzo, 2012 13:48

    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!

  9. Javier 6 agosto, 2012 17:05

    Las aplicaciones ya están disponibles tanto para iphone como para android.

    @Iván García Subero

Los comentarios están desabilitados.