@ 2016-08-24T19:36:53Z <?php
class Coordinate
{
/** @var float $latitudeRadians */
protected $latitudeRadians;
/** @var float $longitudeRadians */
protected $longitudeRadians;
/**
* Constructor.
*
* @param float $latitudeRadians
* @param float $latitudeRadians
*/
public function __construct(
float $latitudeRadians,
float $longitudeRadians
) {
$this->latitudeRadians = $latitudeRadians;
$this->longitudeRadians = $longitudeRadians;
}
/**
* Create a Coordinate object from latitude and longitude given in degrees.
*
* @param float $latitudeDegrees
* @param float $longitudeDegrees
*
* @return static
*/
public static function fromDegrees(float $latitudeDegrees, float $longitudeDegrees)
{
return new static(
$latitudeDegrees * M_PI / 180,
$longitudeDegrees * M_PI / 180
);
}
/**
* Get the coordinate's latitude, measured in degrees.
*
* @return float
*/
public function latitudeDegrees() : float
{
return $this->latitudeRadians * 180 / M_PI;
}
/**
* Get the coordinate's latitude, measured in radians.
*
* @return float
*/
public function latitudeRadians() : float
{
return $this->latitudeRadians;
}
/**
* Get the coordinate's longitude, measured in degrees.
*
* @return float
*/
public function longitudeDegrees() : float
{
return $this->longitudeRadians * 180 / M_PI;
}
/**
* Get the coordinate's longitude, measured in radians.
*
* @return float
*/
public function longitudeRadians() : float
{
return $this->longitudeRadians;
}
/**
* Is this coordinate equivalent to another?
*
* @param static $other
*
* @return bool
*/
public function equals(self $other) : bool
{
return $this->latitudeRadians() === $other->latitudeRadians()
&& $this->longitudeRadians() === $other->longitudeRadians()
;
}
/**
* Calculate the distance between this and another coordinate, in kilometers.
*
* @param static $other
*
* @return float
*/
public function distanceKilometers(self $other) : float
{
// Haversine formula for great-circle distance.
$earthRadiusKilometers = 6371;
$deltaLatitudeRadians = $this->latitudeRadians() - $other->latitudeRadians();
$deltaLongitudeRadians = $this->longitudeRadians() - $other->longitudeRadians();
$a = sin($deltaLatitudeRadians / 2) ** 2
+ cos($this->latitudeRadians())
* cos($other->latitudeRadians())
* sin($deltaLongitudeRadians / 2) ** 2
;
$c = 2 * asin(sqrt($a));
return $c * $earthRadiusKilometers;
}
}
$latitudeWorkDegrees = 40.981123;
$longitudeWorkDegrees = -74.121752;
$latitudeHomeDegrees = 41.184084;
$longitudeHomeDegrees = -74.555852;
$latitudeWorkRadians = deg2rad($latitudeWorkDegrees);
$longitudeWorkRadians = deg2rad($longitudeWorkDegrees);
$latitudeHomeRadians = deg2rad($latitudeHomeDegrees);
$longitudeHomeRadians = deg2rad($longitudeHomeDegrees);
$coordinateWork = new Coordinate($latitudeWorkRadians, $longitudeWorkRadians);
$coordinateHome = new Coordinate($latitudeHomeRadians, $longitudeHomeRadians);
$distance = $coordinateWork->distanceKilometers($coordinateHome);
echo $distance;
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.33 , 7.1.0 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 42.81480916916 Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
42.81480916916 Output for 5.6.0 - 5.6.40 Parse error: syntax error, unexpected ':', expecting ';' or '{' in /in/jFil3 on line 46
Process exited with code 255 . preferences:dark mode live preview
238.35 ms | 401 KiB | 291 Q