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

Soyez le premier à donner votre avis sur cette source.

Vue 12 960 fois - Téléchargée 423 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

janhsh
Messages postés
6
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
21 février 2019

La formule est fausse (il n'y pas de fonction hyperbolique dans ce type de calcul)
varfendell
Messages postés
3388
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
15 avril 2019

Malheureusement c'est une question d'algorithme....il faut changer les calcul. Je ne les connais pas, mais je vais essayer de les trouver, d'autant plus qu'il semblerait que l'algorithme que j'utilise decale de 100m vers la droite...ma source ne devait pas être exacte :(

Je vais vérifier ça demain. J'en profiterait pour trouver l'algorithme du lambert 2 centre
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 ???
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.
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 ?

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.