rOpenGov / helsinki
1
# This file is a part of the helsinki package (http://github.com/rOpenGov/helsinki)
2
# in association with the rOpenGov project (ropengov.github.io)
3

4
# Copyright (C) 2010-2014 Juuso Parkkinen, Leo Lahti and Joona Lehtomaki / Louhos <louhos.github.com>. 
5
# All rights reserved.
6

7
# This program is open source software; you can redistribute it and/or modify 
8
# it under the terms of the FreeBSD License (keep this notice): 
9
# http://en.wikipedia.org/wiki/BSD_licenses
10

11
# This program is distributed in the hope that it will be useful, 
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of 
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14

15

16
#' Retrieve data from Helsinki Region Environmental Services
17
#'
18
#' Retrieves data from Helsinki Region Environmental
19
#' Services Authority (Helsingin seudun ymparistopalvelu HSY) 
20
#' http://www.hsy.fi/seututieto/kaupunki/paikkatiedot/Sivut/Avoindata.aspx
21
#' For data description (in Finnish) see:
22
#' http://www.hsy.fi/seututieto/Documents/Paikkatiedot/Tietokuvaukset_kaikki.pdf. 
23
#' The data copyright (C) HSY 2011.
24
#'
25
#' @param which.data A string. Specify the name of the retrieved HSY data set. Options: Vaestotietoruudukko; Rakennustietoruudukko; SeutuRAMAVA_kosa; SeutuRAMAVA_tila. These are documented in HSY data description document (see above).
26
#' @param which.year An integer. Specify the year for the data to be retrieved.
27
#' @param data.dir A string. Specify a temporary folder for storing downloaded data.
28
#' @param verbose logical. Should R report extra information on progress? 
29
#'
30
#' @return Shape object (from SpatialPolygonsDataFrame class)
31
#' @import maptools
32
#' @importFrom sp CRS
33
#' @export
34
#' @references See citation("helsinki") 
35
#' @author Juuso Parkkinen and Leo Lahti \email{louhos@@googlegroups.com}
36
#' @examples vaesto.sp <- get_hsy("Vaestotietoruudukko")
37
#' @keywords utilities
38

