#1 Fri 04 August 2006 14:38
- Jacques Houbart - Géomètre-Expert
- Invité
google maps - Distance entre deux points
Bonjours
Je suis en train de développer un site en PHP utilisant l'api google maps
Les coordonnées par cet api sont au format latitude / longitude
Je recherche une formule permettant de calculer la distance entre deux
points à partir des données latitude / longitude
Le but final étant de faire une recherche des membres dans une base de
donnée en fonction de la proximité géographique à un point donné.
Donc je recherche soit une formule pas trop compliquée (pour mètre dans
une requête sql) calculant directement la distance entre deux points
avec les données latitude / longitude.
Soit une formule pour convertir ces coordonnées dans un autre système
qui permettrait d'avoir une formule de calcul de distance plus simple à
placer dans la requête.
Bien à vous
J Houbart
#2 Fri 04 August 2006 16:32
Re: google maps - Distance entre deux points
En gros vous voulez faire le même chose que GeoRezo lors de l'envoi des alertes mél en fonction d'une distance (cd Profil/Abonnement)
Les formule que nous utilisons :
1 - convertir en radians vos coordonnées de vos points A
Code:
SELECT id, RADIANS(latitude) AS lat, RADIANS(longitude) AS long FROM tableA WHERE ...
2 - faire la calcul de distance avec vos points B (vos membres)
Code:
SELECT (6366*acos(cos($lat)*cos(RADIANS(latitude))*cos(RADIANS(longitude)-$long)+sin($lat) *sin(RADIANS(latitude)))) FROM tableB WHERE ...
avec
$lat = la valeur de lat pour la première requête
$long = la valeur de long pour la première requête
Formule originale trouvée sur le web
Bonne chance
Fred
Ps : merci de nous montrer votre site lorqu'il sera fini
GeoRezo vous aide ==> Aidez GeoRezo !
Hors ligne
#3 Fri 04 August 2006 21:08
- BARNAY Frédéric - Geo2i
- Invité
Re: google maps - Distance entre deux points
Bonjour,
Un petit code en C#, facile à traduire en javascript ou PHP.
/// Calcul de la distance entre deux points sur la terre
///
/// point1 - latitude
/// point 1 - longitude
/// point 2 _ latitude
/// point 2 - longitude
/// distance en mètres
public double calcDistLatLon(double Long1, double Lat1, double
Long2, double Lat2)
{
/*
http://mathforum.org/library/drmath/view/51879.html
*/
double dDistance = Double.MinValue;
double dLat1InRad = Lat1 * (Math.PI / 180.0);
double dLong1InRad = Long1 * (Math.PI / 180.0);
double dLat2InRad = Lat2 * (Math.PI / 180.0);
double dLong2InRad = Long2 * (Math.PI / 180.0);
double dLongitude = dLong2InRad - dLong1InRad;
double dLatitude = dLat2InRad - dLat1InRad;
// Résultat intermediaire a.
double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) *
Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);
// Résultat intermediaire (grand cercle en Radians).
double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a));
// Distance.
// const Double kEarthRadiusMiles = 3956.0;
const Double kEarthRadiusKms = 6376.5;
dDistance = kEarthRadiusKms * c;
// resultat en mètres
return dDistance * 1000;
}
Cordialement,
Frédéric BARNAY
Sté Geo2i
http://www.geo2i.com
04 88 19 75 38