http://qs321.pair.com?node_id=172943

beretboy has asked for the wisdom of the Perl Monks concerning the following question:

I recently found the need to take two coordinates and find the distance between them (These are geographical coordinates). With the help of Zaxo I was able to find many helpful examples (see crowflight.plx) but I thought it was odd that I could find no modules for doing this. Does anyone know of such a module? (And yes I know i should write my own but I want to be sure it has not been done already)

"Sanity is the playground of the unimaginative" -Unknown

Replies are listed 'Best First'.
Re: Distance Between Geographical Coordinates
by Zaxo (Archbishop) on Jun 09, 2002 at 23:10 UTC

    I believe I mentioned Math::Trig to you. It is in the standard perl distribution. From the pod:

    GREAT CIRCLE DISTANCES
           You can compute spherical distances, called great circle distances, by
           importing the "great_circle_distance" function:
    
                   use Math::Trig 'great_circle_distance'
    
             $distance = great_circle_distance($theta0, $phi0, $theta1, $phi1, [, $rho]);
    
           The great circle distance is the shortest distance between two points on a
           sphere.  The distance is in "$rho" units.  The "$rho" is optional, it
           defaults to 1 (the unit sphere), therefore the distance defaults to radi­
           ans.
    
           If you think geographically the theta are longitudes: zero at the Green­
           which meridian, eastward positive, westward negative--and the phi are lat­
           itudes: zero at the North Pole, northward positive, southward negative.
           NOTE: this formula thinks in mathematics, not geographically: the phi zero
           is at the North Pole, not at the Equator on the west coast of Africa (Bay
           of Guinea).  You need to subtract your geographical coordinates from pi/2
           (also known as 90 degrees).
    
             $distance = great_circle_distance($lon0, pi/2 - $lat0,
                                               $lon1, pi/2 - $lat1, $rho);
    
    
    The pod goes on with an example.

    After Compline,
    Zaxo

      zero at the North Pole, northward positive

      How exactly do I go northward from the North Pole?

      Abigail

        go north zero (or less) units ;P

        ~Particle *accelerates*

(jcwren) Re: Distance Between Geographical Coordinates
by jcwren (Prior) on Jun 09, 2002 at 21:41 UTC
Re: Distance Between Geographical Coordinates
by dws (Chancellor) on Jun 09, 2002 at 21:35 UTC
    I recently found the need to take two coordinates and find the distance between them

    The distance between two points is usually given as the "great sphere" distance, which is calculated using spherical trigonometry. The direct distance is seldom used, since crows can't fly underground. A quick google search for "calculate great sphere distance" finds this page, which details the calculation.

Re: Distance Between Geographical Coordinates
by cacharbe (Curate) on Jun 10, 2002 at 01:09 UTC
    I'd also like to plug my own code, as I show four different methods of varying accuracys for finding the distance between two sets of coordinates (including Math::Trig), as well as providing some useful off site links.

    C-.

Re: Distance Between Geographical Coordinates
by delegatrix (Scribe) on Jun 10, 2002 at 13:28 UTC
    I don't know about existing perl code, but my GIS FAQ has a detailed discussion on calculating the distance between two points on the globe. See Section 5.1.
Re: Distance Between Geographical Coordinates
by beretboy (Chaplain) on Jun 10, 2002 at 22:04 UTC
    many thanks! jcwren especially

    "Sanity is the playground of the unimaginative" -Unknown