Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Mappy
Mappy Forum d'entraide sur les API Mappy
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/07/2010, 11h30   #1
Malek Belkahla
Invité de passage
 
Inscription : juillet 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 2
Points : 0
Points : 0
Par défaut Comment calculer la distance entre deux coordonnées ?

Je suis entrain de développer une application iPhone qui affiche une liste de destinations sur la carte de France. J'ai besoin de Mappy pour calculer la distance entre deux coordonnées géographique. Est ce que c'est possible avec Mappy? et si oui, comment je peux le faire?
Malek Belkahla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 10h09   #2
GATEN
Membre du Club
 
Homme
Développeur Web
Inscription : septembre 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 47
Points : 48
Points : 48
Bonjour

Je parle d'un calcul à vol d'oiseau entre deux coordonnées, et non d'un calcul d'itinéraire.

Sous Mysql, j'utilise cette PS :

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE FUNCTION PointGeo_getDistanceFromGPS(lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE) RETURNS DOUBLE
BEGIN
DECLARE rlo1 DOUBLE;
DECLARE rla1 DOUBLE;
DECLARE rlo2 DOUBLE;
DECLARE rla2 DOUBLE;
DECLARE dlo DOUBLE;
DECLARE dla DOUBLE;
DECLARE a DOUBLE;
 
SET rlo1 = RADIANS(lng1);
SET rla1 = RADIANS(lat1);
SET rlo2 = RADIANS(lng2);
SET rla2 = RADIANS(lat2);
SET dlo = (rlo2 - rlo1) / 2;
SET dla = (rla2 - rla1) / 2;
SET a = SIN(dla) * SIN(dla) + COS(rla1) * COS(rla2) * SIN(dlo) * SIN(dlo);
RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));
END

A adapter suivant le langage que vous souhaitez utiliser.
GATEN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 18h41   #3
GATEN
Membre du Club
 
Homme
Développeur Web
Inscription : septembre 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 47
Points : 48
Points : 48
En javascript avec l'API

Ici, la doc correspondante en version 2.10

Avec la fonction getDistance de la classe Mappy.api.geo.Coordinates.
GATEN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2012, 17h03   #4
GATEN
Membre du Club
 
Homme
Développeur Web
Inscription : septembre 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 47
Points : 48
Points : 48
Pour être exact, voici la méthode en javascript pour calculer la distance à vol d'oiseau avec l'API Mappy.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
var latitude_point_1 = 50;
var longitude_point_1 = 3;
var latitude_point_2 = 52;
var longitude_point_2 = 1;
 
var coordonnees_point_1 = new Mappy.api.geo.Coordinates(latitude_point_1, longitude_point_1);
var coordonnees_point_2 = new Mappy.api.geo.Coordinates(latitude_point_2, longitude_point_2);
 
var distances = coordonnees_point_1.getDistance(coordonnees_point_2);
 
var laDistance = Math.sqrt(Math.pow(distances.dx, 2) + Math.pow(distances.dy, 2));
Voilà, ça donne envie.
Dîtes moi si je me trompe.
GATEN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2012, 16h35   #5
GATEN
Membre du Club
 
Homme
Développeur Web
Inscription : septembre 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 47
Points : 48
Points : 48
J'ai revu ma fonction javascript pour être indépendant de l'API MAPPY.

Ça donne ça pour calculer une distance à vol d'oiseau à partir de deux coordonnées GPS :

Code javascript :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
function(lat1, lon1, lat2, lon2) /* Return float. Unit is the metter */
{
    if(parseFloat(lat1) != lat1 || parseFloat(lon1) != lon1 || parseFloat(lat2) != lat2 || parseFloat(lon1) != lon1)
        throw("Error params. Only float value accepted.");
 
    if(lat1 < 0 || lat1 > 90 || lat2 < 0 || lat2 > 90)
        throw("Error params. The params lat1 and lat2 must be 0< ? <90. Here lat1 = "+lat1+" and lat2 = "+lat2);
    if(lon1 < -180 || lon1 > 180 || lon2 < -180 || lon2 > 180)
        throw("Error params. The params lon1 and lon2 must be -180< ? <180. Here lon1 = "+lon1+" and lon2 = "+lon2);
 
    a = Math.PI / 180;
    lat1 = lat1 * a;
    lat2 = lat2 * a;
    lon1 = lon1 * a;
    lon2 = lon2 * a;
 
    t1 = Math.sin(lat1) * Math.sin(lat2);
    t2 = Math.cos(lat1) * Math.cos(lat2);
    t3 = Math.cos(lon1 - lon2);
    t4 = t2 * t3;
    t5 = t1 + t4;
    rad_dist = Math.atan(-t5/Math.sqrt(-t5 * t5 +1)) + 2 * Math.atan(1);
 
    return (rad_dist * 3437.74677 * 1.1508) * 1.6093470878864446 * 1000;
}
GATEN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2013, 12h06   #6
TKeePeR
Invité de passage
 
Inscription : octobre 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 1
Points : 1
Points : 1
Sinon, pour aller plus vite sur des distances locales en france:
dist_metres = 11*10000*Math.sqrt(Math.pow(lat1-lat2,2)+Math.pow(lon1-lon2,2))
(assume que localement, la terre est plate est que 1" d'écart <=>11mètres)
ca donne des résultats assez corrects
TKeePeR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h21.


 
 
 
 
Partenaires

Hébergement Web