de latitude-longitudes en XY (mètre)

:sos: :sos: :sos: :sos:
Pour un boulot (rien à voir avec le parapente)
je dois positionner dans un soft 3D un grand nombre d’éléments dont j’ai le positionnement en latitude/longitude
comment fait on pour convertir en mètre ce type de coordonnées ?
Je me choisirai un X=0 et Y=0 (normalement je n’ai pas besoin de la hauteur) extérieur a mon nuage d’objets

autrement dit : quelle est la valeur en mètre de un degré ? d’une seconde ?

une moulinette qui me ferait la conversion serait la bienvenue
en python ce serait génial (mon soft parle le python)

merci d’avance au matheux et autre bidouilleurs de script

http://mathworld.wolfram.com/SphericalCoordinates.html (faut prendre les 3 formules qui suivent In terms of Cartesian coordinates,)

Pas de code python pour ça sous la main, mais vu que c’est 3 lignes, j’imagine que tu t’en sortira :mrgreen:

:coucou:

c’est ptet pas aussi simple que ça (ou c’est moi kapa compris la simplification)
ça dépend un peu de la représentation patatoïdale de la terre :!: non :?:

un poil plus d’explications là : http://fr.wikipedia.org/wiki/Projection_cartographique

De ce que j’ai compris, il a des objets placés qqpart, dont les coord sont “lat/long” et il veut avoir des coord cartesienne pour son soft 3D. Si le but est d’avoir des coords 2D à la surface d’une sphère, c’est différent effectivement… Mais là aussi, une recherche sur google donne des formules à la pelle. Si c’est ça, il y a qqs morceaux de code là : http://github.com/twpayne/igc2kmz/blob/dff89c0a65e1b735a438933a115d556a8d3ac0c6/igc2kmz/coord.py

Merci à tous les deux, de vous être penché sur mon problème

oui c’est ça, l’envergure de ma surface sera de la taille d’une ville comme Paris, voir d’un département, donc assimilable à un plan.

pour mieux vous faire comprendre la finalité : le but est de recueillir des données et de les visualiser à travers une animation
comme ça : http://www.urbanmobs.fr/fr/france/
regardez la dernière anime qui est particulièrement spectaculaire : Cette visualisation représente la quantité de SMS envoyés à l’occasion du réveillon du nouvel an. On visualise nettement une explosion d’SMS envoyés à minuit.

Pour vérifier si j’ai bien compris, tu (Marc) parle de cette série d’équations ?

In terms of Cartesian coordinates,
x=
http://mathworld.wolfram.com/images/equations/SphericalCoordinates/Inline46.gif

y=
http://mathworld.wolfram.com/images/equations/SphericalCoordinates/Inline49.gif

Mais comment tu transforme les latitutes/longitudes en angles ? moi je n’aurai comme données que les positions données par un GPS :bang:
r est le rayon de la terre, je suppose, je prends quoi comme valeur moyenne ?
Comme le résultat visé n’est qu’une image animée l’exactitude n’est pas de mise, bien sur !
ce qu’il me faut c’est juste que mes positions soient en proportion les unes aux autres

Oui, je parle de ces equations :pouce:

Latitude et Longitude, ce sont tes angles Theta et Phi effectivement. Pour les avoirs en degrés ou radians, tu as des formules, et ça dépend de la représentation de départ (le GPS te donne lat/long).
R c’est le rayon de la terre: regarde le code python de Tom, dedans tu as une valeur pour ce rayon. Tu dois même pouvoir trouver des formules pour manipuler lat/long…

effectivement,
:bisous: merci Marc, tes conseils m’ont mis sur les bonnes pistes
si je m’en sort (je fini toujours par m’en sortir) je vous montrerai le résultat

http://wiki.github.com/twpayne/igc2kmz/algorithms <= il a même donné qqs indications sur son code et les manip de coord sphérique :pouce:

Quand on vous dit que le mobile, c’est dangereux … ça fait des feux d’artifice partout !!! :affraid:

wouhaaa sur une petite surface comme ça tu dois même pouvoir te contenter d’un développement limité d’ordre 1 (mais chuis pas 100ù sur de moi)
X = X0 + A Θ + B Φ
Y = Y0 + C Θ + D Φ

ensuite

  • tu va sur le terrain de chercher tes Θ et Φ qui correspondent aux coins de ta carte
  • sur le papier tu résous tes équations pour trouver tes coefficients A,B,C et D

si ton axe Y est bien l’axe Nord-Sud (donc un meridien terrestre), tu peux facilement transformer les degrees de latitude en metres en prenant juste la formule de la longueur d’un arc de cercle qui a pour rayon R (le rayon de la terre) :

Soit Θ0 la latitude de ton origine, tu obtiens (Θ - Θ0)*R = (Y - Y0)

Pareil pour l’axe X s’il est Est-Ouest, sauf que le rayon du cercle devient R*sinΘ (tu peux faire le schema, c’est le rayon du paralle qui passe par ton axe X)
Donc ca te fait : (Φ - Φ0) RsinΘ= (X - X0)

