Classe GPS - calcul distance

Soyez le premier à donner votre avis sur cette source.

Vue 4 639 fois - Téléchargée 751 fois

Description

Ceci est une classe Gps avec une seule fonction (pour le moment).

La classe contient la méthode distance. Exemple d\'utilisation:

require_once \'Gps.class.php\';
$Gps = new Gps();
// point de départ
$x0 = 2.2345;
$y0 = 45.5432;
// point d\'arrivée
$y1 = 1.1574;
$y1 = 43.68543;
// récup distance à vol d\'oiseau
$distance = $Gps->distance($y0, $x0, $y1, $x1);


Si vous avez des questions, n\'hésitez pas à les poser.

A+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

inwebo
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014

Bonjour,

C'est un bon début de classe métier, elle fait des choses simples mais elle le fait bien. C'est l'occasion pour faire des objets plus objets pour du PHP5 (qui a 10 ans ne l'oublions pas). J'entends par là de bien séparé les différents métiers que cette classe fait. Par exemple est-ce vraiment à la méthode distance de la classe GPS de changer les unités des points ?


$rlo1 = deg2rad($lng1);
$rla1 = deg2rad($lat1);
$rlo2 = deg2rad($lng2);
$rla2 = deg2rad($lat2);


Je pense que non. Le membre de la classe $earth_radius est-il amené à changer ? Non plus.

Je vous propose de séparer cette classe en deux objets.

* Un objet Point, avec un constructeur prenant deux flottants en paramétre et une méthode public toRad() qui retourne la valeur du flottant en radiant.
* Un objet GPS, avec un constructeur prenant deux objets Point en entrée.

De passer $earth_radius en constante de classe.


Cela ne change pas fondamentalement les choses mais c'est une approche plus objets, je trouve que c'est également un bon exercice.

- Constantes de classe
- POO PHP5
Whismeril
Messages postés
14413
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 mars 2020
365 > inwebo
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014

Bonjour, comme je l'ai mis plus haut c'est une très vague approximation. La terre est loin d'être une sphère.
Pour améliorer cette approximation on peut calculer une sphère qui localement colle à peu près à la réalité. De cas le rayon de la terre dépend du système de référence choisi (RGF93, WGS 84, etc...) et du point de départ. L'approximation par sphère locale donne un résultat centimétrique jusqu'à 50 km environ, au delà l'incertitude augmente rapidement.
Je vous invite à consulter les site de l'IGN, mots clés géodésie, distance suivant la courbue, approximation sphérique.
mpmp93
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
4 > Whismeril
Messages postés
14413
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 mars 2020

Bonjour,

Le but de cette classe - qui sera complétée par d'autres méthodes - c'est avant tout déterminer la distance entre deux points. Je m'en sers personnellement ici:
http://www.camping-car.org/aires/autour-de-vous

Je récupère la localisation de l'utilisateur, puis en SQL je cherche toutes les aires dans une zone comprise en lon et lat +/- un décalage arbitraire qyui permet d'isoler les fiches qui m'intéressent.

Ensuite, fiche par fiche, je calcule la distance de ces sites par rapport au point de référence (position de l'utilisateur). J'effectue un tri et je restitue la liste des sites par distance croissante.

Par exemple, pour ma position, j'ai une aire à RENNES LE CHATEAU à 20 Km de ma position. Si je fais calculer par Google Maps un trajet routier, en réalité, j'ai 52 Km de route. J'indique bien que c'est la distance en ligne droite approximative.

A+
inwebo
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014
> mpmp93
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015

Bonjour,

J'entends bien ce que vous me dites. Ce n'était pas l'objet de mon message. Je donnais juste des conseils pour faire des objets un peu moins bâtards et de bonne pratique de conception d'objet PHP5.

PSR

@+
mpmp93
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
4
Oui, j'ai oublié de préciser, c'est la distance à vol d'oiseau, point à point.

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.