/
CalculateDistanceBetweenGeoPoints.php
74 lines (60 loc) · 1.41 KB
/
CalculateDistanceBetweenGeoPoints.php
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
$usage = 'Usage:' . PHP_EOL . ' CalculateDistanceBetweenGeoPoints.php <latitude1> <longitude1> <latitude2> <longitude2> [units]';
// Get command line arguments
$lat1 = $argv[1];
$lon1 = $argv[2];
$lat2 = $argv[3];
$lon2 = $argv[4];
$unit = $argv[5] ? $argv[5] : 'miles';
if (
!$lat1
|| !$lon1
|| !$lat2
|| !$lon2
) {
echo 'Missing arguments. ' . $usage . PHP_EOL;
die;
}
// init GeoPoint objects
$point1 = new GeoPoint($lat1, $lon1);
$point2 = new GeoPoint($lat2, $lon2);
// Calculate distance
$distance = getDistanceBetweenPoints($point1, $point2, $unit);
// Output result
echo $distance . ' ' . $unit . PHP_EOL;
function getDistanceBetweenPoints($geo_point_1, $geo_point_2, $unit = 'miles')
{
$theta = $geo_point_1->getLongitude() - $geo_point_2->getLongitude();
$dist = sin(deg2rad($geo_point_1->getLatitude()))
* sin(deg2rad($geo_point_2->getLatitude()))
+ cos(deg2rad($geo_point_1->getLatitude()))
* cos(deg2rad($geo_point_2->getLatitude()))
* cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
if ($unit == 'km') {
return ($miles * 1.609344);
} else {
return $miles;
}
}
class GeoPoint
{
private $lat = false;
private $lon = false;
public function __construct($lat, $lon)
{
$this->lat = $lat;
$this->lon = $lon;
}
public function getLatitude()
{
return $this->lat;
}
public function getLongitude()
{
return $this->lon;
}
}
?>