39
get_hsy <- function (which.data=NULL, which.year=2013, data.dir=tempdir(), verbose=TRUE) {
40
  
41 0
  message("IMPORTANT NOTE! HSY open data services have been recently updated and get_hsy() function is outdated! It will be updated soon, meanwhile use the services directly at https://www.hsy.fi/fi/asiantuntijalle/avoindata/Sivut/default.aspx.")
42 0
  return(NULL)
43
  
44 0
  if (is.null(which.data)) {
45 0
    message("Available HSY datasets:
46 0
  'Vaestotietoruudukko': Ruutukohtaista tietoa vaeston lukumaarasta, ikajakaumasta ja asumisvaljyydesta. Vuodet: 1997-2003, 2008-2013.
47 0
  'Rakennustietoruudukko': Ruutukohtaista tietoa rakennusten lukumaarasta, kerrosalasta, kayttotarkoituksesta ja aluetehokkuudesta. Ruutukoko 500x500 metria. Vuodet: 1997-2003, 2008-2013.
48 0
  'SeutuRAMAVA_kosa': kaupunginosittain summattua tietoa rakennusmaavarannosta. Vuodet: 2010-2013.
49 0
  'SeutuRAMAVA_tila': tilastoalueittain summattua tietoa rakennusmaavarannosta. Vuodet: 1997-2001, 2010-2013")
50 0
    stop("Please specify 'which.data'")
51
  }
52
  
53 0
  if (which.data=="SeutuRAMAVA_tila" & which.year==2012)
54 0
    stop("Data for SeutuRAMAVA_tila 2012 is not readable with maptools::readShapePoly. You can try using the rgdal-package if you need to access that data!")
55
  
56
  # Create data.dir if it does not exist
57 0
  if (!file.exists(data.dir))
58 0
    dir.create(data.dir)
59
  
60
  
61
  ## Download data ----------------------------------------------------
62
  
63
  # Specify download url
64 0
  if (which.data=="Vaestotietoruudukko") {
65 0
    if (which.year==2013)
66 0
      zip.file <- paste0("Vaestotietoruudukko", "_", which.year, "_SHP.zip")
67 0
    else if (which.year==2012)
68 0
      zip.file <- paste0("Vaestoruudukko", "_", which.year, ".zip")
69
    else
70 0
      zip.file <- paste0("Vaestoruudukko", "_SHP_", which.year, ".zip")
71
    
72 0
  } else if (which.data=="Rakennustietoruudukko") {
73 0
    if (which.year==2013)
74 0
      zip.file <- paste0("Rakennustietoruudukko", "_", which.year, "_SHP.zip")
75 0
    else if (which.year==2012)
76 0
      zip.file <- paste0("Rakennustietoruudukko", "_", which.year, ".zip")
77
    else
78 0
      zip.file <- paste0("Rakennustietoruudukko", "_SHP_", which.year, ".zip")
79
    
80 0
  } else if (which.data=="SeutuRAMAVA_kosa") {
81 0
    if (which.year==2013) {
82 0
      zip.file <- paste0("SeutuRamava_kosa_", which.year, "_SHP.zip")
83 0
    } else if (which.year %in% c(2011, 2012)) {
84 0
      zip.file <- paste0("SeutuRAMAVA_SHP_", which.year, ".zip")
85
    } else {
86 0
      zip.file <- paste0("SeutuRAMAVA_SHP.zip")
87
    }
88
    
89 0
  } else if (which.data=="SeutuRAMAVA_tila") {
90 0
    if (which.year==2013) {
91 0
      zip.file <- paste0("SeutuRamava_tila_", which.year, "_SHP.zip")
92 0
    } else if (which.year==2012) {
93 0
      zip.file <- paste0("SeutuRAMAVA_tila_shp", which.year, ".zip")
94
    } else {
95 0
      zip.file <- paste0("SeutuRAMAVA_tila_", which.year, "_SHP.zip")
96
    }
97
  } else {
98 0
    stop("Invalid 'which.data' argument")
99
  }
100
  
101
  # Download data
102 0
  if (which.data=="SeutuRAMAVA_kosa" & which.year==2010) {
103 0
    remote.zip <- paste0("http://www.hsy.fi/seututieto/Documents/Paikkatiedot/", zip.file) 
104
  } else {
105 0
    remote.zip <- paste0("http://www.hsy.fi/seututieto/kaupunki/paikkatiedot/Documents/", zip.file)
106
  }
107 0
  local.zip <- file.path(data.dir, zip.file)
108 0
  if (!file.exists(local.zip)) {
109
    # Check whether url available
110 0
    if (!RCurl::url.exists(remote.zip)) {
111 0
      message(paste("Sorry! Url", remote.zip, "not available!\nReturned NULL."))
112 0
      return(NULL)
113
    }
114
    
115 0
    if (verbose)
116 0
      message("Dowloading ", remote.zip, "\ninto ", local.zip, "\n")
117 0
    utils::download.file(remote.zip, destfile = local.zip, quiet=!verbose)
118
  } else {
119 0
    if (verbose)
120 0
      message("File ", local.zip, " already found, will not download again!")
121
  }  
122
  
123
  ## Process data -----------------------------------------------
124
  
125
  # Unzip the downloaded zip file
126 0
  utils::unzip(local.zip, exdir = data.dir)
127
  
128
  # Define shapefile
129 0
  if (which.data=="Vaestotietoruudukko") {
130 0
    if (verbose)
131 0
      message("For detailed description of ", which.data, " see\nhttp://www.hsy.fi/seututieto/kaupunki/paikkatiedot/Documents/Vaestoruudukko.pdf")
132 0
    if (which.year %in% c(2012, 2013))
133 0
      sp.file <- paste0(data.dir, "/Vaestotietoruudukko_", which.year, ".shp")
134
    else
135 0
      sp.file <- paste0(data.dir, "/Vaestoruudukko_", which.year, ".shp")
136
    
137 0
  } else if (which.data=="Rakennustietoruudukko") {
138 0
    if (verbose)
139 0
      message("For detailed description of ", which.data, " see\nhttp://www.hsy.fi/seututieto/kaupunki/paikkatiedot/Documents/Rakennustietoruudukko.pdf")
140 0
    if (which.year==2012)
141 0
      sp.file <- paste0(data.dir, "/Rakennustitetoruudukko_", which.year, ".shp")
142
    else
143 0
      sp.file <- paste0(data.dir, "/Rakennustietoruudukko_", which.year, ".shp")
144
    
145 0
  } else if (which.data=="SeutuRAMAVA_kosa") {
146 0
    if (verbose) 
147 0
      message("For detailed description of ", which.data, " see\nhttp://www.hsy.fi/seututieto/kaupunki/paikkatiedot/Documents/SeutuRAMAVA.pdf")
148 0
    if (which.year==2013)
149 0
      sp.file <- paste0(data.dir, "/SeutuRamava_kosa_", which.year, ".shp")
150 0
    else if (which.year==2012)
151 0
      sp.file <- paste0(data.dir, "/SeutuRAMAVA_kosa_", which.year, ".shp")
152
    else
153 0
      sp.file <- paste0(data.dir, "/SeutuRAMAVA_", which.year, ".shp")
154
    
155 0
  } else if (which.data=="SeutuRAMAVA_tila") {
156 0
    if (verbose)
157 0
      message("For detailed description of ", which.data, " see\nhttp://www.hsy.fi/seututieto/kaupunki/paikkatiedot/Documents/SeutuRAMAVA.pdf")
158 0
    if (which.year==2013)
159 0
      sp.file <- paste0(data.dir, "/SeutuRamava_tila_", which.year, ".shp")
160 0
    else if (which.year==2012)
161 0
      sp.file <- paste0(data.dir, "/SeutuRAMAVA_Tila_", which.year, ".shp")
162
    else
163 0
      sp.file <- paste0(data.dir, "/SeutuRAMAVA_", which.year, "_SHP.shp")
164
  }
165
  
166
  # Read shapefile and add coordinate information manually (ETRS-GK25 -> EPSG:3879)
167 0
  p4s <- "+init=epsg:3879 +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
168 0
  sp <- maptools::readShapePoly(fn=sp.file, proj4string=sp::CRS(p4s))
169
    
170
  # Add KATAKER to rakennustieto, mailaa '11' SePe:lle
171 0
  if (which.data=="Rakennustietoruudukko") {
172 0
    KATAKER.key <- kataker_key()
173 0
    kk.df <- data.frame(list(KATAKER = as.integer(names(KATAKER.key)), description = KATAKER.key))
174 0
    temp <- sp@data
175 0
    temp$KATAKER1.description <- kk.df$description[match(temp$KATAKER1, kk.df$KATAKER)]
176 0
    temp$KATAKER2.description <- kk.df$description[match(temp$KATAKER2, kk.df$KATAKER)]
177 0
    temp$KATAKER3.description <- kk.df$description[match(temp$KATAKER3, kk.df$KATAKER)]
178 0
    sp@data <- temp
179 0
    message("\nAdded KATAKER descriptions to Rakennustietoruudukko")
180
  }
181
  
182
  # Fix characters in SeutuRAMAVA data
183 0
  if (which.data=="SeutuRAMAVA_kosa") {
184 0
    for (nam in c("OMLAJI_1S", "OMLAJI_2S", "OMLAJI_3S", "NIMI", "NIMI_SE"))    
185 0
      sp[[nam]] <-  factor(iconv(sp[[nam]], from = "latin1", to = "UTF-8"))
186
  }
187 0
  if (which.data=="SeutuRAMAVA_tila") {
188 0
    for (nam in c("OMLAJI_1S", "OMLAJI_2S", "OMLAJI_3S", "NIMI"))    
189 0
      sp[[nam]] <-  factor(iconv(sp[[nam]], from = "latin1", to = "UTF-8"))
190
  }
191
  
192 0
  if (verbose)
193 0
    message("\nData loaded succesfully!")
194 0
  return(sp)
195
}
196

197

198
kataker_key <- function () {
199 0
  KATAKER.key <- c(
200 0
    "11"   = "Yhden asunnon talot", 
201 0
    "12"  = "Kahden asunnon talot", 
202 0
    "13"  = "Muut erilliset pientalot", 
203 0
    "21"  = "Rivitalot", 
204 0
    "22"  = "Ketjutalot", 
205 0
    "32"  = "Luhtitalot", 
206 0
    "39"  = "Muut kerrostalot", 
207 0
    "41"  = "Vapaa-ajan asunnot",
208 0
    "111" = "Myymalahallit", 
209 0
    "112" = "Liike- ja tavaratalot, kauppakeskukset",
210 0
    "119" = "Myymalarakennukset ", 
211 0
    "121" = "Hotellit, motellit, matkustajakodit, kylpylahotellit", 
212 0
    "123" = "Loma- lepo- ja virkistyskodit", 
213 0
    "124" = "Vuokrattavat lomamokit ja osakkeet (liiketoiminnallisesti)", 
214 0
    "129" = "Muut majoitusliikerakennukset",
215 0
    "131" = "Asuntolat, vanhusten palvelutalot, asuntolahotellit",
216 0
    "139" = "Muut majoitusrakennukset", 
217 0
    "141" = "Ravintolat, ruokalat ja baarit", 
218 0
    "151" = "Toimistorakennukset", 
219 0
    "161" = "Rautatie- ja linja- autoasemat, lento- ja satamaterminaalit", 
220 0
    "162" = "Kulkuneuvojen suoja- ja huoltorakennukset", 
221 0
    "163" = "Pysakointitalot", 
222 0
    "164" = "Tietoliikenteen rakennukset", 
223 0
    "165" = "Muut liikenteen rakennukset", 
224 0
    "169" = "Muut liikenteen rakennukset", 
225 0
    "211" = "Keskussairaalat", 
226 0
    "213" = "Muut sairaalat", 
227 0
    "214" = "Terveyskeskukset", 
228 0
    "215" = "Terveydenhoidon erityislaitokset (mm. kuntoutuslaitokset)", 
229 0
    "219" = "Muut terveydenhoitorakennukset", 
230 0
    "221" = "Vanhainkodit", 
231 0
    "222" = "Lastenkodit, koulukodit", 
232 0
    "223" = "Kehitysvammaisten hoitolaitokset", 
233 0
    "229" = "Muut huoltolaitosrakennukset", 
234 0
    "231" = "Lasten paivakodit", 
235 0
    "239" = "Muut sosiaalitoimen rakennukset", 
236 0
    "241" = "Vankilat", 
237 0
    "311" = "Teatterit, konsertti- ja kongressitalot, oopperat", 
238 0
    "312" = "Elokuvateatterit",
239 0
    "322" = "Kirjastot", 
240 0
    "323" = "Museot, taidegalleriat",
241 0
    "324" = "Nayttelyhallit", 
242 0
    "331" = "Seurain-, nuoriso- yms. talot",
243 0
    "341" = "Kirkot, kappelit, luostarit, rukoushuoneet",
244 0
    "342" = "Seurakuntatalot", 
245 0
    "349" = "Muut uskonnollisten yhteisojen rakennukset", 
246 0
    "351" = "Jaahallit", 
247 0
    "352" = "Uimahallit", 
248 0
    "353" = "Tennis-, squash- ja sulkapallohallit",
249 0
    "354" = "Monitoimi- ja muut urheiluhallit",
250 0
    "359" = "Muut urheilu- ja kuntoilurakennukset", 
251 0
    "369" = "Muut kokoontumis- rakennukset", 
252 0
    "511" = "Peruskoulut, lukiot ja muut", 
253 0
    "521" = "Ammatilliset oppilaitokset", 
254 0
    "531" = "Korkeakoulu- rakennukset",
255 0
    "532" = "Tutkimuslaitosrakennukset", 
256 0
    "541" = "Jarjestojen, liittojen, tyonantajien yms.  opetusrakennukset", 
257 0
    "549" = "Muualla luokittelemattomat opetusrakennukset", 
258 0
    "611" = "Voimalaitosrakennukset", 
259 0
    "613" = "Yhdyskuntatekniikan rakennukset", 
260 0
    "691" = "Teollisuushallit", 
261 0
    "692" = "Teollisuus- ja pienteollisuustalot", 
262 0
    "699" = "Muut teollisuuden tuotantorakennukset", 
263 0
    "711" = "Teollisuusvarastot",
264 0
    "712" = "Kauppavarastot", 
265 0
    "719" = "Muut varastorakennukset",
266 0
    "721" = "Paloasemat", 
267 0
    "722" = "Vaestonsuojat", 
268 0
    "723" = "Halytyskeskukset",
269 0
    "729" = "Muut palo- ja pelastustoimen rakennukset", 
270 0
    "811" = "Navetat, sikalat, kanalat yms.", 
271 0
    "819" = "Elainsuojat, ravihevostallit, maneesit", 
272 0
    "891" = "Viljankuivaamot ja viljan sailytysrakennukset, siilot", 
273 0
    "892" = "Kasvihuoneet", 
274 0
    "893" = "Turkistarhat", 
275 0
    "899" = "Muut maa-, metsa- ja kalatalouden rakennukset", 
276 0
    "931" = "Saunarakennukset",
277 0
    "941" = "Talousrakennukset", 
278 0
    "999" = "Muut rakennukset", 
279 0
    "999999999" = "Puuttuvan tiedon merkki")
280
  
281 0
  KATAKER.key
282
}

Read our documentation on viewing source code .

Loading