Dropped Distance class
Moved off to joshtronic/php-distance
This commit is contained in:
parent
ecb075b344
commit
91579b3be4
2 changed files with 0 additions and 217 deletions
142
src/Distance.php
142
src/Distance.php
|
@ -1,142 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Distance
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* Redistribution of these files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2007-2014, Josh Sherman
|
||||
* @license http://www.opensource.org/licenses/mit-license.html
|
||||
* @link https://github.com/joshtronic/pickles
|
||||
* @package Pickles
|
||||
*/
|
||||
|
||||
namespace Pickles;
|
||||
|
||||
/**
|
||||
* Distance Class
|
||||
*
|
||||
* Collection of statically called methods to help aid distance-related
|
||||
* conversions and calculations.
|
||||
*/
|
||||
class Distance
|
||||
{
|
||||
// {{{ Call Static
|
||||
|
||||
/**
|
||||
* Call Static
|
||||
*
|
||||
* Magic method to power the unit conversion without much code.
|
||||
*
|
||||
* @static
|
||||
* @param string $method name of the static method being called
|
||||
* @param array $arguments array of the passed arguments
|
||||
* @return mixed converted units or false
|
||||
*/
|
||||
public static function __callStatic($method, $arguments)
|
||||
{
|
||||
$pieces = explode('to', strtolower($method));
|
||||
|
||||
if (count($pieces) == 2 && $pieces[1])
|
||||
{
|
||||
return Distance::convertUnit($arguments[0], $pieces[0], $pieces[1]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// }}}
|
||||
// {{{ Convert Unit
|
||||
|
||||
/**
|
||||
* Convert Unit
|
||||
*
|
||||
* Converts a distance from one unit to another.
|
||||
*
|
||||
* @static
|
||||
* @param mixed $distance starting distance
|
||||
* @param string $from starting unit
|
||||
* @param string $to ending unit
|
||||
* @return mixed
|
||||
*/
|
||||
private static function convertUnit($distance, $from, $to)
|
||||
{
|
||||
$multiplier = 1;
|
||||
|
||||
switch ($from)
|
||||
{
|
||||
case 'kilometers':
|
||||
switch ($to)
|
||||
{
|
||||
case 'miles': $multiplier = 0.621371; break;
|
||||
case 'meters': $multiplier = 1000; break;
|
||||
case 'yards': $multiplier = 1093.61; break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'miles':
|
||||
switch ($to)
|
||||
{
|
||||
case 'kilometers': $multiplier = 1.60934; break;
|
||||
case 'meters': $multiplier = 1609.34; break;
|
||||
case 'yards': $multiplier = 1760; break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'meters':
|
||||
switch ($to)
|
||||
{
|
||||
case 'kilometers': $multiplier = 0.001; break;
|
||||
case 'miles': $multiplier = 0.000621371; break;
|
||||
case 'yards': $multiplier = 1.09361; break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return $distance * $multiplier;
|
||||
}
|
||||
|
||||
// }}}
|
||||
// {{{ Calculate Distance
|
||||
|
||||
/**
|
||||
* Calculate Distance
|
||||
*
|
||||
* Calculates the distance between two sets of coordinates and returns the
|
||||
* requested units. I really wanted to call this distance() but it seems
|
||||
* you can't do that in PHP due to the backwards compatibility of the
|
||||
* PHP4 constructors that were named the same as the class.
|
||||
*
|
||||
* @static
|
||||
* @param mixed $latitude_from starting latitude
|
||||
* @param mixed $longitude_from starting longitude
|
||||
* @param mixed $latitude_to ending latitude
|
||||
* @param mixed $longitude_to ending longitude
|
||||
* @param string $unit optional units to return, miles by default
|
||||
* @return mixed distance between the points in the desired unit
|
||||
*/
|
||||
public static function calculateDistance($latitude_from, $longitude_from, $latitude_to, $longitude_to, $unit = 'miles')
|
||||
{
|
||||
$unit = ucwords(strtolower($unit));
|
||||
$theta = $longitude_from - $longitude_to;
|
||||
|
||||
$distance =
|
||||
sin(deg2rad($latitude_from))
|
||||
* sin(deg2rad($latitude_to))
|
||||
+ cos(deg2rad($latitude_from))
|
||||
* cos(deg2rad($latitude_to))
|
||||
* cos(deg2rad($theta));
|
||||
|
||||
$distance = acos($distance);
|
||||
$distance = rad2deg($distance);
|
||||
$miles = $distance * 60 * 1.1515;
|
||||
|
||||
$method = 'milesTo' . $unit;
|
||||
|
||||
return Distance::$method($miles);
|
||||
}
|
||||
|
||||
// }}}
|
||||
}
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
<?php
|
||||
|
||||
class DistanceTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testConvertKilometersToMiles()
|
||||
{
|
||||
$this->assertEquals(0.621371, Pickles\Distance::kilometersToMiles(1));
|
||||
}
|
||||
|
||||
public function testConvertKilometersToMeters()
|
||||
{
|
||||
$this->assertEquals(1000, Pickles\Distance::kilometersToMeters(1));
|
||||
}
|
||||
|
||||
public function testConvertKilometersToYards()
|
||||
{
|
||||
$this->assertEquals(1093.61, Pickles\Distance::kilometersToYards(1));
|
||||
}
|
||||
|
||||
public function testConvertMilesToKilometers()
|
||||
{
|
||||
$this->assertEquals(1.60934, Pickles\Distance::milesToKilometers(1));
|
||||
}
|
||||
|
||||
public function testConvertMilesToMeters()
|
||||
{
|
||||
$this->assertEquals(1609.34, Pickles\Distance::milesToMeters(1));
|
||||
}
|
||||
|
||||
public function testConvertMilesToYards()
|
||||
{
|
||||
$this->assertEquals(1760, Pickles\Distance::milesToYards(1));
|
||||
}
|
||||
|
||||
public function testConvertMetersToKilometers()
|
||||
{
|
||||
$this->assertEquals(0.001, Pickles\Distance::metersToKilometers(1));
|
||||
}
|
||||
|
||||
public function testConvertMetersToMiles()
|
||||
{
|
||||
$this->assertEquals(0.000621371, Pickles\Distance::metersToMiles(1));
|
||||
}
|
||||
|
||||
public function testConvertMetersToYards()
|
||||
{
|
||||
$this->assertEquals(1.09361, Pickles\Distance::metersToYards(1));
|
||||
}
|
||||
|
||||
public function testCalculateDistanceMiles()
|
||||
{
|
||||
$this->assertEquals(1003.2646776326, Pickles\Distance::calculateDistance(27.947222, -82.458611, 40.67, -73.94));
|
||||
}
|
||||
|
||||
public function testCalculateDistanceKilometers()
|
||||
{
|
||||
$this->assertEquals(1614.5939763012, Pickles\Distance::calculateDistance(27.947222, -82.458611, 40.67, -73.94, 'kilometers'));
|
||||
}
|
||||
|
||||
public function testCalculateDistanceMeters()
|
||||
{
|
||||
$this->assertEquals(1614593.9763012, Pickles\Distance::calculateDistance(27.947222, -82.458611, 40.67, -73.94, 'meters'), '', 0.2);
|
||||
}
|
||||
|
||||
public function testCalculateDistanceYards()
|
||||
{
|
||||
$this->assertEquals(1765745.8326334, Pickles\Distance::calculateDistance(27.947222, -82.458611, 40.67, -73.94, 'yards'), '', 0.2);
|
||||
}
|
||||
|
||||
public function testNotEnoughUnits()
|
||||
{
|
||||
$this->assertFalse(Pickles\Distance::milesTo(123));
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue