Classe GPS - calcul distance

Signaler
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
-
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/100762-classe-gps-calcul-distance

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
Messages postés
14389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2020
413 >
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.
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
4 >
Messages postés
14389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 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+
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014
>
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

@+
Afficher les 6 commentaires