Geodetic vs Projected Coordinate Reference Systems

A Coordinate Reference System (CRS) defines how spatial data are positioned on the Earth.

A geodetic CRS represents locations using latitude and longitude on the Earth’s curved surface. Coordinates are expressed in degrees, which are angular units.

A projected CRS transforms the curved Earth into a flat coordinate system so that spatial calculations such as distance, area, and buffers can be computed using meters.

For example, WGS84 (EPSG:4326) is a geodetic CRS commonly used by GPS systems, while UTM projections are projected CRS commonly used for spatial analysis.

Code
library(sf)
library(tmap)

Create a point in WGS84 (geodetic CRS)

Code
point <- st_sfc(
  st_point(c(-93.163, 44.953)), # St. Paul, MN
  crs = 4326
)

point
Geometry set for 1 feature 
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -93.163 ymin: 44.953 xmax: -93.163 ymax: 44.953
Geodetic CRS:  WGS 84
Code
st_crs(point)
Coordinate Reference System:
  User input: EPSG:4326 
  wkt:
GEOGCRS["WGS 84",
    ENSEMBLE["World Geodetic System 1984 ensemble",
        MEMBER["World Geodetic System 1984 (Transit)"],
        MEMBER["World Geodetic System 1984 (G730)"],
        MEMBER["World Geodetic System 1984 (G873)"],
        MEMBER["World Geodetic System 1984 (G1150)"],
        MEMBER["World Geodetic System 1984 (G1674)"],
        MEMBER["World Geodetic System 1984 (G1762)"],
        MEMBER["World Geodetic System 1984 (G2139)"],
        MEMBER["World Geodetic System 1984 (G2296)"],
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]],
        ENSEMBLEACCURACY[2.0]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["geodetic latitude (Lat)",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["geodetic longitude (Lon)",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    USAGE[
        SCOPE["Horizontal component of 3D system."],
        AREA["World."],
        BBOX[-90,-180,90,180]],
    ID["EPSG",4326]]

Attempting a buffer in a geodetic CRS

Code
buffer_geo <- st_buffer(point, dist = 0.01)

Transform to a projected CRS (UTM Zone 15N)

Code
point_proj <- st_transform(point, 26915)

st_crs(point_proj)
Coordinate Reference System:
  User input: EPSG:26915 
  wkt:
PROJCRS["NAD83 / UTM zone 15N",
    BASEGEOGCRS["NAD83",
        DATUM["North American Datum 1983",
            ELLIPSOID["GRS 1980",6378137,298.257222101,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4269]],
    CONVERSION["UTM zone 15N",
        METHOD["Transverse Mercator",
            ID["EPSG",9807]],
        PARAMETER["Latitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8801]],
        PARAMETER["Longitude of natural origin",-93,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["Scale factor at natural origin",0.9996,
            SCALEUNIT["unity",1],
            ID["EPSG",8805]],
        PARAMETER["False easting",500000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["Engineering survey, topographic mapping."],
        AREA["North America - between 96°W and 90°W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin."],
        BBOX[25.61,-96,84,-90]],
    ID["EPSG",26915]]

Create a 1 km buffer

Code
buffer_proj <- st_buffer(point_proj, dist = 1000)

Visualize the result

Code
tm_shape(buffer_proj) +
  tm_polygons() +
  tm_shape(point_proj) +
  tm_symbols(size = 0.5)

Key takeaway

Geodetic CRS are useful for storing global location data, while projected CRS are necessary for accurate spatial measurements such as distance, area, and buffering.

Transforming between CRS using st_transform() is a standard step in spatial analysis workflows.

Extra Exploration

Compare distances

Code
point2 <- st_sfc(
  st_point(c(-93.10, 44.98)),
  crs = 4326
)

st_distance(point, point2)
Units: [m]
        [,1]
[1,] 5794.77
Code
p1 <- st_transform(point, 26915)
p2 <- st_transform(point2, 26915)

st_distance(p1, p2)
Units: [m]
         [,1]
[1,] 5803.421