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.
Usage
get_buildings_osm(
place,
date = NULL,
dir_raw = osmextract::oe_download_directory(),
filename = NULL,
driver = "GeoJSON",
delete_dsn = TRUE,
append = NA,
...
)
Arguments
- place
sf
object (with projected coordinate reference system). Geographical area to match with the (.osm.pbf
) file in the data archive. Argument passed toosmextract::oe_match()
.- date
Date of OSM data snapshot to download. Refer to https://download.geofabrik.de for the specific dates available. Defaults to
NULL
(download the latest available data).- dir_raw
character. Directory to download the raw unprocessed OSM data. Passed to argument
download_directory
inosmextract::oe_read()
.- filename
character (optional). File path to export output data.
- driver
character (optional). Name of driver used to export output data, passed to
sf::st_write()
. Defaults to 'GeoJSON'.- delete_dsn
logical (optional). Passed to
sf::st_write()
.- append
defaults to
NA
, which raises an error if a layer exists. Passed tosf::st_write()
.- ...
Other arguments passed to
osmextract::oe_read()
.
Details
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
.
Examples
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')
}