/** * 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)); }