138 votes

Conversion de la longitude \latitude en coordonnées cartésiennes

J'ai des points de coordonnées centrés sur la terre donnés comme latitude et longitude ( WGS-84 ).

Comment puis-je les convertir en coordonnées cartésiennes (x,y,z) avec l'origine au centre de la terre ?

2 votes

Avez-vous réussi à convertir la longitude et la latitude WGS-84 en coordonnées cartésiennes ? J'ai aussi l'élévation. J'ai essayé la réponse acceptée ici, mais elle ne me donne pas la bonne réponse. J'ai comparé mes résultats avec ce site web : apsalin.com/conversion-géodésique-vers-cartésienne.aspx .

177voto

Daphna Shezaf Points 2124

Voici la réponse que j'ai trouvée :

Pour que la définition soit complète, dans le système de coordonnées cartésiennes :

  • l'axe des x passe par long,lat (0,0), donc la longitude 0 correspond à l'équateur ;
  • l'axe des y passe par (0,90) ;
  • et l'axe z passe par les pôles.

La conversion est :

x = R * cos(lat) * cos(lon)

y = R * cos(lat) * sin(lon)

z = R *sin(lat)

Où R est le rayon approximatif de la terre (par exemple, 6371KM).

Si vos fonctions trigonométriques prévoient des radians (ce qui est probablement le cas), vous devrez d'abord convertir votre longitude et votre latitude en radians. Vous avez évidemment besoin d'une représentation décimale, et non en degrés. \minutes\seconds (voir Par exemple, ici sur la conversion).

La formule pour la reconversion :

   lat = asin(z / R)
   lon = atan2(y, x)

asin est bien sûr arc sine. lire sur atan2 dans wikipedia . N'oubliez pas de reconvertir les radians en degrés.

Cette page donne le code c# pour cela (notez qu'il est très différent des formules), ainsi qu'une explication et un joli diagramme expliquant pourquoi c'est correct,

25 votes

-1 C'est faux. Vous supposez que la terre est une sphère, alors que le WGS-84 suppose un ellipsoïde.

65 votes

@starblue : Je ne suis pas sûr que vous soyez en mesure de qualifier la réponse donnée de "bonne" ou "mauvaise". L'approximation sphérique (pour obtenir des coordonnées x, y, z de type ECEF) en utilisant les lat/lngs disponibles (qui sont référencés au WGS-84) est soit "adéquate" pour les besoins du posteur original, soit "non adéquate". Pour les estimations de distance et de relèvement, je parierais que cette simple conversion est suffisante. S'il lance des satellites, peut-être pas. Après tout, le WGS-84 lui-même est "faux"... en ce sens qu'il n'est pas un modèle parfait de la surface de la terre ; tous les modèles ellipsoïdaux sont des approximations. Dommage que le PO ne nous ait pas dit ce qu'il essayait de faire.

17 votes

@Dan H La question demande le WGS-84, et si vous répondez autre chose, vous devriez au moins discuter des différences/erreurs, ce que cette réponse ne fait pas.

58voto

bn. Points 2551

J'ai récemment fait quelque chose de similaire en utilisant la "Formule Haversine" sur des données WGS-84. "Formule Haversine" sur des données WGS-84, qui est un dérivé de la "Loi des Haversines" avec des résultats très satisfaisants.

Oui, le WGS-84 suppose que la Terre est un ellipsoïde, mais je crois que vous n'obtenez qu'une erreur moyenne d'environ 0,5% en utilisant une approche comme la "formule Haversine", ce qui peut être une quantité d'erreur acceptable dans votre cas. Vous aurez toujours une certaine quantité d'erreur à moins que vous ne parliez d'une distance de quelques pieds et même là, il y a théoriquement une courbure de la Terre... Si vous avez besoin d'une approche plus rigidement compatible avec le WGS-84, consultez la "formule de Vincenty".

Je comprends où starblue Mais une bonne ingénierie logicielle repose souvent sur des compromis, et tout dépend donc de la précision dont vous avez besoin pour ce que vous faites. Par exemple, le résultat calculé à partir de la "formule de distance de Manhattan" par rapport au résultat de la "formule de distance" peut être meilleur dans certaines situations car il est moins coûteux en termes de calcul. Pensez aux scénarios du type "quel est le point le plus proche ?" où vous n'avez pas besoin d'une mesure précise de la distance.

En ce qui concerne la "formule de Haversine", elle est facile à mettre en œuvre et est intéressante car elle utilise la "trigonométrie sphérique" au lieu d'une approche basée sur la "loi des cosinus", qui est basée sur la trigonométrie bidimensionnelle, ce qui permet d'obtenir un bon équilibre entre précision et complexité.

Un gentleman du nom de Chris Veness a un excellent site web à l'adresse suivante http://www.movable-type.co.uk/scripts/latlong.html qui explique certains des concepts qui vous intéressent et démontre diverses mises en œuvre programmatiques ; cela devrait également répondre à votre question sur la conversion x/y.

1 votes

0,5% d'erreur - 0,5% de quoi ? Dans le contexte de cette question, cela pourrait être le rayon de la terre, donc 0,5% pourrait être 30 km :)

