Skip to contents

This function converts a data frame containing SQL-style geometry coordinates (four corner points per polygon) into an sf polygon object. The SQL-style geometry is returned from spatial SQL tables like SURVEY_SITE and SURVEY_SITE_HISTORIC in GFBioSQL.

Usage

sql_geom_to_sf(.d, crs = 4326)

Arguments

.d

A data frame with columns pt1_lon, pt1_lat, pt2_lon, pt2_lat, pt3_lon, pt3_lat, pt4_lon, and pt4_lat, representing the four corners of polygons. The function expects these exact column names Additional columns will be preserved in the output.

crs

An integer specifying the coordinate reference system (CRS). Defaults to 4326 (WGS 84). The function will warn if you specify WGS84 (4326) but provide coordinates that appear to be in a projected system (e.g., UTM coordinates with values outside the longitude range -180 to 180).

Value

An sf object with polygon geometries and original data attributes (excluding point columns).

Examples

if (FALSE) { # \dontrun{
# Example with data from GFBioSQL
.d <- gfdata::get_active_survey_blocks(active_only = TRUE)
sql_geom_to_sf(.d, crs = 4326)
} # }

# Example with WGS84 coordinates (standalone, no database required)
wgs84_data <- data.frame(
  pt1_lon = -123.0, pt1_lat = 48.0,
  pt2_lon = -122.9, pt2_lat = 48.0,
  pt3_lon = -122.9, pt3_lat = 48.1,
  pt4_lon = -123.0, pt4_lat = 48.1,
  site_id = "A1"
)
sql_geom_to_sf(wgs84_data, crs = 4326)  # WGS84 coordinates
#> Simple feature collection with 1 feature and 1 field
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -123 ymin: 48 xmax: -122.9 ymax: 48.1
#> Geodetic CRS:  WGS 84
#>   site_id                       geometry
#> 1      A1 POLYGON ((-123 48, -122.9 4...