Tilastokeskuksen ja Maanmittauslaitoksen OCP API Features rajapintojen hyödyntäminen R-kielellä

ogc api
spatial
data
R
maastotietokanta
tilastokeskus
mml
Tekijä

Markus Kainu

Julkaistu

25. tammikuuta 2023

Mikäli Open Geospatial Consortiumin rajapintastandardit eivät ole tuttuja, asiaan perehtyminen kannattaa aloittaa Jari Reinin artikkelista OGC API Features määrittelee uudet suuntaviivat rajapintapalveluille (Positio 1/2020).

Sekä Maanmittauslaitos että Tilastokeskus ovat alkaneet jakamaan avoimia aineistojaan aikaisempien WFS-rajapintojen rinnalle myös OGC API Features standardia mukaisilla rajapinnoilla.

Tilastokeskuksen hallinnollisten aluerajojen rajapinnat

Tilastokeskuksen Avoimet paikkatietoaineistot -sivulla tilannetta kuvataan

Tilastokeskuksen aineistot ovat saatavilla WMS- ja WFS-rajapinnalta. Osa aineistosta on saatavana myös INSPIRE-direktiivin mukaisessa muodossa sekä WMS-rajapinnalta että uudentyyppiseltä OGC API Features -rajapinnalta.

Tässä esimerkissä olemme kiinnostuneet vuoden 2022 kuntajaosta. wfs-rajapinnasta se löytyy polusta http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&request=getFeature&typename=tilastointialueet%3Akunta4500k_2022. Sen voi lukea R:ään suoraan sf::st_read()-funktiolla. Koska GML-data ei sisällä tietoa koordinaattijärjestelmästä, se täytyy erikseen asettaa lukemisen yhteydessä. Tiedän että Tilastokeskuksen kuntarajoille se on epsg:3067 (ETRS89 / TM35FIN)

library(sf)
library(dplyr)
library(ggplot2)
library(patchwork)
library(purrr)
library(kableExtra)
library(knitr)
library(httr2)
library(mapview)

