Read simple features from file or database, or retrieve layer names and their geometry type(s)
Read PostGIS table directly through DBI and RPostgreSQL interface, converting binary
st_read(dsn, layer, ..., options = NULL, quiet = FALSE,
geometry_column = 1L, type = 0, promote_to_multi = TRUE,
stringsAsFactors = default.stringsAsFactors(), int64_as_string = FALSE)read_sf(..., quiet = TRUE, stringsAsFactors = FALSE)
st_read_db(conn = NULL, table = NULL, query = NULL, geom_column = NULL,
EWKB, ...)
data source name (interpretation varies by driver - for some drivers, dsn is a file name, but may also be a folder, or contain the name and access credentials of a database)
layer name (varies by driver, may be a file name without extension); in case layer
is missing,
st_read
will read the first layer of dsn
, give a warning and (unless quiet = TRUE
) print a
message when there are multiple layers, or give an error if there are no layers in dsn
.
parameter(s) passed on to st_as_sf
character; driver dependent dataset open options, multiple options supported.
logical; suppress info on name, driver, size and spatial reference, or signaling no or multiple layers
integer or character; in case of multiple geometry fields, which one to take?
integer; ISO number of desired simple feature type; see details. If left zero, and promote_to_multi
is TRUE
, in case of mixed feature geometry
types, conversion to the highest numeric type value found will be attempted. A vector with different values for each geometry column
can be given.
logical; in case of a mix of Point and MultiPoint, or of LineString and MultiLineString, or of
Polygon and MultiPolygon, convert all to the Multi variety; defaults to TRUE
logical; logical: should character vectors be converted to factors? The `factory-fresh' default
is TRUE
, but this can be changed by setting options(stringsAsFactors = FALSE)
.
logical; if TRUE, Int64 attributes are returned as string; if FALSE, they are returned as double and a warning is given when precision is lost (i.e., values are larger than 2^53).
open database connection
table name
SQL query to select records; see details
character or integer: indicator of name or position of the geometry column; if not provided, the last column of type character is chosen
logical; is the WKB is of type EWKB? if missing, defaults to TRUE
if conn
is of class codePostgreSQLConnection or PqConnection
, and to FALSE
otherwise
object of class sf when a layer was succesfully read; in case argument layer
is missing and
data source dsn
does not contain a single layer, an object of class sf_layers
is returned with the
layer names, each with their geometry type(s). Note that the number of layers may also be zero.
for geometry_column
, see also https://trac.osgeo.org/gdal/wiki/rfc41_multiple_geometry_fields; for type
values see https://en.wikipedia.org/wiki/Well-known_text#Well-known_binary, but note that not every target value
may lead to succesful conversion. The typical conversion from POLYGON (3) to MULTIPOLYGON (6) should work; the other
way around (type=3), secondary rings from MULTIPOLYGONS may be dropped without warnings. promote_to_multi
is handled on a per-geometry column basis; type
may be specfied for each geometry columns.
In case of problems reading shapefiles from USB drives on OSX, please see https://github.com/edzer/sfr/issues/252.
read_sf
and write_sf
are aliases for st_read
and st_write
, respectively, with some
modified default arguments.
if table
is not given but query
is, the spatial reference system (crs) of the table queried is only available in case it has been stored into each geometry record (e.g., by PostGIS, when using EWKB)
in case geom_column is missing: if table is missing, this function will try to read the name of the geometry column from table geometry_columns
, in other cases, or when this fails, the geom_column is assumed to be the last column of mode character. If table is missing, the SRID cannot be read and resolved into a proj4string by the database, and a warning will be given.
nc = st_read(system.file("shape/nc.shp", package="sf"))
summary(nc)
library(sp)
example(meuse, ask = FALSE, echo = FALSE)
st_write(st_as_sf(meuse), "PG:dbname=postgis", "meuse",
layer_options = "OVERWRITE=true")
st_meuse = st_read("PG:dbname=postgis", "meuse")
summary(st_meuse)
library(RPostgreSQL)
conn = dbConnect(PostgreSQL(), dbname = "postgis")
x = st_read_db(conn, "meuse", query = "select * from meuse limit 3;")
x = st_read_db(conn, table = "public.meuse")
print(st_crs(x)) # SRID resolved by the database, not by GDAL!
dbDisconnect(conn)
Run the code above in your browser using DataLab