-
Notifications
You must be signed in to change notification settings - Fork 2
/
cassini_inv.m
39 lines (36 loc) · 1.67 KB
/
cassini_inv.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function [lat, lon, azi, rk] = cassini_inv(lat0, lon0, x, y, ellipsoid)
%CASSINI_INV Inverse Cassini-Soldner projection
%
% [lat, lon] = CASSINI_INV(lat0, lon0, x, y)
% [lat, lon, azi, rk] = CASSINI_INV(lat0, lon0, x, y, ellipsoid)
%
% performs the inverse Cassini-Soldner projection of points (x,y) to
% (lat,lon) using (lat0,lon0) as the center of projection. These input
% arguments can be scalars or arrays of equal size. The ellipsoid vector
% is of the form [a, e], where a is the equatorial radius in meters, e is
% the eccentricity. If ellipsoid is omitted, the WGS84 ellipsoid (more
% precisely, the value returned by defaultellipsoid) is used. projdoc
% defines the projection and gives the restrictions on the allowed ranges
% of the arguments. The forward projection is given by cassini_fwd.
%
% azi and rk give metric properties of the projection at (lat,lon); azi
% is the azimuth of the easting (x) direction and rk is the reciprocal of
% the northing (y) scale. The scale in the easting direction is 1.
%
% lat0, lon0, lat, lon, azi are in degrees. The projected coordinates x,
% y are in meters (more precisely the units used for the equatorial
% radius). rk is dimensionless.
%
% See also PROJDOC, CASSINI_FWD, GEODRECKON, DEFAULTELLIPSOID, FLAT2ECC.
% Copyright (c) Charles Karney (2012-2015) <karney@alum.mit.edu>.
narginchk(4, 5)
if nargin < 5, ellipsoid = defaultellipsoid; end
try
[~] = lat0 + lon0 + x + y;
catch
error('lat0, lon0, x, y have incompatible sizes')
end
[lat1, lon1, azi0] = geodreckon(lat0, lon0, y, 0, ellipsoid);
[lat, lon, azi, ~, ~, rk] = ...
geodreckon(lat1, lon1, x, azi0 + 90, ellipsoid);
end