2 votes

J'ai vérifié votre lien. L'erreur de 0,5 % concerne la distance orthodromique entre deux points et n'est donc pas strictement pertinente pour cette question. Je pense que lors de la conversion des coordonnées lat-long en coordonnées cartésiennes avec l'origine au centre de la terre, les erreurs dues à l'hypothèse d'une terre sphérique pourraient être significatives. La question n'est pas claire. faire avec les coordonnées cartésiennes. Soit il est simplement plus pratique de travailler avec ces coordonnées pour une raison bizarre, soit il s'agit d'une exigence pour l'exportation de données ? Dans ce dernier cas, la précision est importante.

12voto

Howie Points 11

Théorie de la conversion GPS(WGS84) à Coordonnées cartésiennes http://en.wikipedia.org/wiki/Geodetic_system#From_geodetic_to_ECEF

Voici ce que j'utilise :

  • La longitude en coordonnées GPS(WGS84) et cartésiennes est la même.
  • La latitude doit être convertie par les paramètres de l'ellipsoïde WGS 84 dont le demi-axe majeur est de 6378137 m, et
  • La réciproque de l'aplatissement est 298.257223563.

J'ai joint un Code VB J'ai écrit :

Imports System.Math

'Input GPSLatitude is WGS84 Latitude,h is altitude above the WGS 84 ellipsoid

Public Function GetSphericalLatitude(ByVal GPSLatitude As Double, ByVal h As Double) As Double

        Dim A As Double = 6378137 'semi-major axis 
        Dim f As Double = 1 / 298.257223563  '1/f Reciprocal of flattening
        Dim e2 As Double = f * (2 - f)
        Dim Rc As Double = A / (Sqrt(1 - (e2 ^ 2) * (Sin(GPSLatitude * PI / 180) ^ 2)))
        Dim p As Double = (Rc + h) * Cos(GPSLatitude * PI / 180)
        Dim z As Double = (Rc * (1 - e2 ^ 2) + h) * Sin(GPSLatitude * PI / 180)
        Dim r As Double = Sqrt(p ^ 2 + z ^ 2)
        Dim SphericalLatitude As Double =  Asin(z / r) * 180 / PI
        Return SphericalLatitude
End Function

Veuillez noter que le h est l'altitude au-dessus du WGS 84 ellipsoid .

Habituellement GPS nous donnera H de ce qui précède MSL hauteur. Le site MSL la hauteur doit être convertie en hauteur h au-dessus de la WGS 84 ellipsoid en utilisant le géopotentiel modèle EGM96 ( Lemoine et al, 1998 ).
Ceci est fait en interpolant une grille du fichier de hauteur du géoïde avec une résolution spatiale de 15 minutes d'arc.

Ou si vous avez un certain niveau professionnel GPS a Altitude H ( msl, hauteur au-dessus du niveau moyen de la mer ) et UNDULATION ,la relation entre le geoid et le ellipsoid (m) de l'option choisie sortie des données de la table interne. Vous pouvez obtenir h = H(msl) + undulation

En XYZ par coordonnées cartésiennes :

x = R * cos(lat) * cos(lon)

y = R * cos(lat) * sin(lon)

z = R *sin(lat)

0 votes

Quelle est la valeur de R ?

4 votes

Je suppose que c'est le rayon de la sphère, qui est de 6371km pour la terre.

5voto

Stjepan Rajko Points 586

Si vous souhaitez obtenir des coordonnées basées sur un ellipsoïde plutôt que sur une sphère, jetez un coup d'oeil à http://en.wikipedia.org/wiki/Geodetic_system#From_geodetic_to_ECEF - il donne les formules ainsi que les constantes WGS84 dont vous avez besoin pour la conversion.

Les formules qui s'y trouvent prennent également en compte l'altitude par rapport à la surface de l'ellipsoïde de référence (utile si vous obtenez des données d'altitude à partir d'un dispositif GPS).

0 votes

Upvoting même si vous n'avez pas posté le contenu du lien ici.

2voto

Yuval Adam Points 59423

Pourquoi mettre en œuvre quelque chose qui a déjà été mis en œuvre et testé ?

Le C#, par exemple, dispose du NetTopologySuite qui est le portage .NET de la JTS Topology Suite.

Plus précisément, vous avez un grave défaut dans votre calcul. La terre n'est pas une sphère parfaite, et les approximation du rayon de la terre pourrait ne pas suffire pour des mesures précises.

Si, dans certains cas, il est acceptable d'utiliser des fonctions maison, les SIG sont un bon exemple de domaine dans lequel il est de loin préférable d'utiliser une bibliothèque fiable et éprouvée.

1 votes

+1. L'utilisation d'une bibliothèque fiable est plus précise qu'une fonction homebrew et aussi plus facile .

8 votes

Comment NetTopologySuite convertit-il les données longues/lates en cartes ?

1 votes

NTS n'inclut pas les capacités de conversion de coordonnées, vous avez peut-être besoin de Proj.NET projnet.codeplex.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X