Translate a .osm.pbf file into .gpkg format
This function is used to translate a .osm.pbf
file into .gpkg
format.
The conversion is performed using
ogr2ogr through
vectortranslate
utility in sf::gdal_utils()
. It was created following
the suggestions
of the maintainers of GDAL. See Details and examples to understand the basic
usage, and check the introductory vignette for more complex use-cases.
oe_vectortranslate( file_path, layer = "lines", vectortranslate_options = NULL, osmconf_ini = NULL, extra_tags = NULL, force_vectortranslate = FALSE, never_skip_vectortranslate = FALSE, quiet = FALSE )
file_path |
Character string representing the path of the input
|
layer |
Which |
vectortranslate_options |
Options passed to the |
osmconf_ini |
The configuration file. See documentation at
gdal.org. Check details in the
introductory vignette and the help page of |
extra_tags |
Which additional columns, corresponding to OSM tags, should
be in the resulting dataset? |
force_vectortranslate |
Boolean. Force the original |
never_skip_vectortranslate |
Boolean. This is used in case the user
passed its own |
quiet |
Boolean. If |
The new .gpkg
file is created in the same directory as the input
.osm.pbf
file. The translation process is performed using the
vectortranslate
utility in sf::gdal_utils()
. This operation can be
customized in several ways modifying the parameters layer
,
extra_tags
, osmconf_ini
, and vectortranslate_options
.
The .osm.pbf
files processed by GDAL are usually categorized into 5
layers, named points
, lines
, multilinestrings
, multipolygons
and
other_relations
. Check the first paragraphs
here for more details. This
function can covert only one layer at a time, and the parameter layer
is
used to specify which layer of the .osm.pbf
file should be converted.
Several layers with different names can be stored in the same .gpkg
file.
By default, the function will convert the lines
layer (which is the most
common one according to our experience).
The arguments osmconf_ini
and extra_tags
are used to modify how
GDAL reads and processes a .osm.pbf
file. More precisely, several operations
that GDAL performs on the input .osm.pbf
file are governed by a CONFIG
file, that you can check at the following
link.
The basic components of OSM data are called
elements and they are
divided into nodes, ways or relations, so, for example, the code at
line 7 of that link is used to determine which ways are assumed to be polygons
(according to the simple-feature definition of polygon) if they are closed.
Moreover, OSM data is usually described using several
tags, i.e a pair of two
items: a key and a value. The code at lines 33, 53, 85, 103, and 121 is
used to determine, for each layer, which tags should be explicitly reported
as fields (while all the other tags are stored in the other_tags
column,
see oe_get_keys()
). The parameter extra_tags
is used to determine
which extra tags (i.e. key/value pairs) should be added to the .gpkg
file.
By default, the vectortranslate operations are skipped if the
function detects a file having the same path as the input file, .gpkg
extension and a layer with the same name as the parameter layer
with all
extra_tags
. In that case the function will simply return the path
of the .gpkg
file. This behaviour can be overwritten by setting
force_vectortranslate = TRUE
. The parameter osmconf_ini
is used to pass
your own CONFIG
file in case you need more control over the GDAL
operations. In that case the vectortranslate operations are never skipped.
Check the package introductory vignette for an example. If osmconf_ini
is
equal to NULL
(the default), then the function uses default osmconf.ini
file defined by GDAL (but for the extra tags).
The parameter vectortranslate_options
is used to control the arguments
that are passed to ogr2ogr
via sf::gdal_utils()
when converting between
.pbf
and .gpkg
formats. ogr2ogr
can perform various operations during
the conversion process, such as spatial filters or SQL queries. These
operations are determined by the vectortranslate_options
argument. If
NULL
(default value), then vectortranslate_options
is set equal to
c("-f", "GPKG", "-overwrite", "-oo", paste0("CONFIG_FILE=", osmconf_ini), "-lco", "GEOMETRY_NAME=geometry", layer)
.
Explanation:
"-f", "GPKG"
says that the output format is GPKG
;
"-overwrite
is used to delete an existing layer and recreate
it empty;
"-oo", paste0("CONFIG_FILE=", osmconf_ini)
is used to set the
Open Options
for the .osm.pbf
file and change the CONFIG
file (in case the user
asks for any extra tag or a totally different CONFIG file);
"-lco", "GEOMETRY_NAME=geometry"
is used to change the
layer creation options
for the .gpkg
file and modify the name of the geometry column;
layer
indicates which layer should be converted.
Check the introductory vignette, the help page of sf::gdal_utils()
and
here for an extensive
documentation on all available options.
Character string representing the path of the .gpkg
file.
# First we need to match an input zone with a .osm.pbf file its_match = oe_match("ITS Leeds", provider = "test") # The we can download the .osm.pbf files its_pbf = oe_download( file_url = its_match$url, file_size = its_match$file_size, download_directory = tempdir(), provider = "test" ) # Check that the file was downloaded list.files(tempdir(), pattern = "pbf|gpkg") # Convert to gpkg format its_gpkg = oe_vectortranslate(its_pbf) # Now there is an extra .gpkg file list.files(tempdir(), pattern = "pbf|gpkg") # Check the layers of the .gpkg file sf::st_layers(its_gpkg, do_count = TRUE) # Add points layer its_gpkg = oe_vectortranslate(its_pbf, layer = "points") sf::st_layers(its_gpkg, do_count = TRUE) # Add extra tags to the lines layer. Check original fields names(sf::st_read(its_gpkg, layer = "lines", quiet = TRUE)) its_gpkg = oe_vectortranslate( its_pbf, extra_tags = c("oneway", "maxspeed") ) names(sf::st_read(its_gpkg, layer = "lines", quiet = TRUE)) # Check the introductory vignette for more complex examples.
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.