+ Le chant du vario +

Développements et support => traces GPS => Discussion démarrée par: Van Hurlu le 21 Juillet 2009 - 23:58:07



Titre: de latitude-longitudes en XY (mètre)
Posté par: Van Hurlu le 21 Juillet 2009 - 23:58:07
 :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


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: marc le 22 Juillet 2009 - 07:41:48
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:


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: piwaille le 22 Juillet 2009 - 07:54:28
 :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


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: marc le 22 Juillet 2009 - 08:26:11
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


Titre: Re : Re : de latitude-longitudes en XY (mètre)
Posté par: Van Hurlu le 22 Juillet 2009 - 10:03:03
Merci à tous les deux, de vous être penché sur mon problème
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.
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


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: marc le 22 Juillet 2009 - 10:18:46
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...


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: Van Hurlu le 22 Juillet 2009 - 10:52:26
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


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: marc le 22 Juillet 2009 - 11:20:37
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:


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: Le bandit démasqué le 22 Juillet 2009 - 11:33:38
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.

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


Titre: Re : Re : Re : de latitude-longitudes en XY (mètre)
Posté par: piwaille le 22 Juillet 2009 - 14:09:44
Merci à tous les deux, de vous être penché sur mon problème
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.
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.

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


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: PiRK le 22 Juillet 2009 - 20:32:37
: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
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) *R*sinΘ= (X - X0)

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


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: Van Hurlu le 22 Juillet 2009 - 23:45:24
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Θ





Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: Man's le 22 Juillet 2009 - 23:51:23
: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 :

Code:
//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;
  }


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: PiRK le 23 Juillet 2009 - 08:40:06
Je me suis plante sur un petit detail, je crois que le rayon d'un parallele est R*cos Θ, pas R*sin Θ (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).

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Θ
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) *R*cos Θ

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.


Titre: de latitude-longitudes en XY (mètre)
Posté par: Van Hurlu le 23 Juillet 2009 - 09:42:46
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.

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.


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: PiRK le 23 Juillet 2009 - 13:21:37
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)

(sauf que bizarrement je ne vois pas apparaitre le rayon de la sphere).

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


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: Man's le 23 Juillet 2009 - 13:34:39
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).
C'est avec un rayon de 1, et tu mulitplies le resultat par le diamètre de la terre divisé par 360º.


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: PiRK le 23 Juillet 2009 - 13:58:29
en python la fonction va ressembler a ca :
Code:
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
Citation
(x,y) = f(lat,long)

ou encore
Citation
coordonnees = f(lat,long)
x = coordonnees[0]
y = coordonnees[1]

ps : je n'ai pas teste, il faut probablement debugguer un peu.


Titre: Re : de latitude-longitudes en XY (mètre)
Posté par: Van Hurlu le 23 Juillet 2009 - 14:10:35
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: