ows4R-paketti ja Tilastokeskuksen, suurimpien kaupunkien ja muiden organisaatioiden wfs-rajapintojen datat R:ssä

data analysis
Author

Markus Kainu

Published

June 24, 2019

Pikainen postaus itselle muistiin ja muille tiedoksi.

ows4R: Interface to OGC Web-Services (OWS) on melko uusi R-paketti avointen paikkatietorajapintastandardien lukemiseen R:ssä.

wfs (Web Feature Service) on vektorimuotoisen paikkatietodatan rajapintastandardi ja Suomessa monet organisaatiot jakavat paikkatietodataan sen avulla.

Tässä postissa listataan ensin muutaman viranomaisten ja suuren kaupungin rajapintojen sisällöt. Lopuksi piirretään kartta Tilastokeskuksen aineistosta R:llä.

</>
# Tarvittavat kirjastot
library(ows4R)
library(dplyr)
# Data apien endpointeista ja versioista
apis <- tibble(
  api_url = c("http://geo.stat.fi/geoserver/wfs",
              "http://avaa.tdata.fi/geoserver/paituli/wfs",
              "http://geoserver.ymparisto.fi/geoserver/wfs?",
              "https://kartta.hsy.fi/geoserver/wfs",
              "https://kartta.hel.fi/ws/geoserver/avoindata/wfs",
              "http://geoserver.hel.fi/geoserver/ows",
              "https://kartat.espoo.fi/teklaogcweb/wfs.ashx",
              "http://gis.vantaa.fi/geoserver/wfs",
              "http://geodata.tampere.fi/geoserver/ows",
              "https://opaskartta.turku.fi/TeklaOGCWeb/WFS.ashx",
              "https://e-kartta.ouka.fi/TeklaOGCWeb/WFS.ashx",
              "http://kartta.kuopio.fi/TeklaOgcWeb/WFS.ashx",
              "https://kartta.rovaniemi.fi/teklaogcweb/WFS.ashx",
              "https://kartta.jkl.fi/TeklaOgcWeb/WFS.ashx",
              "http://lipas.cc.jyu.fi/geoserver/lipas/ows"),
  ver = c("1.0.0",
          "2.0.0",
          "2.0.0",
          "2.0.0",
          "1.0.0",
          "2.0.0",
          "1.0.0",
          "2.0.0",
          "2.0.0",
          "1.0.0",
          "1.0.0",
          "1.0.0",
          "1.0.0",
          "1.0.0",
          "1.0.0"),
  provider = c("Tilastokeskus",
               "Paituli",
               "Syke",
               "HSY",
               "Helsinki",
               "Helsinki geoserver",
               "Espoo",
               "Vantaa",
               "Tampere",
               "Turku",
               "Oulu",
               "Kuopio",
               "Rovaniemi",
               "Jyväskylä",
               "LIPAS")
)

# käydään apit läpi ja kootaan saatavilla olevat datat
api_content_lst <- list()
for (ii in 1:nrow(apis)){
  
  errori <- try(wfs <- WFSClient$new(apis$api_url[ii], 
                       serviceVersion = apis$ver[ii], 
                       logger = "INFO")
  )
  if ("try-error" %in% class(errori)) next()
  caps <- wfs$getCapabilities()
  ft <- caps$findFeatureTypeByName("", exact = FALSE)
  data_lst <- list()
  if (length(ft) == 0) next()
  for (i in 1:length(ft)){
    data_lst[[i]] <- tibble(name = ft[[i]]$getName(),
                           title = ft[[i]]$getTitle())
  }
api_content_lst[[ii]] <- do.call(bind_rows, data_lst) %>% 
  mutate(provider = apis$provider[ii],
         api_url = apis$api_url[ii],
         api_ver = apis$ver[ii])
}
[ows4R][INFO] OWSGetCapabilities - Fetching http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching http://avaa.tdata.fi/geoserver/paituli/wfs?service=WFS&version=2.0.0&request=GetCapabilities 
StartTag: invalid element name
Extra content at the end of the document
Error : 1: StartTag: invalid element name
2: Extra content at the end of the document

[ows4R][INFO] OWSGetCapabilities - Fetching http://geoserver.ymparisto.fi/geoserver/wfs?service=WFS&version=2.0.0&request=GetCapabilities 
Opening and ending tag mismatch: hr line 5 and body
Opening and ending tag mismatch: body line 5 and html
EndTag: '</' not found
Error : 1: Opening and ending tag mismatch: hr line 5 and body
2: Opening and ending tag mismatch: body line 5 and html
3: EndTag: '</' not found

[ows4R][INFO] OWSGetCapabilities - Fetching https://kartta.hsy.fi/geoserver/wfs?service=WFS&version=2.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching https://kartta.hel.fi/ws/geoserver/avoindata/wfs?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching http://geoserver.hel.fi/geoserver/ows?service=WFS&version=2.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching https://kartat.espoo.fi/teklaogcweb/wfs.ashx?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching http://gis.vantaa.fi/geoserver/wfs?service=WFS&version=2.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching http://geodata.tampere.fi/geoserver/ows?service=WFS&version=2.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching https://opaskartta.turku.fi/TeklaOGCWeb/WFS.ashx?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching https://e-kartta.ouka.fi/TeklaOGCWeb/WFS.ashx?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching http://kartta.kuopio.fi/TeklaOgcWeb/WFS.ashx?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching https://kartta.rovaniemi.fi/teklaogcweb/WFS.ashx?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching https://kartta.jkl.fi/TeklaOgcWeb/WFS.ashx?service=WFS&version=1.0.0&request=GetCapabilities 
[ows4R][INFO] OWSGetCapabilities - Fetching http://lipas.cc.jyu.fi/geoserver/lipas/ows?service=WFS&version=1.0.0&request=GetCapabilities 
</>
api_content <- do.call(bind_rows, api_content_lst) %>% 
  mutate(provider = factor(provider)) %>%
  select(provider,title,name,api_url,api_ver)

