Download and process OpenStreetMap (OSM) building polygons within a specified geographical place
,
from the Geofabrik database. It is a wrapper around
functions in the package osmextract
, and
processes the downloaded files for subsequent analyses. Refer to package osmextract
for
more details and options for input arguments when downloading the data.
get_buildings_osm(
place,
date = NULL,
dir_raw = osmextract::oe_download_directory(),
filename = NULL,
driver = "GeoJSON",
delete_dsn = TRUE,
append = NA,
...
)
sf
object (with projected coordinate reference system). Geographical area to match with the (.osm.pbf
) file in the data archive.
Argument passed to osmextract::oe_match()
.
Date of OSM data snapshot to download. Object of class "Date" in format %Y-%m-%d
. Refer to https://download.geofabrik.de
for the specific dates available. Defaults to NULL
(download the latest available data).
character. Directory to download the raw unprocessed OSM data. Passed to
argument download_directory
in osmextract::oe_read()
.
character (optional). File path to export output data.
character (optional). Name of driver used to export output data, passed to sf::st_write()
.
Defaults to "GeoJSON".
logical (optional). Passed to sf::st_write()
.
defaults to NA
, which raises an error if a layer exists. Passed to sf::st_write()
.
Other arguments passed to osmextract::oe_read()
.
The processed building polygons (sf
object).
Data is filtered by key-value attributes, where building:
is not NULL
.
The column levels
is derived from building:levels
; values were set to 1
if the
extracted value is empty or NA
, and set to NA
if ≤ 0
(i.e. underground);
values were then rounded up to the nearest whole number.
The column area_m2
represents the building footprint area,
and floorarea_m2
is calculated by multiplying the area_m2
by the number of levels
.
if (FALSE) {
data(pop_sgp)
pop_sgp <- sf::st_transform(pop_sgp, sf::st_crs(32648)) # transform to projected crs
# merge all census blocks for chosen year (2020) into single multi-polygon
# function requires that polygons are merged
city_boundaries <- pop_sgp %>%
dplyr::filter(year == 2020) %>%
sf::st_union() %>%
sf::st_as_sf() %>%
smoothr::fill_holes(threshold = units::set_units(1, 'km^2')) %>% # clean up
smoothr::drop_crumbs(threshold = units::set_units(1, 'km^2')) %>%
sf::st_make_valid()
# run function
get_buildings_osm(place = city_boundaries,
date = as.Date('2021-01-01'),
filename = 'buildings_osm-polygons_2021-01-01.geojson')
}