You are here

function earth_latitude_range in Location 7.4

Same name and namespace in other branches
  1. 5.3 earth.inc \earth_latitude_range()
  2. 5 earth.inc \earth_latitude_range()
  3. 6.3 earth.inc \earth_latitude_range()
  4. 7.5 earth.inc \earth_latitude_range()
  5. 7.3 earth.inc \earth_latitude_range()
3 calls to earth_latitude_range()
location_handler_argument_location_proximity::query in handlers/location_handler_argument_location_proximity.inc
Set up the query for this argument.
location_views_handler_filter_proximity::query in handlers/location_views_handler_filter_proximity.inc
Add this filter to the query.
_location_search in contrib/location_search/location_search.module
Implementation of hook_search(). (forwarded from location.module)

File

./earth.inc, line 146
Trigonometry for calculating geographical distances. All function arguments and return values measure distances in metres and angles in degrees. The ellipsoid model is from the WGS-84 datum. Ka-Ping Yee, 2003-08-11

Code

function earth_latitude_range($longitude, $latitude, $distance) {

  // Estimate the min and max latitudes within $distance of a given location.
  $long = deg2rad($longitude);
  $lat = deg2rad($latitude);
  $radius = earth_radius($latitude);
  $angle = $distance / $radius;
  $minlat = $lat - $angle;
  $maxlat = $lat + $angle;
  $rightangle = pi() / 2;
  if ($minlat < -$rightangle) {

    // wrapped around the south pole
    $overshoot = -$minlat - $rightangle;
    $minlat = -$rightangle + $overshoot;
    if ($minlat > $maxlat) {
      $maxlat = $minlat;
    }
    $minlat = -$rightangle;
  }
  if ($maxlat > $rightangle) {

    // wrapped around the north pole
    $overshoot = $maxlat - $rightangle;
    $maxlat = $rightangle - $overshoot;
    if ($maxlat < $minlat) {
      $minlat = $maxlat;
    }
    $maxlat = $rightangle;
  }
  return array(
    rad2deg($minlat),
    rad2deg($maxlat),
  );
}