muni_wfs <- st_read("http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&request=getFeature&typename=tilastointialueet%3Akunta4500k_2022", crs = 3067)
Reading layer `kunta4500k_2022' from data source 
  `http://geo.stat.fi/geoserver/wfs?service=WFS&version=1.0.0&request=getFeature&typename=tilastointialueet%3Akunta4500k_2022' 
  using driver `GML'
Simple feature collection with 309 features and 6 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 83747.59 ymin: 6637032 xmax: 732907.7 ymax: 7776431
Projected CRS: ETRS89 / TM35FIN(E,N)
head(muni_wfs)
Simple feature collection with 6 features and 6 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 250110.7 ymin: 6704556 xmax: 442401.8 ymax: 7133254
Projected CRS: ETRS89 / TM35FIN(E,N)
             gml_id kunta vuosi      nimi      namn      name
1 kunta4500k_2022.1   005  2022  Alajärvi  Alajärvi  Alajärvi
2 kunta4500k_2022.2   009  2022 Alavieska Alavieska Alavieska
3 kunta4500k_2022.3   010  2022    Alavus     Alavo    Alavus
4 kunta4500k_2022.4   016  2022  Asikkala  Asikkala  Asikkala
5 kunta4500k_2022.5   018  2022    Askola    Askola    Askola
6 kunta4500k_2022.6   019  2022      Aura      Aura      Aura
                            geom
1 MULTIPOLYGON (((366787.9 70...
2 MULTIPOLYGON (((382543.4 71...
3 MULTIPOLYGON (((343298.2 69...
4 MULTIPOLYGON (((436139.7 67...
5 MULTIPOLYGON (((426631 6720...
6 MULTIPOLYGON (((263938.3 67...

Sama tieto löytyy ns. Inspire-direktiivin mukaisena OGC API Features rajapinnasta geojson-muodossa osoitteesta: https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=10&f=json. Merkille pantavaa tässä uudessa standardissa on se ladattavaa aineistoon voi vaikuttaa antamalla rajapinnalle erilaisia parametrejä. Aineistoa voi filttereröidä tai sen tiedostomuotoa tai koordinaattijärjestelmää voi muuttaa apin parametreillä.

Oletuksena se palauttaa hallinnollisten aluerajojen rajapinnasta 10 ensimmäistä aluetta ESPF:3067-koordinaattijärjestelmässä resoluutiolla 1:4500000 json-muodossa. Alla on ote vastauksesta, jossa on mukana ensimmäinen tietue ilman koordinaatteja, Etelä-Suomen AVI, sekä muut apin palauttamat tiedot.

{
    "type": "FeatureCollection",
    "crs": {
        "type": "name",
        "properties": {
            "name": "http://www.opengis.net/def/crs/EPSG/0/3067"
        }
    },
    "features": [{
        "id": "http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit/avi_1_20220101_1/2022/4500k",
        "type": "Feature",
        "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
                [
                    [
                        [
                            272652.088811277,
                            6637031.52697968
                        ]
                    ]
                ]
            ]
        },
        "properties": {
            "featureType": "AreaStatisticalUnit",
            "inspireId_localId": "avi_1_20220101_1",
            "inspireId_versionId": "2022",
            "inspireId_namespace": "http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit",
            "beginLifespanVersion": "2022-01-01T00:00:00+0200",
            "endLifespanVersion": "2023-01-01T00:00:00+0200",
            "country": "http://inspire.ec.europa.eu/codeList/CountryCode/FI",
            "geographicalName_fin": "Etelä-Suomen AVI",
            "geographicalName_swe": "Södra Finlands RFV",
            "geographicalName_eng": "Southern Finland AVI",
            "nationalCode": "1",
            "tessellation": "avi",
            "tessellationId": "avi_1_20220101",
            "thematicId": null,
            "referencePeriod_beginPosition": "2022-01-01T00:00:00+0200",
            "referencePeriod_endPosition": "2023-01-01T00:00:00+0200",
            "areaValue": 42349.28,
            "areaValue_uom": "km2",
            "landAreaValue": 29897.189999999988,
            "landAreaValue_uom": "km2",
            "geometry_geometryDescription": "http://inspire.ec.europa.eu/codelist/GeometryTypeValue/generalisedGeometry",
            "geometry_scale": "4500k"
        }
    }],
    "timeStamp": "2023-01-26T09:44:54.696Z",
    "links": [{
        "href": "https://geo.stat.fi:443/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=10&f=json",
        "rel": "self",
        "type":"application/geo+json",
        "title":"This document"
    },{
        "href": "https://geo.stat.fi:443/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=10&f=html",
        "rel": "alternate",
        "type":"text/html",
        "title":"This document"
    },{
        "href": "https://geo.stat.fi:443/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=10&nextToken=10",
        "rel": "next",
        "type":"application/geo+json",
        "title":"Next results"
    },{
        "href": "https://geo.stat.fi:443/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=10&nextToken=10&f=html",
        "rel": "next",
        "type":"text/html",
        "title":"Next results"
    }],
    "numberReturned": 10
}

Rajapinta sivuttaa vastaukset ja palautta oletuksena 10 tietuetta. Mikäli siinä eivät olleet kaikki, vastauksessa on myös linkki seuraavalle sivulle, missä on seuraavat 10 tietuetta. Palautettavien tietueiden määrän voi asettaa api-kutsuun limit=100 parametrillä. Tietueen properties-kentässä ovat datan ns. muuttujat ja kutsuttaessa apia dataa voi suodattaa näiden muuttujien avulla. Tässä tapauksessa meitä kiinnostaa erityisesti muuttuja tessellation, josta näyttäisi voivan valita aluejaon.

En löytänyt rajapinnan dokumentaatiosta https://geo.stat.fi/inspire/ogc/api/su tietoa siitä, mitä arvoja tessellation voi saada. Haetaan siksi koko aineisto oheisella while-luupilla, joka hakee aina 50 vastausta kerrallaan kunnesta vastauksessa ei enää ole linkkiä seuraavalle sivulle.

library(httr2)
library(dplyr)
url_items <- "https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=50&f=json"
next_exists <- TRUE
i <- 1
data_list <- list()
while (next_exists) {
  print(i)
  req <- request(url_items)
  resp <- req_perform(req)
  # read the raw response into a list item as a data
  data_list[[i]] <- st_read(resp_body_string(resp))
  # then check if the api offers more (if next link exists)
  resp_json <- resp_body_json(resp)
  link_rels <- resp_json$links %>% purrr:: modify(c("rel")) %>% unlist()
  if ("next" %in% link_rels){
    next_exists <- TRUE
    # next link
    url_items <- resp_json$links %>% purrr::keep(function(x) x$rel == "next") %>% .[[1]] %>% .$href
  } else {
    next_exists <- FALSE
  }
  i <- i + 1
}
all_features <- do.call("bind_rows", data_list)
dim(all_features)
# [1] 494  24

Rajapinnasta löyty siis kaiken kaikkiaan 494 riviä. Katsotaan seuraavaksi tessellation-muuttujan eri arvot.

all_features %>% 
  st_drop_geometry() %>% 
  count(tessellation)
#       tessellation   n
# 1              avi   7
# 2              ely  16
# 3  hyvinvointialue  23
# 4            kunta 309
# 5         maakunta  19
# 6       seutukunta  69
# 7         suuralue   5
# 8 tyossakayntialue  33
# 9       vaalipiiri  13

Nyt voimme ladata pelkät kunnat seuraavasta polusta https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=310&f=json&tessellation=kunta. Huomataan että datassa on huomattavasti enemmän muuttujia kuin WFS-rajapinnan kautta haetussa.

kunnat <- st_read("https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=310&f=json&tessellation=kunta")
Reading layer `OGRGeoJSON' from data source 
  `https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=310&f=json&tessellation=kunta' 
  using driver `GeoJSON'
