-
-
Save will83/5920606 to your computer and use it in GitHub Desktop.
| <?php | |
| function lambert93ToWgs84($x, $y){ | |
| $x = number_format($x, 10, '.', ''); | |
| $y = number_format($y, 10, '.', ''); | |
| $b6 = 6378137.0000; | |
| $b7 = 298.257222101; | |
| $b8 = 1/$b7; | |
| $b9 = 2*$b8-$b8*$b8; | |
| $b10 = sqrt($b9); | |
| $b13 = 3.000000000; | |
| $b14 = 700000.0000; | |
| $b15 = 12655612.0499; | |
| $b16 = 0.7256077650532670; | |
| $b17 = 11754255.426096; | |
| $delx = $x - $b14; | |
| $dely = $y - $b15; | |
| $gamma = atan( -($delx) / $dely ); | |
| $r = sqrt(($delx*$delx)+($dely*$dely)); | |
| $latiso = log($b17/$r)/$b16; | |
| $sinphiit0 = tanh($latiso+$b10*atanh($b10*sin(1))); | |
| $sinphiit1 = tanh($latiso+$b10*atanh($b10*$sinphiit0)); | |
| $sinphiit2 = tanh($latiso+$b10*atanh($b10*$sinphiit1)); | |
| $sinphiit3 = tanh($latiso+$b10*atanh($b10*$sinphiit2)); | |
| $sinphiit4 = tanh($latiso+$b10*atanh($b10*$sinphiit3)); | |
| $sinphiit5 = tanh($latiso+$b10*atanh($b10*$sinphiit4)); | |
| $sinphiit6 = tanh($latiso+$b10*atanh($b10*$sinphiit5)); | |
| $longrad = $gamma/$b16+$b13/180*pi(); | |
| $latrad = asin($sinphiit6); | |
| $long = ($longrad/pi()*180); | |
| $lat = ($latrad/pi()*180); | |
| return array( | |
| 'lambert93' => array( | |
| 'x' => $x, | |
| 'y' => $y | |
| ), | |
| 'wgs84' => array( | |
| 'lat' => $lat, | |
| 'long' => $long | |
| ) | |
| ); | |
| } | |
| // Exemple d'utilisation : | |
| $x = 955502.7409000024; | |
| $y = 6225307.0799999982; | |
| print_r(lambert93ToWgs84($x,$y)); | |
| /* Résultat en sortie : | |
| Array | |
| ( | |
| [lambert93] => Array | |
| ( | |
| [x] => 955502.7409000024 | |
| [y] => 6225307.0799999982 | |
| ) | |
| [wgs84] => Array | |
| ( | |
| [lat] => 43.081387131355 | |
| [long] => 6.1358573938246 | |
| ) | |
| ) | |
| */ |
Great !!!
Merci
j'ai rajouté ceci
function carre ($val){
return $val*$val;
}
Merci pour ce retour, j'ai supprimé la fonction
La variable $b6 n'est pas utilisée, est ce normal ?
Merci pour ce code..
merci beaucoup
Merci pour ce code, très utile!!!
Merci. Un petit apport : parfois les coordonnées passées peuvent être sous forme de strings, ce qui cause une erreur sur number_format() (php 5.3).
$x = number_format(floatval($x), 10, '.', '');
$y = number_format(floatval($y), 10, '.', '');
Bonjour, je viens d'utiliser cette fonction pour un projet et j'ai réduit sa taille, j'ai également modifié le tableau retourné.
/**
* Convert lambert93 to Wgs84
* @author will83 (https://gist.github.com/will83/5920606)
* @param mixed $x [Longitude]
* @param mixed $y [Latitude]
* @return array [Longitude and latitude in Wgs84]
*/
function lambert93ToWgs84($x, $y)
{
$b8 = 1 / 298.257222101;
$b10 = sqrt(2 * $b8 - $b8 * $b8);
$b16 = 0.7256077650532670;
$x = number_format(floatval($x), 10, '.', '') - 700000;
$y = number_format(floatval($y), 10, '.', '') - 12655612.0499;
$gamma = atan(-$x / $y);
$latiso = log(11754255.426096 / sqrt(($x * $x) + ($y * $y))) / $b16;
$sinphiit = tanh($latiso + $b10 * atanh($b10 * sin(1)));
for ($i = 0; $i != 6 ; $i++) {
$sinphiit = tanh($latiso + $b10 * atanh($b10 * $sinphiit));
}
return (array(
'longitude' => ($gamma / $b16 + 3 / 180 * pi()) / pi() * 180,
'latitude' => asin($sinphiit) / pi() * 180
));
}Merci pour la fonction. Une version adaptée en Python de celle de niquenen :
# @will83 // @niquenen (https://gist.github.com/will83/5920606)
from math import *
def Lambert93toWGS84(xC, yC):
b8 = 1 / 298.257222101
b10 = sqrt(2 * b8 - b8 * b8)
b16 = 0.7256077650532670
x = float(xC.replace(',','.').replace(' ','')) - 700000
y = float(yC.replace(',','.').replace(' ','')) - 12655612.0499
gamma = atan((-x)/y)
latiso = log(11754255.426096/sqrt((x * x) + (y * y))) / b16
sinphiit = tanh(latiso + b10 * atanh(b10 * sin(1)))
for i in iter(range(0, 5)):
sinphiit = tanh(latiso + b10 * atanh(b10 * sinphiit))
long = (gamma / b16 + 3 / 180 * pi) / pi * 180
lat = asin(sinphiit) / pi * 180
return lat, longMerci pour cette version @Lulucmy !
Si vous ne voulez pas importer toutes les fonctions qui sont dans le module math, vous pouvez rajouter cet import à la place du from math import * :
from math import sqrt, atan, log, tanh, atanh, sin, pi, asin
Merci pour ce code.
La fonction carre (ligne 18) ne marche pas chez moi, j'ai remplacé par
$r = sqrt(($delx_$delx)+($dely_$dely));