ps : tous les angles en Radian
ps2 : pas le temps de lire les autres reponses, desole si je repete un truc

Merci Pirk,
ta méthode simplifie étonnamment le problème et m’ouvre des horizons de simplification extrême
Puisque je me fout de l’échelle, je pourrai aller encore plus loin
il suffirait que je donne une valeur arbitraire à la seconde de ma coordonnée GPS, pour avoir une représentation cohérente de mes points en appliquant un facteur de correction en x correspondant à sinΘ

:coucou:
Pas sûr que ça t’aide car ça répond pas exactement à la question, mais voici la fonction en php utilisée dans GPS2GE pour calculer la distance en metres entre les coordonnés Lat-long de deux points :


//Return Distance in meters between two coordinates
//earth's circumference is 40030 Km long, divided in 360 degrees, that's 111190
function calcDist($lat1,$lon1,$lat2,$lon2) {
  if ($lat1==$lat2 && $lon1==$lon2) return 0;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($lon1-$lon2));
  $dist = acos($dist); 
  $dist = rad2deg($dist);
  if ($dist>0) return $dist * 111190;
  return 0;
  }

Je me suis plante sur un petit detail, je crois que le rayon d’un parallele est Rcos Θ, pas Rsin Θ (plus on s’approche du nord plus ce rayon diminue jusqu’a devenir nul au pole)

L’autre question que je me pose c’est si tu veux placer les coordonees vraiment en 3 D (auquel cas les equations de Marc sont plus adaptees). Mais dans ce cas il te faut la latitude, la longitude et l’altitude.

Mes equations te permettent simplement de transformer les coordonnes (lat, long) en (X,Y) sur un plan 2D (en faisantr l’hypothese que tu peux assimiler la surface de la terre a un plan a petite echelle) ou X est la coordonnee sur l’axe Est-Ouest et Y la coordonnee sur un axe Nord-Sud.

Man’s a donne les equations rigoureuses qui donnent la distance sur une sphere entre 2 points connaissant leurs coordonnes en latitude longitude (sauf que bizarrement je ne vois pas apparaitre le rayon de la sphere).

La je comprends pas. Normalement tu peux juste convertir les degres/minutes/secondes en radians et tu n’a plus a t’en preoccuper.

Je n’ai ete tres clair, mais (Θ00)sont les coord (lat.,long.) de ton point d’origine pour lequel tu peux parfaitement prendre (X0,Y0)=(0,0)
Ce qui donne pour mes equations :

Y = (Θ - Θ0)*R
X = (Φ - Φ0) Rcos Θ

Tu n’as plus qu’a trouver le rayon moyen de la terre (ou si tu est perfectionniste et tu cherches un peu tu peux trouver le rayon de la terre a l’endroit considere) et les coordonnes (lat,long) du point que tu veux prendre pour origine.

OUI, effectivement c’est un cos et non pas un sin
Un rayon de la terre moyen de 6371000 m me conviendra très bien

Il ne me manque plus que la manière de convertir les degrés/minutes/secondes en Radians

je ne suis pas perfectionniste du tout pour ces placements, je suis perfectionniste sur la qualité graphique de l’animation. En animation 3D, je dis toujours que j’en ai rien à f… que l’épaisseur de l’oreille de Mikey fasse 2 ou 3 mm.

angle en radian = (degres + minutes/60 + secondes/3600) * Pi / 180

(une minute est un soixantieme de degres, une seconde est un soixantieme de minute donc un 3600e de degres)

:oops: Oups, j’avais pas lu le commentaire suivant : “//earth’s circumference is 40030 Km long, divided in 360 degrees, that’s 111190”

C’est avec un rayon de 1, et tu mulitplies le resultat par le diamètre de la terre divisé par 360º.

en python la fonction va ressembler a ca :


from math import radians, cos

def f(lat, long):
    # origine
    lat0 = ???
    long0 = ???

    # rayon de la terre 
    R=6371000 

    Y = ( radians(lat) - radians(lat0) ) * R
    X = ( radians(long) - radians(long0) ) * R * cos(radians(lat))

    return (X,Y)

Je suppose que les coordonnees lat et long que tu donnes a la function ont deja ete convertis depuis les degres/minutes/secondes en degres. La fonction retourne une liste avec deux valeurs que tu recuperes probablement par un truc du genre

quote = f(lat,long)
[/quote]
ou encore

[quote]coordonnees = f(lat,long)
x = coordonnees[0]
y = coordonnees[1]
[/quote]
ps : je n’ai pas teste, il faut probablement debugguer un peu.

Je n’aurai jamais pensé que de me mettre au parapente, m’aiderai un jour dans mon boulot :mdr:
merci les gars, vous êtes des chefs
si je vous croise un jour, sachez que je vous offrirai avec plaisir une grande Leff pression
N’hésitez pas à me contacter si vous venez voler dans les Baronnies

:ppte: :forum: :ppte: