Transport Public de Zagreb amb R

Aquest estiu he anat a Croàcia. Abans del viatge vaig buscar informació del transport públic de Zagreb per mirar les opcions d’anar de l’hotel al centre. La web del transport públic no tenia cap mapa i amb els noms de les estacions en croata no m’aclaria. Buscant per internet vaig trobar la informació a l’Open Street Map (OSM).

Llavors acabava de llegir l’article de l’RJournal osmar: OpenStreetMap and R que explicava com aquest package permet agafar dades de l’OSM. Finalment acabaven de publicar al bloc de Github que es peremetien visualitzar els teus mapes a un repositori.

Tot era massa temptador com per no provar-ho!

Open Street Map (OSM)

OpenStreetMap és un projecte col·laboratiu per crear mapes de contingut lliure usant dades obtingudes mitjançant dispositius GPS i altres fonts de dades. Les dades dels mapes es lliuren sota la llicència Open Database License i tenen els següents elements:

  • Node: Conté els camps latitud i longitud.
  • Way: Un conjunt ordenat de nodes per representar un objecte lineal.
  • Relation: Un grup d’elements (nodes, ways i/o relations) que estan geogràficament relacionades.

Importar dades d’OSM

Aquí és on entra en joc el package osmar. Aquest package és molt diferent i interessant respecte a altres packages que ja havia parlat a Presentació de Mapes amb R. osmar permet agafar la informació que ofereix OSM per treballar directament amb R, no el la imatge de fons sino els objectes.

Per exemple podeu veure les dades disponibles a OSM del transport públic de Zagreb i podeu veure que cada tram és una relation amb un número. Aquest és el número que hem d’utilitzar per importar les dades a l’R utilitzant les funcions get_osm i relation del package osmar. També podem representar les línies del tram amb plot i plot_ways.

library("osmar")

tram5 <- get_osm(relation(2136275), full = TRUE)
tram17 <- get_osm(relation(2114098), full = TRUE)

plot(tram5)

tram5

plot_ways(tram5, col = "blue")
plot_ways(tram17, add = TRUE, col = "red")

tram5 i 17


# Passem les dades a objectes sp.
tram5_lines <- as_sp(tram5, "lines")
tram5_points <- as_sp(tram5, "points")
is(tram5_lines)

## [1] "SpatialLinesDataFrame" "SpatialLines"          "Spatial"

is(tram5_points)

## [1] "SpatialPointsDataFrame" "SpatialPoints"         
## [3] "Spatial"

Convertir les dades a geojson

Segons les explicacions de github, un dels formats que accepten és geojson. Aquest és un format obert per codificar objectes espaials amb els seus atributs no espacials utilitzant JSON.

Utilitzant el package rgdal podem escriure en aquest format les dades que disposem.

library(rgdal)

writeOGR(tram5_lines, "tram5.geojson", "tram5", driver = "GeoJSON")
writeOGR(tram5_points, "tram5_points.geojson", "tram5", driver = "GeoJSON")

Publicar el mapa a github i wordpress

Un cop tenim els fitxers en geojson, vaig crear un repositori a github anomenat rgeojson i fas el commit pertinent amb les dades. Si clickes a un dels fitxers veuràs el mapa.

Jo el que volia era incloure el mapa a l’entrada del bloc però no funcionava. Per lo vist, a wordpress.com que és el servei gratuït que utilitzem, no permeten afegir ni pluguins ni javascript ni res i per això no funcionava l’opció d’afegir el mapa del repositori de github. Per aquest motiu no havia publicat encara l’entrada, perquè sense el mapa em semblava que faltava la peça clau.

Des de github han treballat per disposar els teus mapes en un gist i per sort aquests sí que els accepta wordpress.com.

Aquí teniu el mapa del tram 5 de Zagreb.

Tags: , , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: