These are functions to work with geographical data. To determine coordinates based on a location (or vice versa), use geocode()
/ reverse_geocode()
.
get_map(maptype = "postcodes4")
add_map(data, maptype = NULL, by = NULL, crop_certe = TRUE)
is.sf(sf_data)
as.sf(data)
crop_certe(sf_data)
filter_geolocation(sf_data, ...)
filter_sf(sf_data, xmin = NULL, xmax = NULL, ymin = NULL, ymax = NULL)
convert_to_degrees_CRS4326(sf_data)
convert_to_metre_CRS28992(sf_data)
degrees_to_sf(longitudes, latitudes, crs = 28992)
latitude(sf_data)
longitude(sf_data)
type of geometric data, must be one of: "gemeenten"
, "ggdregios"
, "nuts3"
, "postcodes2"
, "postcodes3"
, "postcodes4"
, "postcodes6"
, "provincies"
. For add_map()
, this is determined automatically if left blank.
data set to join left to the geodata
column to join by
logical to keep only the Certe region
a data set of class 'sf'
filters to set
coordination filters for sf_data
, given in degrees following EPSG:4326 ('WGS 84')
vector of longitudes
vector of latitudes
the coordinate reference system (CRS) to use as output
An sf
model. The column with geodata is always called "geometry"
.
All of these functions will check if the sf
package is installed, and will load its namespace (but not attach the package).
crop_certe()
cuts any geometry to the Certe region (more of less): the Northern three provinces of the Netherlands and municipalities of Noordoostpolder, Urk, and Steenwijkerland. This will be based on postcodes.
filter_geolocation()
filters an sf object on qualitative values such as 'gemeente' and 'provincie'. The input data sf_data
will be joined with postcodes and filtering can thus be done on any of these columns: postcode, inwoners, inwoners_man, inwoners_vrouw, plaats, gemeente, provincie, nuts3, ggdregio.
filter_sf()
filters an sf object on coordinates, and is internally used by crop_certe()
.
convert_to_degrees_CRS4326()
will transform SF data to WGS 84 – WGS84 - World Geodetic System 1984, used in GPS, CRS 4326.
convert_to_metre_CRS28992()
will transform SF data to Amersfoort / RD New – Netherlands - Holland - Dutch, CRS 28992.
latitude()
specifies the north-south position ('y axis') and longitude()
specifies the east-west position ('x axis'). They return the numeric coordinate of the centre of a simple feature.
# Retrieving and joining maps ------------------------------------------
get_map() # defaults to the geo_postcodes4 data set
#> Simple feature collection with 4068 features and 3 fields (with 1 geometry empty)
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 13565.4 ymin: 306846.2 xmax: 278026.1 ymax: 615045.3
#> Projected CRS: Amersfoort / RD New
#> First 10 features:
#> postcode inwoners oppervlakte_km2 geometry
#> 1 1011 9630 0.9714760 MULTIPOLYGON (((122183.3 48...
#> 2 1012 8545 1.1559603 MULTIPOLYGON (((122049.3 48...
#> 3 1013 21255 4.8815624 MULTIPOLYGON (((120047.8 49...
#> 4 1014 2865 2.9208476 MULTIPOLYGON (((121228.2 48...
#> 5 1015 14855 0.7525791 MULTIPOLYGON (((120603.3 48...
#> 6 1016 10915 0.8013765 MULTIPOLYGON (((121164 4873...
#> 7 1017 12715 1.2981518 MULTIPOLYGON (((121004.7 48...
#> 8 1018 21195 2.1414293 MULTIPOLYGON (((123455.3 48...
#> 9 1019 18820 3.8735743 MULTIPOLYGON (((125689.6 48...
#> 10 1021 6895 1.2537301 MULTIPOLYGON (((123335 4890...
# adding a map applies a RIGHT JOIN to get all relevant geometric data
data.frame(postcode = 7753, number_of_cases = 3) |>
add_map()
#> Joining, by postcode
#> Simple feature collection with 1039 features and 4 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 119098.8 ymin: 513471.6 xmax: 278026.1 ymax: 615045.3
#> Projected CRS: Amersfoort / RD New
#> First 10 features:
#> postcode inwoners oppervlakte_km2 number_of_cases
#> 1 7705 345 2.659637 NA
#> 2 7741 9040 21.580447 NA
#> 3 7742 6445 17.375714 NA
#> 4 7751 3870 28.908806 NA
#> 5 7753 685 9.267895 3
#> 6 7754 375 10.559860 NA
#> 7 7755 365 11.056124 NA
#> 8 7756 245 6.768673 NA
#> 9 7761 4410 25.846640 NA
#> 10 7764 465 1.061360 NA
#> geometry
#> 1 MULTIPOLYGON (((231512.8 51...
#> 2 MULTIPOLYGON (((247054.9 52...
#> 3 MULTIPOLYGON (((254346.1 52...
#> 4 MULTIPOLYGON (((249130.2 52...
#> 5 MULTIPOLYGON (((241419.9 52...
#> 6 MULTIPOLYGON (((248946.4 52...
#> 7 MULTIPOLYGON (((250955.8 52...
#> 8 MULTIPOLYGON (((254049.2 52...
#> 9 MULTIPOLYGON (((256878.3 52...
#> 10 MULTIPOLYGON (((254998.5 52...
# Cropping to Certe region ---------------------------------------------
# Note: provinces do not include Flevoland
geo_provincies |> crop_certe()
#> Simple feature collection with 3 features and 3 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 119098.8 ymin: 514322.3 xmax: 278026.1 ymax: 619352.4
#> Projected CRS: Amersfoort / RD New
#> provincie inwoners oppervlakte_km2 geometry
#> 1 Drenthe 494705 2680.368 MULTIPOLYGON (((228930.1 57...
#> 2 Friesland 651430 3531.269 MULTIPOLYGON (((154047.9 56...
#> 3 Groningen 586920 2392.983 MULTIPOLYGON (((276560.6 58...
# but other geometries do, such as geo_gemeenten
if (require("certeplot2")) {
geo_gemeenten |> crop_certe() |> # cropped municipalities
plot2(title = "Certe Region") |>
add_sf(
geo_provincies |> crop_certe(), # cropped provinces
colour_fill = NA,
colour = "black",
linewidth = 0.5)
}
#> Loading required package: certeplot2
#> Loading required package: plot2
#> ℹ Using category = inwoners
#> ℹ Using datalabels = gemeente
#> ! Omitting printing of 43 datalabels - use datalabels = TRUE to force printing
# Filtering geometries -------------------------------------------------
geo_gemeenten |>
crop_certe() |>
# notice that the `provincie` column is not even in `geo_gemeenten`
filter_geolocation(provincie == "Flevoland")
#> Simple feature collection with 2 features and 3 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 168820.1 ymin: 513751.1 xmax: 197258.4 ymax: 539695.8
#> Projected CRS: Amersfoort / RD New
#> gemeente inwoners oppervlakte_km2 geometry
#> 1 Noordoostpolder 47580 466.06285 MULTIPOLYGON (((188921.9 51...
#> 2 Urk 21230 13.47839 MULTIPOLYGON (((169681.2 52...
geo_gemeenten |>
crop_certe() |>
filter_geolocation(inwoners_vrouw >= 50000)
#> Simple feature collection with 3 features and 3 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 171383.4 ymin: 517415 xmax: 269918.7 ymax: 592658.9
#> Projected CRS: Amersfoort / RD New
#> gemeente inwoners oppervlakte_km2 geometry
#> 1 Emmen 107025 346.1279 MULTIPOLYGON (((266296.6 54...
#> 2 Groningen 233265 197.8553 MULTIPOLYGON (((245194.7 59...
#> 3 Leeuwarden 124470 255.1755 MULTIPOLYGON (((178314.1 58...
if (require("certeplot2")) {
geo_postcodes4 |>
filter_geolocation(gemeente == "Tytsjerksteradiel") |>
plot2(category = inwoners,
datalabels = postcode)
}
#> ℹ Assuming datalabels.centroid = TRUE. Set to FALSE for a point-on-surface
#> placing of datalabels.
# filter on a latitude of 52.5 degrees and higher
geo_provincies |> filter_sf(ymin = 52.5)
#> Simple feature collection with 2 features and 3 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 119098.8 ymin: 514322.3 xmax: 269918.7 ymax: 615024.5
#> Projected CRS: Amersfoort / RD New
#> provincie inwoners oppervlakte_km2 geometry
#> 1 Drenthe 494705 2680.368 MULTIPOLYGON (((228930.1 57...
#> 2 Friesland 651430 3531.269 MULTIPOLYGON (((154047.9 56...
# Transforming Coordinate Reference System (CRS) -----------------------
geo_provincies |> convert_to_degrees_CRS4326()
#> Simple feature collection with 12 features and 3 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 3.358378 ymin: 50.75037 xmax: 7.227498 ymax: 53.55523
#> Geodetic CRS: WGS 84
#> First 10 features:
#> provincie inwoners oppervlakte_km2 geometry
#> 1 Drenthe 494705 2680.368 MULTIPOLYGON (((6.493505 53...
#> 2 Flevoland 428210 1466.570 MULTIPOLYGON (((5.533445 52...
#> 3 Friesland 651430 3531.269 MULTIPOLYGON (((5.373002 53...
#> 4 Gelderland 2096460 5118.931 MULTIPOLYGON (((5.605929 52...
#> 5 Groningen 586920 2392.983 MULTIPOLYGON (((7.208053 53...
#> 6 Limburg 1115835 2210.001 MULTIPOLYGON (((5.932767 51...
#> 7 Noord-Brabant 2573810 5054.037 MULTIPOLYGON (((4.595966 51...
#> 8 Noord-Holland 2887460 2864.383 MULTIPOLYGON (((5.326332 52...
#> 9 Overijssel 1166335 3408.845 MULTIPOLYGON (((5.7963 52.5...
#> 10 Utrecht 1360955 1553.980 MULTIPOLYGON (((5.021543 52...
geo_provincies |> convert_to_metre_CRS28992()
#> Simple feature collection with 12 features and 3 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 13565.4 ymin: 306846.2 xmax: 278026.1 ymax: 619352.4
#> Projected CRS: Amersfoort / RD New
#> First 10 features:
#> provincie inwoners oppervlakte_km2 geometry
#> 1 Drenthe 494705 2680.368 MULTIPOLYGON (((228930.1 57...
#> 2 Flevoland 428210 1466.570 MULTIPOLYGON (((164912.9 51...
#> 3 Friesland 651430 3531.269 MULTIPOLYGON (((154047.9 56...
#> 4 Gelderland 2096460 5118.931 MULTIPOLYGON (((169898.4 48...
#> 5 Groningen 586920 2392.983 MULTIPOLYGON (((276560.6 58...
#> 6 Limburg 1115835 2210.001 MULTIPOLYGON (((192680.3 41...
#> 7 Noord-Brabant 2573810 5054.037 MULTIPOLYGON (((100303.1 41...
#> 8 Noord-Holland 2887460 2864.383 MULTIPOLYGON (((150846.9 47...
#> 9 Overijssel 1166335 3408.845 MULTIPOLYGON (((182721.3 51...
#> 10 Utrecht 1360955 1553.980 MULTIPOLYGON (((130059 4794...
# Other functions ------------------------------------------------------
degrees_to_sf(4.5, 54)
#> Simple feature collection with 1 feature and 0 fields
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: 96811.73 ymin: 668666 xmax: 96811.73 ymax: 668666
#> Projected CRS: Amersfoort / RD New
#> geometry
#> 1 POINT (96811.73 668666)
if (require("certeplot2")) {
geo_provincies |>
crop_certe() |>
plot2(category = NULL, colour_fill = NA) |>
add_sf(degrees_to_sf(6.5, 53),
datalabels = "Some Point!")
}
#> ℹ Assuming datalabels.centroid = TRUE. Set to FALSE for a point-on-surface
#> placing of datalabels.
#> ℹ Using datalabels = provincie
latitude(geo_provincies)
#> [1] 52.86228 52.52686 53.10848 52.06070 53.21673 51.20786 51.56101 52.58150
#> [9] 52.44379 52.08348 51.45178 51.94915
longitude(geo_provincies)
#> [1] 6.618508 5.595075 5.844877 5.939833 6.745329 5.933201 5.189413 4.870502
#> [9] 6.445325 5.163127 3.834928 4.477864