[gdal-dev] Lat/long & distance/heading calculation
Frank Warmerdam
warmerdam at pobox.com
Mon Jan 28 12:03:55 EST 2008
Meek, Allan (Contractor) wrote:
> This is a bit of a long shot, but I'm hoping I might find some help
> here.
>
> I have a start lat/long position, a distance, and a heading. Is there an
> easy way (in OGR or elsewhere) to calculate the end lat/long position
> (after travelling the given distance on the given heading)?
>
> I have a working formula for calculating the distance and heading
> between two lat/long positions, but I wanted to see if I can get around
> having to rework this to solve my problem.
Allan,
This sort of operation can be handled by the "geod" program distributed
with PROJ.4. I think there are corresponding callable C function but
I'm not positive.
GEOD(1) GEOD(1)
NAME
geod - direct geodesic computations
invgeod - inverse geodesic computations
SYNOPSIS
geod +ellps=<ellipse> [ -afFIlptwW [ args ] ] [
+args ] file[s]
invgeod +ellps=<ellipse> [ -afFIlptwW [ args ] ]
[ +args ] file[s]
DESCRIPTION
Geod (direct) and invgeod (inverse) perform
geodesic (Great Circle) computations for deter-
mining latitude, longitude and back azimuth of a
terminus point given a initial point latitude,
longitude, azimuth and distance (direct) or the
forward and back azimuths and distance between
an initial and terminus point latitudes and lon-
gitudes (inverse).
The following runline control parameters can
appear in any order:
-I Specifies that the inverse geodesic com-
putation is to be performed. May be used
with execution of goed as an alternative
to invgeod execution.
-a Latitude and longitudes of the initial
and terminal points, forward and back
azimuths and distance are output.
-ta A specifies a character employed as the
first character to denote a control line
to be passed through without processing.
-le Gives a listing of all the ellipsoids
that may be selected with the +ellps=
option.
-lu Gives a listing of all the units that may
be selected with the +units= option.
-[f|F] format
Format is a printf format string to con-
trol the output form of the geographic
coordinate values (f) or distance value
(F). The default mode is DMS for geo-
graphic coordinates and "%.3f" for dis-
tance.
-[w|W]n
N is the number of significant fractional
digits to employ for seconds output (when
the option is not specified, -w3 is
assumed). When -W is employed the fields
will be constant width with leading
zeroes.
-p This option causes the azimuthal values
to be output as unsigned DMS numbers
between 0 and 360 degrees. Also note -f.
The +args run-line arguments are associated with
geodetic parameters for specifying the ellip-
soidal or sphere to use. See proj documentation
for full list of these parameters and contrl.
The options are processed in left to right order
from the run line. Reentry of an option is
ignored with the first occurance assumed to be
the desired value.
One or more files (processed in left to right
order) specify the source of data to be trans-
formed. A - will specify the location of pro-
cessing standard input. If no files are speci-
fied, the input is assumed to be from stdin.
For direct determinations input data must be in
latitude, longitude, azimuth and distance order
and output will be latitude, longitude and back
azimuth of the terminus point. Latitude, longi-
tude of the initial and terminus point are input
for the inverse mode and respective forward and
back azimuth from the initial and terminus
points are output along with the distance
between the points.
Input geographic coordinates (latitude and lon-
gitude) and azimuthal data must be in DMS format
and input distance data must be in units consis-
tent with the ellipsoid major axis or sphere
radius units. Output geographic coordinates
will be in DMS (if the -f switch is not
employed) to 0.001" with trailing, zero-valued
minute-second fields deleted. Output distance
data will be in the same units as the ellipsoid
or sphere radius.
The Earths ellipsoidal figure may be selected
in the same manner as program proj by using
+ellps=, +a=, +es=, etc.
Geod may also be used to determine intermediate
points along either a geodesic line between two
points or along an arc of specified distance
from a geographic point. In both cases an ini-
tial point must be specified with +lat_1=lat and
+lon_1=lon parameters and either a terminus
point +lat_2=lat and +lon_2=lon or a distance
and azimuth from the initial point with +S=dis-
tance and +A=azimuth must be specified.
If points along a geodesic are to be determined
then either +n_S=integer specifying the number
of intermediate points and/or +del_S=distance
specifying the incremental distance between
points must be specified.
To determine points along an arc equidistant
from the initial point both +del_A=angle and
+n_A=integer must be specified which determine
the respective angular increments and number of
points to be determined.
EXAMPLE
The following script determines the geodesic
azimuths and distance in U.S. stature miles from
Boston, MA, to Portland, OR:
geod +ellps=clrk66 <<EOF -I +units=us-mi
42d15N 71d07W 45d31N 123d41W
EOF
which gives the results:
-66d3150.141" 75d3913.083" 2587.504
where the first two values are the azimuth from
Boston to Portland, the back azimuth from Port-
land to Boston followed by the distance.
An example of forward geodesic use is to use the
Boston location and determine Portlands loca-
tion by azimuth and distance:
geod +ellps=clrk66 <<EOF +units=us-mi
42d15N 71d07W -66d3150.141" 2587.504
EOF
which gives:
45d310.003"N 123d4059.985"W
75d3913.094"
Note: lack of precision in the distance value
compromises the precision of the Portland loca-
tion.
SEE ALSO
Thomas, P.D., 1970, Spheroidal Geodesics, Refer-
ence Systems & Local Geometry: U.S. Naval
Oceanographic Office, S-138.
HOME PAGE
http://www.remotesensing.org/proj
2000/03/21 Rel. 4.4
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmerdam at pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | President OSGeo, http://osgeo.org
More information about the gdal-dev
mailing list