[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  Earth’s  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
              42d15’N 71d07’W 45d31’N 123d41’W
              EOF
        which gives the results:
              -66d31’50.141"   75d39’13.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  Portland’s  loca-
        tion by azimuth and distance:
              geod +ellps=clrk66 <<EOF +units=us-mi
              42d15’N 71d07’W -66d31’50.141" 2587.504
              EOF
        which gives:
              45d31’0.003"N              123d40’59.985"W
             75d39’13.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