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)

Arguments

x

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.

northp

Logical indicating hemisphere: TRUE for north polar, FALSE for south polar. Can be a vector for different hemispheres per point.

k0

Scale factor at the pole. Default is 0.994 (UPS standard). Use k0 = 1 for true stereographic.

y

Numeric vector of y (northing) coordinates in meters (reverse only).

Value

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)

Details

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

See also

utmups_fwd() for automatic UTM/UPS selection based on latitude.

Examples

# 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