# Aineistojen määrä per organisaatio
api_content %>% 
  count(provider,api_url,api_ver)  %>% 
  arrange(desc(n)) %>% 
  rename(aineistoja = n) %>%  
  knitr::kable()
provider api_url api_ver aineistoja
Tilastokeskus http://geo.stat.fi/geoserver/wfs 1.0.0 306
HSY https://kartta.hsy.fi/geoserver/wfs 2.0.0 276
Helsinki https://kartta.hel.fi/ws/geoserver/avoindata/wfs 1.0.0 231
Espoo https://kartat.espoo.fi/teklaogcweb/wfs.ashx 1.0.0 201
Turku https://opaskartta.turku.fi/TeklaOGCWeb/WFS.ashx 1.0.0 188
Tampere http://geodata.tampere.fi/geoserver/ows 2.0.0 153
LIPAS http://lipas.cc.jyu.fi/geoserver/lipas/ows 1.0.0 145
Helsinki geoserver http://geoserver.hel.fi/geoserver/ows 2.0.0 105
Oulu https://e-kartta.ouka.fi/TeklaOGCWeb/WFS.ashx 1.0.0 100
Jyväskylä https://kartta.jkl.fi/TeklaOgcWeb/WFS.ashx 1.0.0 93
Vantaa http://gis.vantaa.fi/geoserver/wfs 2.0.0 34
Rovaniemi https://kartta.rovaniemi.fi/teklaogcweb/WFS.ashx 1.0.0 2

Aineistot yhdessä taulukossa

Alla olevasta taulukosta voit hakea aineistoja tai vaihtoehtoisesti viedä datan ekseliin.

</>
DT::datatable(api_content %>% select(provider,title,name), 
              filter = "top", 
              rownames = FALSE, 
              extensions = 'Buttons', 
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'))
)

Aineiston lataaminen ja kartan piirtäminen

Ylläolevassa taulukossa on ylimmäisenä Tilastokeskuksen tarjoama AVI-alueet 2013 (1:1 000 000) aineisto, jonka name on tilastointialueet:avi1000k_2013. Tämän postin alusta löytyy Tilastokeskuksen wfs-rajapinnan osoite ja versio. Näillä tiedoilla voit hakea alla olevan esimerkin mukaisesti ko. aineiston ja piirtää siitä kartan ggplot2-kirjaston avulla.

</>
wfs <- WFSClient$new("http://geo.stat.fi/geoserver/wfs", 
                       serviceVersion = "1.0.0", 
                       logger = "INFO")
[ows4R][INFO] OWSGetCapabilities - Fetching http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&request=GetCapabilities 
</>
caps <- wfs$getCapabilities()
ft <- caps$findFeatureTypeByName("tilastointialueet:avi1000k_2013", exact = TRUE)
shape <- ft$getFeatures()  
[ows4R][INFO] WFSDescribeFeatureType - Fetching http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&typeName=tilastointialueet:avi1000k_2013&request=DescribeFeatureType 
[ows4R][INFO] WFSGetFeature - Fetching http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&typeName=tilastointialueet:avi1000k_2013&request=GetFeature 
</>
library(ggplot2)
library(hrbrthemes)
ggplot(shape, aes(fill = nimi, label = stringr::str_trim(nimi))) + 
  geom_sf(alpha = .6, color = alpha("white", 2/3)) + 
  geom_sf_label(color = "white", family = "Roboto Condensed") +
  theme_ipsum_rc(grid_col = "white") +
  theme(axis.text = element_blank(),
        axis.title = element_blank()) +
  scale_fill_ipsum() +
  theme(legend.position = "none") +
  labs(title = "AVI-alueet 2013 (1:1 000 000)", 
       caption = "Data: http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&typeName=tilastointialueet:avi1000k_2013")

Reuse

CC BY 4.0

Citation

BibTeX citation:
@online{kainu2019,
  author = {Markus Kainu},
  editor = {},
  title = {ows4R-Paketti Ja {Tilastokeskuksen,} Suurimpien Kaupunkien Ja
    Muiden Organisaatioiden Wfs-Rajapintojen Datat {R:ssä}},
  date = {2019-06-24},
  url = {https://markuskainu.fi/posts/2019-06-24-ows4R-paketti-ja-tk-wfs},
  langid = {en}
}
For attribution, please cite this work as:
Markus Kainu. 2019. “ows4R-Paketti Ja Tilastokeskuksen, Suurimpien Kaupunkien Ja Muiden Organisaatioiden Wfs-Rajapintojen Datat R:ssä.” June 24, 2019. https://markuskainu.fi/posts/2019-06-24-ows4R-paketti-ja-tk-wfs.