/** * @param DistanceUnit $unit * * @return Distance */ public function in(DistanceUnit $unit) { if ($this->unit()->equals($unit)) { return $this; } return new self($this->value()->multReal(Real::fromNative($this->unit()->conversionRate($unit))), $unit); }
/** * @param Coordinate $coordinate * @param DistanceUnit $unit */ public function distance(Coordinate $coordinate, DistanceUnit $unit = null) { $latA = \deg2rad($this->latitude()); $lngA = \deg2rad($this->longitude()); $latB = \deg2rad($coordinate->latitude()); $lngB = \deg2rad($coordinate->longitude()); $degrees = \acos(\sin($latA) * \sin($latB) + \cos($latA) * \cos($latB) * \cos($lngB - $lngA)); $unit = $unit === null ? DistanceUnit::METER() : $unit; return (new Distance(Real::fromNative($degrees * self::EARTH_RADIUS), DistanceUnit::METER()))->in($unit); }
/** * @param SelectorInterface $selector * @param Coordinate $coordinate * @param Distance $radius */ public function __construct(SelectorInterface $selector, Coordinate $coordinate, Distance $radius = null) { $this->selector = $selector; $this->coordinate = $coordinate; $this->radius = $radius === null ? new Distance(Real::fromNative(self::DEFAULT_RADIUS), DistanceUnit::METER()) : $radius; }
/** * @param float $value */ public function __construct($value) { parent::__construct($this->normalize($value)); }
/** * {@inheritdoc} */ protected function fromNative($value) { return Real::fromNative($value); }