Simple feature collection with 309 features and 23 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 83747.59 ymin: 6637032 xmax: 732907.7 ymax: 7776431
Projected CRS: ETRS89 / TM35FIN(E,N)
head(kunnat)
Simple feature collection with 6 features and 23 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 250110.7 ymin: 6704556 xmax: 442401.8 ymax: 7133254
Projected CRS: ETRS89 / TM35FIN(E,N)
                                                                                        id
1 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit/kunta_1_20230101_005/2023/4500k
2 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit/kunta_1_20230101_009/2023/4500k
3 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit/kunta_1_20230101_010/2023/4500k
4 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit/kunta_1_20230101_016/2023/4500k
5 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit/kunta_1_20230101_018/2023/4500k
6 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit/kunta_1_20230101_019/2023/4500k
          featureType    inspireId_localId inspireId_versionId
1 AreaStatisticalUnit kunta_1_20230101_005                2023
2 AreaStatisticalUnit kunta_1_20230101_009                2023
3 AreaStatisticalUnit kunta_1_20230101_010                2023
4 AreaStatisticalUnit kunta_1_20230101_016                2023
5 AreaStatisticalUnit kunta_1_20230101_018                2023
6 AreaStatisticalUnit kunta_1_20230101_019                2023
                                       inspireId_namespace beginLifespanVersion
1 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit           2023-01-01
2 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit           2023-01-01
3 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit           2023-01-01
4 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit           2023-01-01
5 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit           2023-01-01
6 http://paikkatiedot.fi/so/1000520/su/AreaStatisticalUnit           2023-01-01
  endLifespanVersion                                             country
