Il n'est pas rare de voir sur un site l'affichage d'un endroit précis d'une carte grâce à des coordonnées géographiques. Les informations de localisation sont ajoutées à l'url ciblant l'outil et le lieu s'affiche
Voici un petit bout de code qui permettra de convertir les coordonnées dans le bon système numérique.
Les coordonnées GPS sont fournies soit en système sexagésimal (01°46'28.0"E 49°16'51.3"N) soit en décimal (1.7744445 49.2809167). Le but de cette fonction php sera de convertir les coordonnées, quelques soient leur mode numérique.
Conversion manuelle
Le système sexagésimal et une base 60, ainsi, elle fonctionne comme pour l'heure. On garde les degrés, on divise par 60 les minutes et par 3600 et seconde. Pour le mode décimal (base 10), on fait l'inverse. Les informations de cardinalité représentent le négatif pour l'ouest et le sud et le positif pour l'est et le nord.
Exemple avec la longitude 01°46'28.0"E :
- 01° = 1
- 46' = 46 / 60 = 0.7666667
- 28.0" = 28 / 3600 = 0.0077778
- E = +
On additionne le tout : 1 + 0.7666667 + 0.0077778 = 1.7744445 (longitude en décimal).
Exemple avec la latitude 49.2809167 :
- 49 = 49°
- 0.2809167 * 60 = 16.855002 = 16'
- 0.00855002 * 60 = 51.30012 = 51.3"
- + = N
On assemble le tout : 49°16'51.3"N (latitude en sexagésimal )
Conversion avec php
Voici donc la fonction qui permettra de tout faire quelque soit les valeurs indiquées. Il y a en fait 3 fonctions.
span style="color: #aaa; font-style: italic">// Sexagésimal vers décimal '#([^.a-z0-9]+)#i', '-''-''n', 's', 'e', 'o', 'N', 'S', 'E', 'O''', '-', '', '-', '', '-', '', '-'// Décimal vers sexagésimal 'lat''N''S''long''E''O''0''°'"'"'"'// Fonction d'appel '#([nseo]+)#i', $lat)) // Vérification du type fourni 'Latitude : '.$lat.' => '.convertDec($lat).'<br />Longitude : '.$long.' => ''Latitude : '.$lat.' => '.convertSexa($lat, "lat").'<br />Longitude : '.$long.' => '.convertSexa($long, "long"); } } /* L'appel de la fonction doit être du type : convertGPS('49°16'51.3"N', '01°46'28.0"E'); ou convertGPS('49.2809167', '1.7744445'); Elle retournera : Latitude : 49°16'51.3"N => 49.280916666667 Longitude : 01°46'28.0"E => 1.7744444444444 Latitude : 49.2809167 => 49°16'51.30"N Longitude : 1.7744445 => 01°46'28.00"E */Vos avis
N'oubliez pas de noter l'article. ;-)
Excellent script. Marche impec chez moi.
Merci.
Par contre, pour les newb, une petite explication du script aurait été sympa.En effet, je mettrais une explication des principales difficultés dés que j'ai un moment. Je n 'arrive pas à l' adapter au système vicésimal , pourrais tu m' aider Je ne vois pas trop l'intérêt d'une conversion en base 20 pour faire de la géo localisation, mais tu peux utiliser une fonction php qui fait cela parfaitement :
base_convert ( string $number , int $frombase , int $tobase )
http://php.net/manual/fr/function.base-convert.phpMerci beaucoup cependant je rencontre un probléme, mon recepteur gps me renvoit les secondes sur 4 chiffres :s . Auriez vous une idée ?
Merci :>)Bibi,
Qu'entends tu par 4 chiffres pour les secondes ?
Parce que par exemple, tu peux avoir 49°16'51.30"N et on a bien 4 chiffres pour les secondes : 51.30.SVP pourquoi est ce que j'obtiens un résultat éroné ?
Latitude : '49°16'51.3"N' => 51.30.82111111111111
Longitude : '01°46'28.00"S' => 28.000.029444444444444
Voici pourtant le code que j'ai tapé:
$latitude="49°16'51.3"N";
$latitude="'".$latitude."'";
$longitude="01°46'28.00"S";
$longitude="'".$longitude."'";
convertGPS($latitude,$longitude);Salut, bisugenik
Supprime ces lignes qui ne servent à rien :
$latitude="'".$latitude."'";
et
$longitude="'".$longitude."'";
Et bien penser à ajouter un caractère d'échappement soit aux guillemets soit aux apostrophes en fonction des sélecteurs choisis.