Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

Fred
#JeSuisCharlie
Lieu: Paris
Date d'inscription: 24 Jun 2005
Messages: 7682
Site web

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

 

Pied de page des forums

Powered by FluxBB