Convertisseur lambert2 étendu en coordonnée géographique (longitude/latitude)

Soyez le premier à donner votre avis sur cette source.

Vue 12 875 fois - Téléchargée 416 fois

Description

Il s'agit d'un fichier php assez utile que j'ai du développer dans le cadre d'un projet qui permet, en lui fournissant les coordonnées X et Y en entré, d'avoir en entrée la longitude et la latitude.

Pour répondre à de nombreuses questions, je vais vous éclaircir sur les trois ligne suivante du fichier html:
>
>InitTab(a);
>var maCarte = new Carte(b, c, d, e);
>maCarte.addMarker(f, g, h, i, j, k, l, m);
>
>a: nombre de type de marqueur (donc de type de checkbox) différents. Dans mon exemple vous pouvez le voir, il y a 8 type de marqueur, 8 checkbox, 8 couleurs de marqueur.
>
>b: zoom initial de la carte
>
>c et d: longitude et latitude initial du centre de la carte (change ensuite car la carte se met automatiquement a un zoom et une position pour pouvoir afficher tout les marqueurs grâce a l'option s setBounds)
>
>e: type de la map (ROADMAPpar défaut, mais existe aussi HYBRID, SATELLITE ou TERRAIN (peut etre changer en cliquant sur les option en haut a droite de la carte affiché)
>
>f: contenu de l'info bulle qui s'affiche lorsque l'on clique sur le marqueur (ecrit en format html, on peut donc utiliser toute les balises html)
>
>g: information qui s'affiche sur le marqueur lors du passage de la souris sur celui ci
>
>h: image du marqueur. Peut etre soit une adresse URL qui pointe sur une image, soit une adresse local de votre ordinateur (/image/imafe.jpg)
>
>i et j: longitude et latitude du marqueur
>
>k: type du marqueur
>
>l: numero du type du marqueur (dans mon exemple il y a par exemple 5 marqueur de type 1, et il peut y avoir 90 marqueur de type 2....., donc il faut les numéroter pour pouvoir y avoir acces en javascrpit.
>
>m: booléen, true ou false, permet de choisir si on veut afficher le marqueur au chargement de la page
>
>Voila, j'espère que ces informations vous simplifieront la compréhension, si vous avez d'autre question, n'hésitez pas.

Source / Exemple :


<?php
/**

  • @author Florent Cardot
  • Y = Latitude
  • X = Longitude
  • /
/* $lon = 5802906.829; $lat = 6453674.479; $L = new Convert($lon, $lat); $L->convert();
  • /
class Convert { private $X; private $Y; private $Coord; private $Cm; private $n; private $XSm; private $YSm; private $a; private $f1; /**Contructeur (initialise les variables qui doivent l'être)**/ function __construct($X, $Y) { $this->Cm = 11745793.393435; $this->n = 0.728968627421412; $this->XSm = 600000; $this->YSm = 8199695.76800186; $this->a = 6378249.2000; $this->f1 = 6356515.0000; $this->X = $X - $this->XSm; $this->Y = $Y - $this->YSm; }//end function public function convertion() { $this->Coord[0] = self::ConvertX(); //X $this->Coord[1] = self::ConvertY(); //Y return $this->Coord; }//end function public function ConvertX() { $longitude = atan(-($this->X)/($this->Y)); $longitude = $longitude / $this->n; $longitude = $longitude * 180 / pi(); $constante = 2 + (20 / 60) + (14.025 / 3600); $longitude = $longitude + $constante; return($longitude); }//end function public function ConvertY() { $latitude = sqrt(pow($this->X, 2) + pow($this->Y, 2)); $f = ($this->a - $this->f1) / $this->a; $e² = 2 * $f - pow($f, 2); $e = sqrt($e²); $Latiso = log($this->Cm / $latitude) / $this->n; $latitude = tanh($Latiso); for ($i = 0; $i < 6; $i++) { $latitude = tanh($Latiso + $e * self::atanh($e * $latitude)); } $latitude = asin($latitude); $latitude = $latitude / pi(); $latitude = $latitude * 180; return($latitude); }//end function public function atanh($x) { $resultat = log((1 + $x) / (1 - $x)) / 2; return $resultat; }//end function }//end classs ?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

alfrai
Messages postés
69
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
23 juillet 2013
-
Salut varfendell et merci pour la source.

Comment je peux utiliser ce script ?
varfendell
Messages postés
3388
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
15 avril 2019
-
oups, trompé, pour cette source il te suffit donc de la télécharger et suivant ton besoin l'utiliser comme suis:

pour un usage exclusif du fichier, decomente cette partie:
# $lon = 5802906.829;
# $lat = 6453674.479;
#
# $L = new Convert($lon, $lat);
# $L->convert();

et remplace les valeur lon et lat par tes valeurs en lambert2 étendu. ajoute print_r devant $L->convert();
> print_r($L->convert());

sinon pour l'utiliser en l'appelant d'un autre fichier php, procede comme suis:

ajoute ces lignes dans ton code apres avoir inclu le fichier:

$convertion = new Convert(5802906.829, 6453674.479);
$newCoord = $convertion->convertion();
$Longitude = $newCoord[0]; //X
$Latitude = $newCoord[1]; //Y
LeFauve42
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009
-
Ca a l'air interessant, mais est-ce qu'une simple fonction ne serait pas plus pratique qu'une classe ici ?
varfendell
Messages postés
3388
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
15 avril 2019
-
Disons que j'ai pour habitude de décomposer au maximum mon code afin de pouvoir faire des évolution facilement. Dans le cas de cette fonction, on pourra modifier le code pour ajouter d'autre type de convertisseur (lambert1, lambert2, lambert3, ...)

De plus le faite de créer une classe à l'avantage qu'on pourra l'utiliser pour plusieurs application.

Bien sur pour la rapidité des calcul, il est en effet préférable de développer cette algorithme comme une fonction à l'intérieur même de notre application.
Pedeboy
Messages postés
2
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
14 mai 2007
-
Super source !! mais comment peut-on adapter le code pour non pas du lambert 2 étendu mais du lambert 2 centre ???

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.