Example #1
0
function E_N_to_Lat_Long($East, $North)
{
    $a = 6377563.396;
    // Semi-major axis, a
    $b = 6356256.91;
    //Semi-minor axis, b
    $e0 = 400000.0;
    //True origin Easting, E0
    $n0 = -100000.0;
    //True origin Northing, N0
    $f0 = 0.9996012717;
    //Central Meridan Scale, F0
    $PHI0 = 49.0;
    // True origin latitude, j0
    $LAM0 = -2.0;
    // True origin longitude, l0
    //Convert angle measures to radians
    $RadPHI0 = $PHI0 * (M_PI / 180);
    $RadLAM0 = $LAM0 * (M_PI / 180);
    //Compute af0, bf0, e squared (e2), n and Et
    $af0 = $a * $f0;
    $bf0 = $b * $f0;
    $e2 = ($af0 * $af0 - $bf0 * $bf0) / ($af0 * $af0);
    $n = ($af0 - $bf0) / ($af0 + $bf0);
    $Et = $East - $e0;
    //Compute initial value for latitude (PHI) in radians
    $PHId = InitialLat($North, $n0, $af0, $RadPHI0, $n, $bf0);
    $sinPHId2 = pow(sin($PHId), 2);
    $cosPHId = pow(cos($PHId), -1);
    $tanPHId = tan($PHId);
    $tanPHId2 = pow($tanPHId, 2);
    $tanPHId4 = pow($tanPHId, 4);
    $tanPHId6 = pow($tanPHId, 6);
    //Compute nu, rho and eta2 using value for PHId
    $nu = $af0 / sqrt(1 - $e2 * $sinPHId2);
    $rho = $nu * (1 - $e2) / (1 - $e2 * $sinPHId2);
    $eta2 = $nu / $rho - 1;
    //Compute Longitude
    $X = $cosPHId / $nu;
    $XI = $cosPHId / (6 * pow($nu, 3)) * ($nu / $rho + 2 * $tanPHId2);
    $XII = $cosPHId / (120 * pow($nu, 5)) * (5 + 28 * $tanPHId2 + 24 * $tanPHId4);
    $XIIA = $cosPHId / (5040 * pow($nu, 7)) * (61 + 662 * $tanPHId2 + 1320 * $tanPHId4 + 720 * $tanPHId6);
    $VII = $tanPHId / (2 * $rho * $nu);
    $VIII = $tanPHId / (24 * $rho * pow($nu, 3)) * (5 + 3 * $tanPHId2 + $eta2 - 9 * $eta2 * $tanPHId2);
    $IX = $tanPHId / (720 * $rho * pow($nu, 5)) * (61 + 90 * $tanPHId2 + 45 * $tanPHId4);
    $long = 180 / M_PI * ($RadLAM0 + $Et * $X - pow($Et, 3) * $XI + pow($Et, 5) * $XII - pow($Et, 7) * $XIIA);
    $lat = 180 / M_PI * ($PHId - pow($Et, 2) * $VII + pow($Et, 4) * $VIII - pow($Et, 6) * $IX);
    return array($lat, $long);
}
Example #2
0
function NEtoLL($east, $north)
{
    // converts NGR easting and nothing to lat, lon.
    // input metres, output radians
    $nX = (double) $north;
    $eX = (double) $east;
    $a = 6377563.396;
    // OSGB semi-major
    $b = 6356256.91;
    // OSGB semi-minor
    $e0 = 400000;
    // OSGB easting of false origin
    $n0 = -100000;
    // OSGB northing of false origin
    $f0 = 0.9996012717;
    // OSGB scale factor on central meridian
    $e2 = 0.0066705397616;
    // OSGB eccentricity squared
    $lam0 = -0.03490658503988659;
    // OSGB false east
    $phi0 = 0.8552113334772214;
    // OSGB false north
    $af0 = $a * $f0;
    $bf0 = $b * $f0;
    $n = ($af0 - $bf0) / ($af0 + $bf0);
    $Et = $east - $e0;
    $phid = InitialLat($north, $n0, $af0, $phi0, $n, $bf0);
    $nu = $af0 / sqrt(1 - $e2 * (sin($phid) * sin($phid)));
    $rho = $nu * (1 - $e2) / (1 - $e2 * sin($phid) * sin($phid));
    $eta2 = $nu / $rho - 1;
    $tlat2 = tan($phid) * tan($phid);
    $tlat4 = pow(tan($phid), 4);
    $tlat6 = pow(tan($phid), 6);
    $clatm1 = pow(cos($phid), -1);
    $VII = tan($phid) / (2 * $rho * $nu);
    $VIII = tan($phid) / (24 * $rho * ($nu * $nu * $nu)) * (5 + 3 * $tlat2 + $eta2 - 9 * $eta2 * $tlat2);
    $IX = tan($phid) / (720 * $rho * pow($nu, 5)) * (61 + 90 * $tlat2 + 45 * pow(tan($phid), 4));
    $phip = $phid - $Et * $Et * $VII + pow($Et, 4) * $VIII - pow($Et, 6) * $IX;
    $X = pow(cos($phid), -1) / $nu;
    $XI = $clatm1 / (6 * ($nu * $nu * $nu)) * ($nu / $rho + 2 * $tlat2);
    $XII = $clatm1 / (120 * pow($nu, 5)) * (5 + 28 * $tlat2 + 24 * $tlat4);
    $XIIA = $clatm1 / (5040 * pow($nu, 7)) * (61 + 662 * $tlat2 + 1320 * $tlat4 + 720 * $tlat6);
    $lambdap = $lam0 + $Et * $X - $Et * $Et * $Et * $XI + pow($Et, 5) * $XII - pow($Et, 7) * $XIIA;
    $rad2deg = 180.0 / 3.141582;
    $geo = array('latitude' => $phip * $rad2deg, 'longitude' => $lambdap * $rad2deg);
    return $geo;
}