PHP Classes

File: functions/longitude_latitude_distance.php

Recommend this page to a friend!
  Classes of Haseeb Ahmad Basil   PHP Skeleton Framework   functions/longitude_latitude_distance.php   Download  
File: functions/longitude_latitude_distance.php
Role: Auxiliary script
Content type: text/plain
Description: Auxiliary script
Class: PHP Skeleton Framework
Extensive Web application development framework
Author: By
Last change:
Date: 8 years ago
Size: 2,850 bytes
 

Contents

Class file image Download
<?php

$lat1
= $_REQUEST['lat1'];
$long1 = $_REQUEST['long1'];
$lat2 = $_REQUEST['lat2'];
$long2 = $_REQUEST['long2'];

$d = distance_cartesian($lat1, $long1, $lat2, $long2);
print
"cartesian distance: $d\n";

$d = distance_cartesian_modified($lat1, $long1, $lat2, $long2);
print
"cosine modified cartesian distance: $d\n";

$d = distance_spherical($lat1, $long1, $lat2, $long2);
print
"spherical trig distance: $d\n";

#cartesian distance
function distance_cartesian($lat1, $long1, $lat2, $long2) {
   
$d = sqrt( pow($long1-$long2, 2) + pow($lat1-$lat2, 2) );
    return
$d * 69;
}

# modified cartesian distance
function distance_cartesian_modified($lat1, $long1, $lat2, $long2) {
   
$d = sqrt(
               
pow(
                    (
$long1 - $long2)
                    *
cos(
                        ((
$lat1 + $lat2) / 2) / 180 * M_PI
                       
)
                ,
2)
                +
pow(($lat1-$lat2), 2)
            ) *
69;
   return
$d;
}

function
acos($n) {
    return
atan2( sqrt(1 - $n * $n), $n);
}


# convert degres to radians
function deg2rad($n) {
    return
$n / 180 * M_PI;
}

# spherical distance
function distance_spherical($lat1, $long1, $lat2, $long2) {
   
$lat1 = $lat1/180 * M_PI;
   
$long1 = $long1/180 * M_PI;
   
$lat2 = $lat2/180 * M_PI;
   
$long2 = $long2/180 * M_PI;

   
$a = $long1 - $long2;
    if (
$a < 0) {$a = -$a;}
    if (
$a > M_PI) {$a = 2 * M_PI;}

   
$d = acos(sin($lat2) * sin($lat1) + cos($lat2)*cos($lat1)*cos($a)) * 3958;
    return
$d;
}
/*
die "usage disttest lat1 long1 lat2 long2" unless (@ARGV == 4);
my ($lat1, $long1, $lat2, $long2) = @ARGV;

my $d1 = dist(@ARGV);
print "spherical trig distance: $d1\n";

$d2 = cdist(@ARGV);
print "cartesian distance: $d2\n";

$d3 = mcdist(@ARGV);
print "cosine modified cartesian distance: $d3\n";

#cartesian distance
sub cdist {
    my ($lat1, $long1, $lat2, $long2) = @_;
    $h = sqrt( ($long1-$long2)**2 + ($lat1-$lat2)**2 );
    return $h * 69;
}

# modified cartesian distance
sub mcdist {
    my ($lat1, $long1, $lat2, $long2) = @_;
    # calc hyp

    $h = sqrt( (($long1-$long2)* cos(deg2rad( ($lat1+$lat2)/2)))**2 + ( ($lat1-$lat2))**2 )*69;

    return $h ;
}

sub acos {
    #print STDERR " acos param: |@_| \n";
    atan2( sqrt(1-$_[0] * $_[0]), $_[0])
}


# convert degres to radians
sub deg2rad {
    my $n = shift;
    $pi = atan2(1,1) * 4;
    return $n/180 * $pi;
}

# spherical distance
sub dist {

    $pi = atan2(1,1) * 4;

    my @parms = @_;
    my $lat1 = $parms[0]/180 * $pi ;
    my $long1 = $parms[1]/180 * $pi;
    my $lat2 = $parms[2]/180 * $pi;
    my $long2 = $parms[3]/180 * $pi;

    $a = $long1 - $long2;
    if ($a < 0) {$a = -$a;}
    if ($a > $pi) {$a = 2 * $pi;}

    $d = acos(sin($lat2) * sin($lat1) + cos($lat2)*cos($lat1)*cos($a)) * 3958;
    return $d ;
}
*/