Dette kjem på kartet i 2014

Ei nyttårsgåve frå oss på bord4: Ein superenkel veg til interaktive kart, utan å vere avhengig av Google.

europa


«Where is the new when»: Slikt kan vi slenge ut over arbeidsbordet vårt. Det er meir enn berre eit fancy motto. I sakte medium er tidspunktet for ei hending vel så viktig som staden. Men med den digitale journalistikken, der tidsrommet mellom hending og rapportering nærmar seg 0 og hendinga vert dokumentert medan den skjer, er geografi blitt viktigare enn tidsplassering.

Kart har derfor ein særs viktig plass i digitaljournalistikken. Å få dei ut raskt, er ein dyd under løpande hendingar.
Google revolusjonerte den digitale kartverda, og framleis og i uoverskueleg framtid vil Google vere kartkonge på nett. Men sjølv om Google Maps er lett å ta i bruk, kjem karta med nokre ulempar:

  • Du må gje trafikk til Google.
  • Du kan ikkje vere trygg på at Google vil bruke dine kart til eiga vinning.
  • Etter eit visst tal klikk krevjer Google betaling.
  • Karta dine ser kliss like ut som alle andre sine.

Eg har vore meir enn middels interessert i kart sidan eg vart digitaljournalist på heiltid. Og eg har leitt etter alternativ til Google, der du kjapt og like enkelt som med Google kan lage interaktive kart.
Svaret? R, sjølvsagt.

Merk deg Rcharts: Det kan bli buzzordet i 2014. Eg kom over Rcharts då eg såg etter R-pakker som kan omgjere R-kode til brukbar HTML. Rcharts gjer det, og mykje meir: Skaparen Ramnath Vaidyanathan har som ambisjon å koble Rcharts til alle dei feitaste javascript-visualiseringsbiblioteka i verda.
Eg har tidlegare omtala Rcharts, og allereie då var eg klar over at Rcharts òg ser bygd for å lage Leaflet-kart.

Leaflet skapar kart som er mobilvenlege og byggjer på open kjeldekode. Eg skreiv eit R-skript som har som utgangspunkt at du har kartdata i ein .csv-fil: Tre kolonnar på denne forma (desimalgradar), som dette:

Breddegrad,lengdegrad,info
50.3345,5.32345,’Dette er eit punkt på kartet’
45.23345,4.45677,’Dette er eit anna punkt på kartet’

Om du treng finne koordinatane til ein plass, er dette ein super hjelp.

Skriptet gjer så følgjande:

  • Det spør deg etter kor du har lagra dataene.
  • Det spør etter zoom-nivå, bredde og høgde på kartet.
  • Det let deg velje karttype av fleire ulike leverandørar, som OpenStreetMap, Stamen og Nokia.
  • Det knallar ut kartet i ein nettlesar.
  • No kan du kopiere kjeldekoden og legge det på eigen server, om du vil.

Til dømet mitt fann eg koordinatar over 200 hovedstadar i verda og tilpassa dei csv-formatet mitt (lat,lon,info). Når dataene var på plass, tar det berre fem sekund å lage eit kart med R-skriptet. Og du kan variere med meir enn 20 ulike karttypar.

Her er eitt av dei.

Her er eitt til.

Og her er koden:
library(rCharts)
#Les inn data
fil <- as.character(readline("Hva heter datafilen? "))
df <- read.table(fil, sep=",", header=TRUE, stringsAsFactors=FALSE)
df[,3] <- sub("^ +", "", df[,3])

#Les inn tilgjengelige karttyper
lag <- read.table('lag.txt', header=FALSE, stringsAsFactors=FALSE)
colnames(lag) <- "Karttype"

#Lag nytt kart
kart <- Leaflet$new()
z <- as.integer(readline("Sett zoom (1-20, 1=lengst fra): ")) #Sett zoom
centr <- c(mean(df[,1]),mean(df[,2])) #Sett sentrum i kartet
kart$setView(centr, zoom=z)

# Sett høyde og bredde
width <- as.integer(readline("Sett bredde (px): "))
height <- as.integer(readline("Sett høyde (px): "))
kart$set(width = width, height = height)

#Velg lag
print(lag)
type <- as.integer(readline("Velg type (nr): "))
kart$tileLayer(provider = lag[type,])

# Hent tekster til popupbokser
txt <- lapply(1:length(df[,1]), function(k) paste0("",df[k,3], ""))

for (i in 1:length(df[,1])) {
kart$marker(c(df[i,1], df[i,2]), bindPopup = as.character(txt[i]))
}
print(kart)