コード例 #1
0
ファイル: Calculator.php プロジェクト: Konafets/oelib
 /**
  * Moves $object by $distance kilometers in the direction of $direction.
  *
  * Note: This move is not very accurate.
  *
  * @param tx_oelib_Interface_Geo $object
  * @param float $direction direction of the movement in degrees (0.0 is east)
  * @param float $distance distance to move in kilometers, may be positive, zero or negative
  *
  * @return void
  */
 public function move(tx_oelib_Interface_Geo $object, $direction, $distance)
 {
     $directionInRadians = deg2rad($direction);
     $originalCoordinates = $object->getGeoCoordinates();
     /** @var float $originalLatitude */
     $originalLatitude = $originalCoordinates['latitude'];
     /** @var float $originalLongitude */
     $originalLongitude = $originalCoordinates['longitude'];
     $xDeltaInKilometers = $distance * cos($directionInRadians);
     $yDeltaInKilometers = $distance * sin($directionInRadians);
     $oneDegreeLongitudeInKilometers = 2 * M_PI * self::EARTH_RADIUS_IN_KILOMETERS * cos($originalLongitude) / 360;
     $latitudeDelta = $yDeltaInKilometers / self::ONE_DEGREE_LATITUDE_IN_KILOMETERS;
     $longitudeDelta = $xDeltaInKilometers / $oneDegreeLongitudeInKilometers;
     $object->setGeoCoordinates(array('latitude' => $originalLatitude + $latitudeDelta, 'longitude' => $originalLongitude + $longitudeDelta));
 }