These functions compute measurements for geometries. The input geometries may be given as a single raw vector of WKB, a list of WKB raw vectors, or a character vector containing one or more WKT strings.
Usage
g_area(geom, quiet = FALSE)
g_centroid(geom, quiet = FALSE)
g_distance(geom, other_geom, quiet = FALSE)
g_length(geom, quiet = FALSE)
Arguments
- geom
Either a raw vector of WKB or list of raw vectors, or a character vector containing one or more WKT strings.
- quiet
Logical,
TRUE
to suppress warnings. Defaults toFALSE
.- other_geom
Either a raw vector of WKB or list of raw vectors, or a character vector containing one or more WKT strings. Must contain the same number of geometries as
geom
.
Details
These functions use the GEOS library via GDAL headers.
g_area()
computes the area for a Polygon
or MultiPolygon
. Undefined
for all other geometry types (returns zero). Returns a numeric vector,
having length equal to the number of input geometries, containing
computed area or '0' if undefined.
g_centroid()
returns a numeric vector of length 2 containing the centroid
(X, Y), or a two-column numeric matrix (X, Y) with number of rows equal to
the number of input geometries.
The GDAL documentation states "This method relates to the SFCOM
ISurface::get_Centroid()
method however the current implementation based
on GEOS can operate on other geometry types such as multipoint, linestring,
geometrycollection such as multipolygons. OGC SF SQL 1.1 defines the
operation for surfaces (polygons). SQL/MM-Part 3 defines the operation for
surfaces and multisurfaces (multipolygons)."
g_distance()
returns the distance between two geometries or -1
if an
error occurs. Returns the shortest distance between the two geometries.
The distance is expressed into the same unit as the coordinates of the
geometries. Returns a numeric vector, having length equal to the number of
input geometry pairs, containing computed distance or '-1' if an error
occurs.
g_length()
computes the length for LineString
or MultiCurve
objects.
Undefined for all other geometry types (returns zero). Returns a numeric
vector, having length equal to the number of input geometries, containing
computed length or '0' if undefined.
Note
For g_distance()
, geom
and other_geom
must contain the same number of
geometries (i.e., operates pair-wise on the inputs with no recycling), and
are assumed to be in the same coordinate reference system.
Geometry validity is not checked. In case you are unsure of the validity
of the input geometries, call g_is_valid()
before, otherwise the result
might be wrong.
Examples
g_area("POLYGON ((0 0, 10 10, 10 0, 0 0))")
#> [1] 50
g_centroid("POLYGON ((0 0, 10 10, 10 0, 0 0))")
#> x y
#> 6.666667 3.333333
g_distance("POINT (0 0)", "POINT (5 12)")
#> [1] 13
g_length("LINESTRING (0 0, 3 4)")
#> [1] 5
f <- system.file("extdata/ynp_fires_1984_2022.gpkg", package = "gdalraster")
lyr <- new(GDALVector, f, "mtbs_perims")
# read all features into a data frame
feat_set <- lyr$fetch(-1)
head(feat_set)
#> OGR feature set
#> FID event_id incid_name incid_type map_id burn_bnd_ac
#> 1 1 WY4413411069519870807 POLECAT Wildfire 10015934 1093
#> 2 2 WY4509511033019880815 HELLROARING Wildfire 10014146 77598
#> 3 3 MT4507511010219880619 STORM CREEK Wildfire 10014147 116027
#> 4 4 WY4491210990219880711 CLOVER Wildland Fire Use 10014202 34035
#> 5 5 WY4463411003119880709 MIST Wildfire 10014203 4376
#> 6 6 WY4499211096519880625 FAN Wildland Fire Use 10014215 20422
#> burn_bnd_lat burn_bnd_lon ig_date ig_year
#> 1 44.132 -110.696 1987-08-07 1987
#> 2 45.089 -110.328 1988-08-15 1988
#> 3 45.146 -110.013 1988-06-19 1988
#> 4 44.717 -110.034 1988-07-11 1988
#> 5 44.633 -110.028 1988-07-09 1988
#> 6 44.994 -110.976 1988-06-25 1988
#> geom
#> 1 WKB MULTIPOLYGON: raw 01 06 00 00 ...
#> 2 WKB MULTIPOLYGON: raw 01 06 00 00 ...
#> 3 WKB MULTIPOLYGON: raw 01 06 00 00 ...
#> 4 WKB MULTIPOLYGON: raw 01 06 00 00 ...
#> 5 WKB MULTIPOLYGON: raw 01 06 00 00 ...
#> 6 WKB MULTIPOLYGON: raw 01 06 00 00 ...
g_area(feat_set$geom) |> head()
#> [1] 3626011 219210971 261779718 137157336 17666635 82653959
g_centroid(feat_set$geom) |> head()
#> x y
#> [1,] 504185.6 -11945.72
#> [2,] 534834.7 86727.91
#> [3,] 553856.8 89236.52
#> [4,] 556496.3 51930.36
#> [5,] 557768.3 42471.93
#> [6,] 483922.9 82676.71
lyr$close()