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
<- tibble(
apis 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
<- list()
api_content_lst for (ii in 1:nrow(apis)){
<- try(wfs <- WFSClient$new(apis$api_url[ii],
errori serviceVersion = apis$ver[ii],
logger = "INFO")
)if ("try-error" %in% class(errori)) next()
<- wfs$getCapabilities()
caps <- caps$findFeatureTypeByName("", exact = FALSE)
ft <- list()
data_lst if (length(ft) == 0) next()
for (i in 1:length(ft)){
<- tibble(name = ft[[i]]$getName(),
data_lst[[i]] title = ft[[i]]$getTitle())
}<- do.call(bind_rows, data_lst) %>%
api_content_lst[[ii]] 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
<- do.call(bind_rows, api_content_lst) %>%
api_content 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) %>%
::kable() knitr
provider | api_url | api_ver | aineistoja |
---|---|---|---|
Tilastokeskus | http://geo.stat.fi/geoserver/wfs | 1.0.0 | 297 |
HSY | https://kartta.hsy.fi/geoserver/wfs | 2.0.0 | 264 |
Helsinki | https://kartta.hel.fi/ws/geoserver/avoindata/wfs | 1.0.0 | 227 |
Espoo | https://kartat.espoo.fi/teklaogcweb/wfs.ashx | 1.0.0 | 197 |
Turku | https://opaskartta.turku.fi/TeklaOGCWeb/WFS.ashx | 1.0.0 | 176 |
Tampere | http://geodata.tampere.fi/geoserver/ows | 2.0.0 | 174 |
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 |
Jyväskylä | https://kartta.jkl.fi/TeklaOgcWeb/WFS.ashx | 1.0.0 | 91 |
Oulu | https://e-kartta.ouka.fi/TeklaOGCWeb/WFS.ashx | 1.0.0 | 90 |
Vantaa | http://gis.vantaa.fi/geoserver/wfs | 2.0.0 | 35 |
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.
::datatable(api_content %>% select(provider,title,name),
DTfilter = "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.
<- WFSClient$new("http://geo.stat.fi/geoserver/wfs",
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
<- wfs$getCapabilities()
caps <- caps$findFeatureTypeByName("tilastointialueet:avi1000k_2013", exact = TRUE)
ft <- ft$getFeatures() shape
## [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")