Convert geographic coordinates to/from Polar Stereographic projection. This conformal projection is used for polar regions and is the basis for the Universal Polar Stereographic (UPS) system.
polarstereo_fwd(x, northp, k0 = 0.994)
polarstereo_rev(x, y, northp, k0 = 0.994)For forward conversion: a two-column matrix or data frame of coordinates (longitude, latitude) in decimal degrees. For reverse conversion: numeric vector of x (easting) coordinates in meters.
Logical indicating hemisphere: TRUE for north polar, FALSE for south polar. Can be a vector for different hemispheres per point.
Scale factor at the pole. Default is 0.994 (UPS standard). Use k0 = 1 for true stereographic.
Numeric vector of y (northing) coordinates in meters (reverse only).
Data frame with columns:
For forward conversion:
x: Easting in meters from pole
y: Northing in meters from pole
convergence: Grid convergence in degrees
scale: Scale factor at the point
lon, lat: Input coordinates (echoed)
northp: Hemisphere indicator (echoed)
For reverse conversion:
lon: Longitude in decimal degrees
lat: Latitude in decimal degrees
convergence: Grid convergence in degrees
scale: Scale factor at the point
x, y: Input coordinates (echoed)
northp: Hemisphere indicator (echoed)
The Polar Stereographic projection is a conformal azimuthal projection centered on either pole. It is ideal for mapping polar regions because:
It preserves local angles and shapes
Directions from the pole are true
Scale distortion is minimal near the pole
UPS (Universal Polar Stereographic) The default k0 = 0.994 corresponds to the UPS system used by:
NATO military mapping
EPSG:32661 (UPS North) and EPSG:32761 (UPS South)
High-latitude extensions of UTM
UPS is used for latitudes poleward of 84°N and 80°S.
Common scale factors:
k0 = 0.994: UPS standard
k0 = 1.0: True stereographic (scale = 1 at pole)
k0 = 0.97276901289: NSIDC Sea Ice Polar Stereographic
utmups_fwd() for automatic UTM/UPS selection based on latitude.
# Antarctic stations
stations <- cbind(
lon = c(166.67, 77.97, -43.53, 0),
lat = c(-77.85, -67.60, -60.72, -90)
)
polarstereo_fwd(stations, northp = FALSE)
#> x y convergence scale lon lat northp
#> 1 312134.1 -1317339 -166.67 1.005257 166.67 -77.85 FALSE
#> 2 2462526.5 524774 -77.97 1.032951 77.97 -67.60 FALSE
#> 3 -2286985.7 2407454 43.53 1.061771 -43.53 -60.72 FALSE
#> 4 0.0 0 0.00 0.994000 0.00 -90.00 FALSE
# Arctic points
arctic <- cbind(lon = c(0, 90, 180, -90), lat = c(85, 85, 85, 85))
polarstereo_fwd(arctic, northp = TRUE)
#> x y convergence scale lon lat northp
#> 1 0.0 -555457.4 0 0.9958948 0 85 TRUE
#> 2 555457.4 0.0 90 0.9958948 90 85 TRUE
#> 3 0.0 555457.4 180 0.9958948 180 85 TRUE
#> 4 -555457.4 0.0 -90 0.9958948 -90 85 TRUE
# True stereographic (k0 = 1)
polarstereo_fwd(stations, northp = FALSE, k0 = 1.0)
#> x y convergence scale lon lat northp
#> 1 314018.2 -1325290.5 -166.67 1.011325 166.67 -77.85 FALSE
#> 2 2477390.9 527941.6 -77.97 1.039186 77.97 -67.60 FALSE
#> 3 -2300790.5 2421986.2 43.53 1.068180 -43.53 -60.72 FALSE
#> 4 0.0 0.0 0.00 1.000000 0.00 -90.00 FALSE
# NSIDC Sea Ice projection
polarstereo_fwd(stations, northp = FALSE, k0 = 0.97276901289)
#> x y convergence scale lon lat northp
#> 1 305467.2 -1289201.5 -166.67 0.9837858 166.67 -77.85 FALSE
#> 2 2409929.1 513565.2 -77.97 1.0108881 77.97 -67.60 FALSE
#> 3 -2238137.7 2356033.1 43.53 1.0390928 -43.53 -60.72 FALSE
#> 4 0.0 0.0 0.00 0.9727690 0.00 -90.00 FALSE
# South Pole is at origin
sp <- polarstereo_fwd(c(0, -90), northp = FALSE)
sp$x # 0
#> [1] 0
sp$y # 0
#> [1] 0
# Round-trip conversion
fwd <- polarstereo_fwd(stations, northp = FALSE)
polarstereo_rev(fwd$x, fwd$y, northp = FALSE)
#> lon lat convergence scale x y northp
#> 1 166.67 -77.85 -166.67 1.005257 312134.1 -1317339 FALSE
#> 2 77.97 -67.60 -77.97 1.032951 2462526.5 524774 FALSE
#> 3 -43.53 -60.72 43.53 1.061771 -2286985.7 2407454 FALSE
#> 4 0.00 -90.00 0.00 0.994000 0.0 0 FALSE