1         2024-01-01 http://inspire.ec.europa.eu/codeList/CountryCode/FI
2         2024-01-01 http://inspire.ec.europa.eu/codeList/CountryCode/FI
3         2024-01-01 http://inspire.ec.europa.eu/codeList/CountryCode/FI
4         2024-01-01 http://inspire.ec.europa.eu/codeList/CountryCode/FI
5         2024-01-01 http://inspire.ec.europa.eu/codeList/CountryCode/FI
6         2024-01-01 http://inspire.ec.europa.eu/codeList/CountryCode/FI
  geographicalName_fin geographicalName_swe geographicalName_eng nationalCode
1             Alajärvi             Alajärvi             Alajärvi          005
2            Alavieska            Alavieska            Alavieska          009
3               Alavus                Alavo               Alavus          010
4             Asikkala             Asikkala             Asikkala          016
5               Askola               Askola               Askola          018
6                 Aura                 Aura                 Aura          019
  tessellation   tessellationId thematicId referencePeriod_beginPosition
1        kunta kunta_1_20230101       <NA>                    2023-01-01
2        kunta kunta_1_20230101       <NA>                    2023-01-01
3        kunta kunta_1_20230101       <NA>                    2023-01-01
4        kunta kunta_1_20230101       <NA>                    2023-01-01
5        kunta kunta_1_20230101       <NA>                    2023-01-01
6        kunta kunta_1_20230101       <NA>                    2023-01-01
  referencePeriod_endPosition areaValue areaValue_uom landAreaValue
1                  2024-01-01   1056.75           km2       1008.77
2                  2024-01-01    253.02           km2        251.50
3                  2024-01-01   1151.50           km2       1087.23
4                  2024-01-01    755.55           km2        563.39
5                  2024-01-01    218.03           km2        212.44
6                  2024-01-01     95.58           km2         95.01
  landAreaValue_uom
1               km2
2               km2
3               km2
4               km2
5               km2
6               km2
                                                geometry_geometryDescription
1 http://inspire.ec.europa.eu/codelist/GeometryTypeValue/generalisedGeometry
2 http://inspire.ec.europa.eu/codelist/GeometryTypeValue/generalisedGeometry
3 http://inspire.ec.europa.eu/codelist/GeometryTypeValue/generalisedGeometry
4 http://inspire.ec.europa.eu/codelist/GeometryTypeValue/generalisedGeometry
5 http://inspire.ec.europa.eu/codelist/GeometryTypeValue/generalisedGeometry
6 http://inspire.ec.europa.eu/codelist/GeometryTypeValue/generalisedGeometry
  geometry_scale                       geometry
