Compute the Tissot indicatrix at given longitude/latitude locations for a map projection. Returns scale factors, angular deformation, convergence, and related distortion properties.
tissot(
x,
target,
...,
source = "EPSG:4326",
A = 6378137,
f.inv = 298.257223563,
dx = 1e-04
)input coordinates — any xy-ish object: a two-column matrix,
data.frame, tibble, list with x/y or lon/lat components,
or a length-2 numeric vector for a single point
target projection CRS string (required)
ignored
source CRS (default "EPSG:4326")
semi-major axis of the ellipsoid (default WGS84)
inverse flattening (default WGS84)
finite difference step in degrees (default 1e-4)
A tissot_tbl tibble with columns: x (lon), y (lat), dx_dlam,
dy_dlam, dx_dphi, dy_dphi, scale_h, scale_k, scale_omega, scale_a,
scale_b, scale_area, angle_deformation, convergence. The source and
target CRS strings are stored as attributes.
The Jacobian of the projection is computed via finite differences, projecting
all base and offset points in a single batched call to
gdalraster::transform_xy(). All subsequent calculations (SVD, distortion
metrics) are fully vectorized.
Input 'x' is assumed to be longitude,latitude values, with default 'EPSG:4326'. Set 'source' for a different 'geographic' coordinate reference system.
tissot(c(0, 45), "+proj=robin")
#> Tissot indicatrix: 1 point, +proj=robin
#> # A tibble: 1 × 14
#> x y dx_dlam dy_dlam dx_dphi dy_dphi scale_h scale_k scale_omega
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0 45 1.07 0 0 0.946 0.946 1.07 7.25
#> # ℹ 5 more variables: scale_a <dbl>, scale_b <dbl>, scale_area <dbl>,
#> # angle_deformation <dbl>, convergence <dbl>
tissot(cbind(seq(-180, 180, by = 30), 0), "+proj=robin")
#> Tissot indicatrix: 13 points, +proj=robin
#> # A tibble: 13 × 14
#> x y dx_dlam dy_dlam dx_dphi dy_dphi scale_h scale_k scale_omega
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 -180 0 0.849 0 1.10e-6 0.967 0.967 8.49e-1 7.49
#> 2 -150 0 0.849 0 9.17e-7 0.967 0.967 8.49e-1 7.49
#> 3 -120 0 0.849 0 7.34e-7 0.967 0.967 8.49e-1 7.49
#> 4 -90 0 0.849 0 5.50e-7 0.967 0.967 8.49e-1 7.49
#> 5 -60 0 0.849 0 3.67e-7 0.967 0.967 8.49e-1 7.49
#> 6 -30 0 0.849 0 1.83e-7 0.967 0.967 8.49e-1 7.49
#> 7 0 0 0.849 0 0 0.967 0.967 8.49e-1 7.49
#> 8 30 0 0.849 0 -1.83e-7 0.967 0.967 8.49e-1 7.49
#> 9 60 0 0.849 0 -3.67e-7 0.967 0.967 8.49e-1 7.49
#> 10 90 0 0.849 0 -5.50e-7 0.967 0.967 8.49e-1 7.49
#> 11 120 0 0.849 0 -7.34e-7 0.967 0.967 8.49e-1 7.49
#> 12 150 0 0.849 0 -9.17e-7 0.967 0.967 8.49e-1 7.49
#> 13 180 0 -3055319. 0 -1.10e-6 0.967 0.967 3.06e+6 180.
#> # ℹ 5 more variables: scale_a <dbl>, scale_b <dbl>, scale_area <dbl>,
#> # angle_deformation <dbl>, convergence <dbl>