1          4500k MULTIPOLYGON (((366787.9 70...
2          4500k MULTIPOLYGON (((382543.4 71...
3          4500k MULTIPOLYGON (((343298.2 69...
4          4500k MULTIPOLYGON (((436139.7 67...
5          4500k MULTIPOLYGON (((426631 6720...
6          4500k MULTIPOLYGON (((263938.3 67...

Lopuksi vielä katsotaan rajapinnasta mitä muita versioita vuoden 2022 aineistosta olisi tarjolla, niin huomataan että data on rajolla kahdessa eri koordinaattijärjestelmässä ja kahdessa eri resoluutiossa. Haetaan vielä kahden eri koordinaattijärjestelmän versiot ja piirretään vierekkäin

EPSG_3067 <- st_read("https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=310&f=json&tessellation=kunta")
Reading layer `OGRGeoJSON' from data source 
  `https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_3067/items?limit=310&f=json&tessellation=kunta' 
  using driver `GeoJSON'
Simple feature collection with 309 features and 23 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 83747.59 ymin: 6637032 xmax: 732907.7 ymax: 7776431
Projected CRS: ETRS89 / TM35FIN(E,N)
EPSG_4326 <- st_read("https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_4326/items?limit=310&f=json&tessellation=kunta")
Reading layer `OGRGeoJSON' from data source 
  `https://geo.stat.fi/inspire/ogc/api/su/collections/AreaStatisticalUnit_4500k_EPSG_4326/items?limit=310&f=json&tessellation=kunta' 
  using driver `GeoJSON'
Simple feature collection with 309 features and 23 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 19.47275 ymin: 59.80841 xmax: 31.5867 ymax: 70.0921
Geodetic CRS:  WGS 84 (CRS84)
library(patchwork)
library(ggplot2)
p1 <- ggplot(EPSG_3067) + geom_sf() + labs(title = "EPSG_3067")
p2 <- ggplot(EPSG_4326) + geom_sf() + labs(title = "EPSG_4326")
wrap_plots(list(p1,p2))

# you need an api key
mml_api_key <- "936f5fb4-ddbb-4a95-85bb-4b5ff7a19789"

urli <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/kiinteisto-avoin/simple-features/v3/collections/KiinteistotunnuksenSijaintitiedot/items?f=json&api-key=",mml_api_key)
building_points_helsinki <- st_read(paste0(urli,
                                           "&bbox=24.940681,60.167422,24.951046,60.169834"))

Maanmittauslaitoksen avoimet OGC API Features -rajapinnat

Maanmittauslaitoksen rajapinnat edellyttävät api-avaimen käyttöä. Api-avaimia ei pidä kirjoittaa suoraan skripteihin. Yksi parempi tapa on tallentaa api-avaimet ympäristömuuttujiksi ja lukea arvo ympäristömuuttujasta Sys.getenv()-funktiolla.

# Tallenna ympäristömuuttuja esim .Rprofile -tiedostoon.
Sys.setenv("MML_API_KEY"="4b5ff7a19789-4a95-85bb-ddbb-936f5fb4")
# lue avain objektiksi sessioon
mml_api_key <- Sys.getenv("MML_API_KEY")

Maastotietokanta

Palvelu tarjoaa tietoja muun muassa liikenneverkoista, rakennuksista ja rakenteista, hallintorajoista, nimistöstä, maankäytöstä, vesistöistä ja korkeussuhteista. Aineistolähteenä on Maanmittauslaitoksen Maastotietokanta, jonka kohteita pidetään jatkuvasti ajan tasalla.

Listataan aluksi eri collectionit ie. apien endpointit:

mml_api_key <- Sys.getenv("MML_API_KEY")

url <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections?api-key=", mml_api_key)
resp <- request(url) %>% 
  req_perform()
resp_list <- resp_body_json(resp)

collects <- resp_list$collections
ids <- collects |> modify(c("id")) %>% unlist()
titles <- collects |> modify(c("title")) %>% unlist()
descriptions <- collects |> modify(c("description")) %>% unlist()
link_list <- list()
for (i in 1:length(collects)) link_list[[i]] <- collects[[i]]$links[[1]]$href
tibble(id = ids, 
       # title = titles,
       link = unlist(link_list)#, 
       # description = descriptions
       ) %>% arrange(id) %>% kable() %>% kable_styling()
id link
aallonmurtaja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/aallonmurtaja/items
aidansymboli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/aidansymboli/items
aita https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/aita/items
allas https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/allas/items
aluemerenulkoraja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/aluemerenulkoraja/items
ampumaalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/ampumaalue/items
ankkuripaikka https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/ankkuripaikka/items
autoliikennealue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/autoliikennealue/items
harvalouhikko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/harvalouhikko/items
hautausmaa https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/hautausmaa/items
hietikko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/hietikko/items
hylky https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/hylky/items
hylynsyvyys https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/hylynsyvyys/items
ilmaradankannatinpylvas https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/ilmaradankannatinpylvas/items
ilmarata https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/ilmarata/items
jarvi https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/jarvi/items
jyrkanne https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/jyrkanne/items
kaatopaikka https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kaatopaikka/items
kaislikko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kaislikko/items
kallioalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kallioalue/items
kalliohalkeama https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kalliohalkeama/items
kalliosymboli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kalliosymboli/items
kansallispuisto https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kansallispuisto/items
karttasymboli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/karttasymboli/items
kellotapuli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kellotapuli/items
kivi https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kivi/items
kivikko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kivikko/items
korkeuskayra https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/korkeuskayra/items
korkeuskayrankorkeusarvo https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/korkeuskayrankorkeusarvo/items
koski https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/koski/items
kunnanhallintokeskus https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kunnanhallintokeskus/items
kunnanhallintoraja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kunnanhallintoraja/items
kunta https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/kunta/items
lahde https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/lahde/items
lahestymisvalo https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/lahestymisvalo/items
lentokenttaalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/lentokenttaalue/items
louhos https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/louhos/items
luiska https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/luiska/items
luonnonpuisto https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/luonnonpuisto/items
luonnonsuojelualue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/luonnonsuojelualue/items
maaaineksenottoalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/maaaineksenottoalue/items
maasto2kuvionreuna https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/maasto2kuvionreuna/items
maastokuvionreuna https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/maastokuvionreuna/items
maatalousmaa https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/maatalousmaa/items
maatuvavesialue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/maatuvavesialue/items
masto https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/masto/items
mastonkorkeus https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/mastonkorkeus/items
matalikko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/matalikko/items
meri https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/meri/items
merkittavaluontokohde https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/merkittavaluontokohde/items
metsamaankasvillisuus https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/metsamaankasvillisuus/items
metsamaanmuokkaus https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/metsamaanmuokkaus/items
metsanraja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/metsanraja/items
muistomerkki https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/muistomerkki/items
muuavoinalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/muuavoinalue/items
muuntaja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/muuntaja/items
muuntoasema https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/muuntoasema/items
nakotorni https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/nakotorni/items
niitty https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/niitty/items
osoitepiste https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/osoitepiste/items
paikannimi https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/paikannimi/items
pato https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/pato/items
pelastuskoodipiste https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/pelastuskoodipiste/items
pistolaituriviiva https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/pistolaituriviiva/items
portti https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/portti/items
puisto https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/puisto/items
puu https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/puu/items
puurivi https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/puurivi/items
rajavyohykkeentakaraja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rajavyohykkeentakaraja/items
rakennelma https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rakennelma/items
rakennus https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rakennus/items
rakennusreunaviiva https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rakennusreunaviiva/items
rauhoitettukohde https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rauhoitettukohde/items
rautatie https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rautatie/items
rautatieliikennepaikka https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rautatieliikennepaikka/items
rautatiensymboli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/rautatiensymboli/items
retkeilyalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/retkeilyalue/items
sahkolinja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/sahkolinja/items
sahkolinjansymboli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/sahkolinjansymboli/items
satamaalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/satamaalue/items
savupiippu https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/savupiippu/items
savupiipunkorkeus https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/savupiipunkorkeus/items
selite https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/selite/items
sisaistenaluevesienulkoraja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/sisaistenaluevesienulkoraja/items
soistuma https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/soistuma/items
sulkuportti https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/sulkuportti/items
suo https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suo/items
suojaalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suojaalue/items
suojaalueenreunaviiva https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suojaalueenreunaviiva/items
suojametsa https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suojametsa/items
suojametsanreunaviiva https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suojametsanreunaviiva/items
suojanne https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suojanne/items
suojelualueenreunaviiva https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suojelualueenreunaviiva/items
suurjannitelinjanpylvas https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/suurjannitelinjanpylvas/items
syvyyskayra https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/syvyyskayra/items
syvyyskayransyvyysarvo https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/syvyyskayransyvyysarvo/items
syvyyspiste https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/syvyyspiste/items
taajaanrakennettualue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/taajaanrakennettualue/items
taajaanrakennetunalueenreuna https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/taajaanrakennetunalueenreuna/items
taytemaa https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/taytemaa/items
tervahauta https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tervahauta/items
tienroteksti https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tienroteksti/items
tiesymboli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tiesymboli/items
tieviiva https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tieviiva/items
tulentekopaikka https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tulentekopaikka/items
tulvaalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tulvaalue/items
tunnelinaukko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tunnelinaukko/items
turvalaite https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/turvalaite/items
tuulivoimala https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/tuulivoimala/items
uittolaite https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/uittolaite/items
uittoranni https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/uittoranni/items
ulkojasisasaaristonraja https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/ulkojasisasaaristonraja/items
urheilujavirkistysalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/urheilujavirkistysalue/items
valtakunnanrajapyykki https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/valtakunnanrajapyykki/items
varastoalue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/varastoalue/items
vedenpinnankorkeusluku https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vedenpinnankorkeusluku/items
vesiasteikko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesiasteikko/items
vesikivi https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesikivi/items
vesikivikko https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesikivikko/items
vesikulkuvayla https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesikulkuvayla/items
vesikulkuvaylankulkusuunta https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesikulkuvaylankulkusuunta/items
vesikulkuvaylanteksti https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesikulkuvaylanteksti/items
vesikuoppa https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesikuoppa/items
vesitorni https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesitorni/items
viettoviiva https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/viettoviiva/items
virtausnuoli https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/virtausnuoli/items
virtavesialue https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/virtavesialue/items
virtavesikapea https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/virtavesikapea/items

Olemme kiinnostuneita vesitorneista ja kun limit=500 niin kysely palauttaa 360 riviä eli ilmeisesti kaikki maan vesitorni.

url <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesitorni/items?f=json&limit=500&api-key=", mml_api_key)
vesitorni <- st_read(url)
Reading layer `OGRGeoJSON' from data source 
  `https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/vesitorni/items?f=json&limit=500&api-key=936f5fb4-ddbb-4a95-85bb-4b5ff7a19789' 
  using driver `GeoJSON'
Simple feature collection with 360 features and 8 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: 19.92564 ymin: 59.82486 xmax: 30.91939 ymax: 67.43815
Geodetic CRS:  WGS 84
head(vesitorni)
Simple feature collection with 6 features and 8 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: 23.85855 ymin: 59.91901 xmax: 25.947 ymax: 60.98476
Geodetic CRS:  WGS 84
     mtk_id sijaintitarkkuus korkeustarkkuus aineistolahde    alkupvm suunta
1 192742673             3000             201             1 2013-09-11      0
2 292674651             3000             201             1 2013-09-13      0
3 292710718             3000             201             1 2013-09-16      0
4 576747455             3000             201             1 2013-09-10      0
5  90857974             3000             201             1 2013-11-30      0
6  90857967             3000             201             1 2013-11-30      0
  kohderyhma kohdeluokka                  geometry
1         47       45800 POINT (23.85855 59.91901)
2         47       45800 POINT (24.60504 60.80946)
3         47       45800 POINT (24.64785 60.93163)
4         47       45800 POINT (25.58797 60.98476)
5         47       45800 POINT (25.93451 60.94312)
6         47       45800   POINT (25.947 60.93985)

Piirettään kartta

ggplot() + 
  geom_sf(data = st_union(EPSG_3067)) +  
  geom_sf(data = vesitorni, color = "blue")

Toinen mikä kiinnostaa on hautausmaat, mutta koska niitä on paljon käytetään tässä nyt spatiaalista rajausta bounding boxilla. Tehdään http://bboxfinder.com-palvelussa boksi Kolin ja Ilomantsin taajaman ympärille seuraavasti ja kopioidaan sen antama bbox-koordinaatit 29.870453,62.647023,31.014404,63.058071.

Sitten tehdään haku pelkästään tuon alueen hautausmaista (löytyy seitsemän!) ja piirretään siitä vuorovaikutteinen kartta.

url <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/hautausmaa/items?f=json&limit=500&bbox=29.870453,62.647023,31.014404,63.058071&api-key=", mml_api_key)
hautausmaa <- st_read(url)
Reading layer `OGRGeoJSON' from data source 
  `https://avoin-paikkatieto.maanmittauslaitos.fi/maastotiedot/features/v1/collections/hautausmaa/items?f=json&limit=500&bbox=29.870453,62.647023,31.014404,63.058071&api-key=936f5fb4-ddbb-4a95-85bb-4b5ff7a19789' 
  using driver `GeoJSON'
Simple feature collection with 7 features and 7 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 30.11115 ymin: 62.67023 xmax: 30.94426 ymax: 62.97602
Geodetic CRS:  WGS 84
mapview(hautausmaa)

Rakennukset

Palvelu tarjoaa OGC API Features -kyselyrajapinnan rakennuksien ja rakennuksen osien paikkatietokohteille, jotka on tallennettu Kansalliseen maastotietokannan (KMTK) rakennukset ja rakennelmat -teeman mukaiseen tietovarastoon. Aineisto tulee pääosin Maanmittauslaitoksen Maastotietokonnasta.

Listataan aluksi eri collectionit.

url <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/buildings/features/v1/collections?api-key=", mml_api_key)
resp <- request(url) %>% 
  req_perform()
resp_list <- resp_body_json(resp)

collects <- resp_list$collections

ids <- collects |> modify(c("id")) %>% unlist()
link_list <- list()
for (i in 1:length(collects)) link_list[[i]] <- collects[[i]]$links[[1]]$href
tibble(id = ids, link = unlist(link_list)) %>% kable() %>% kable_styling()
id link
buildings_versions https://avoin-paikkatieto.maanmittauslaitos.fi/buildings/features/v1/collections/buildings_versions/items
building_parts_versions https://avoin-paikkatieto.maanmittauslaitos.fi/buildings/features/v1/collections/building_parts_versions/items
buildings https://avoin-paikkatieto.maanmittauslaitos.fi/buildings/features/v1/collections/buildings/items
building_parts https://avoin-paikkatieto.maanmittauslaitos.fi/buildings/features/v1/collections/building_parts/items
# tässä jotain vikaa, ei toimi!!
url <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/buildings/features/v1/collections/building_parts/items?f=json&limit=500&api-key=", mml_api_key)
rakennukset <- st_read(url)
head(rakennukset)

Nimistö

Palvelussa on tarjolla paikka, paikannimi- ja karttanimitietoja.

url <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/geographic-names/features/v1/collections?api-key=", mml_api_key)
resp <- request(url) %>% 
  req_perform()
resp_list <- resp_body_json(resp)

collects <- resp_list$collections

ids <- collects |> modify(c("id")) %>% unlist()
link_list <- list()
for (i in 1:length(collects)) link_list[[i]] <- collects[[i]]$links[[1]]$href
tibble(id = ids, link = unlist(link_list)) %>% kable() %>% kable_styling()

Sitten tehdään haku pelkästään tuon alueen nimistä

# Sama ongelma, ei toimi
url <- paste0("https://avoin-paikkatieto.maanmittauslaitos.fi/geographic-names/features/v1/collections/placenames/items?f=json&api-key=", mml_api_key)
nimet <- st_read(url)
head(nimet)

Uudelleenkäyttö

CC BY 4.0

Viittaus

BibTeX-viittaus:
@online{kainu2023,
  author = {Kainu, Markus and Kainu, Markus},
  title = {Tilastokeskuksen ja Maanmittauslaitoksen OCP API Features
    rajapintojen hyödyntäminen R-kielellä},
  date = {2023-01-25},
  url = {https://markuskainu.fi/posts/2023-01-25-ogc-api-perusteet},
  langid = {fi}
}
Viitatkaa tähän teokseen seuraavasti:
Kainu, Markus, and Markus Kainu. 2023. “Tilastokeskuksen ja Maanmittauslaitoksen OCP API Features rajapintojen hyödyntäminen R-kielellä.” January 25, 2023. https://markuskainu.fi/posts/2023-01-25-ogc-api-perusteet.