Comment calcule-t-on la distorsion sur la projection équirectangulaire?

28

J'essaie de calculer la distorsion afin de pouvoir déformer le texte et les formulaires superposés pour correspondre précisément à une image d'une projection équirectangulaire.

Alors, comment calculer la distorsion à une latitude donnée sur une projection équirectangulaire au 1: 45 000 000 (disons 2000 pixels de large x 1000 pixels de haut)?

J'ai essayé de comprendre ce message et ses liens en vain: Comment créer un Indicatrix Tissot précis?

Je ne suis pas un professionnel, juste un amateur très intéressé, alors je vous en prie!

Merci beaucoup!


Merci pour les réponses rapides! Voici la longue histoire; J'espère que c'est plus clair.

Je visualise / mappe des données à l'aide du langage de programmation de traitement et j'aimerais que les données mappées 2D (polices et cercles de tailles différentes) apparaissent sans distorsion lorsqu'elles sont enveloppées dans un globe 3D. Les données sont mappées en utilisant des x, y équirectangulaires et les cartes que je veux utiliser comme toile de fond sont toutes ces projections, donc je suppose que je veux "faire correspondre" cette distorsion (par exemple en calculant la distorsion via la latitude en utilisant les équations de Tissot?). En utilisant le langage de programmation, je peux déformer avec précision le texte et les cercles. Je pense que tout ce dont j'ai besoin, ce sont les équations pour le faire correctement.

Voici la carte de données 2D originale:

entrez la description de l'image ici

Une fois enveloppé, il semble déformé, comme ceci:

entrez la description de l'image ici

La question à 10 000 $: Comment puis-je donner à mon image 2D une apparence non déformée lorsqu'elle est enveloppée dans la sphère 3D?

Pour référence, voici la même question posée différemment sur le forum Processing.

Merci encore!


Si je vous comprends bien, je ne suis pas sûr de vouloir reprojeter à une projection orthographique. Je souhaite que ma carte de données 2D soit enveloppée dans un modèle de sphère 3D avec lequel il est possible d'interagir (c'est-à-dire tourné).

J'utilise un programme de modélisation 3D (Cinema 4D) pour envelopper une sphère avec une image "Blue Marble" de 2 Mo (projection équirectangulaire) de la NASA.

Une fois enveloppé, il n'apparaît pas déformé de tous les hémisphères (pas seulement d'un hémisphère, comme le serait une projection orthographique?), Voir: toujours à partir du modèle 3D ci-dessus. (Le programme de modélisation fait la projection orthographique pour moi lorsque je fais pivoter l'objet, je suppose.) Par conséquent, je pense que si je déforme ma carte de données 2D de la même manière, elle apparaîtra également sans distorsion sur la sphère 3D. Voici une photo que j'ai prise avec une équation qui se rapproche de la distorsion équirectangulaire. Vous remarquerez que les ellipses en forme d'oeuf de l'image 2D ressemblent à un cercle lorsqu'elles sont enveloppées dans la sphère 3D. De même, les ellipses de Tissot apparaissent également sous forme de cercles sur la sphère 3D.

Tissot Indicatrix avec cercles déformés Cercles déformés enveloppés dans une sphère 3D

C'est pourquoi je regardais les équations de Tissot ... pour déterminer plus précisément la distorsion de la projection équirectangulaire à différentes latitudes afin de pouvoir déformer ma superposition en conséquence.

J'espère que tout cela a du sens.

Vous avez peut-être raison de dire que je devrais utiliser un programme SIG. Je viens de télécharger Cartographica et je verrai si je peux le découvrir. Des suggestions de logiciels Mac pour un débutant entreprenant cette tâche?

Merci encore.

NCashew
la source
1
Voulez-vous vraiment calculer la distorsion ou voulez-vous vraiment savoir comment calculer la projection elle-même? Vous pourriez peut-être mettre une image à disposition sur le Web pour illustrer ce que vous essayez d'accomplir. Votre utilisation de "match" suggère que vous souhaitez déterminer comment transformer une image en une autre, indiquant que vous devez spécifier ce que vous commencez ainsi que ce que vous souhaitez finir.
whuber
1
Nous comprenons qu'il est difficile de décrire ce que vous voulez faire sans connaître le jargon, mais il semble que vous essayez de décrire le processus plutôt que le résultat. Essayez de commencer avec un problème que vous souhaitez résoudre, puis les résultats que vous souhaitez, et nous essaierons de combler les lacunes :)
MerseyViking
En termes techniques: vous souhaitez reprojeter de la projection équirectangulaire à une projection orthographique ("monde de l'espace"). Quel logiciel pouvez-vous utiliser? Si vous avez un logiciel SIG ou êtes prêt à coder contre une bibliothèque de projection, le travail est essentiellement fait pour vous. Sinon, vous devez implémenter les équations pour déprojeter la projection équirectangulaire (facile) et projeter la projection orthographique (pas trop difficile, mais nécessite quelques compétences en codage de routines numériques).
whuber
1
J'ai vu ce post et j'essaye de faire exactement la même chose. Je veux dessiner des cercles 2D qui se déforment correctement lorsqu'ils sont projetés sur une sphère 3D. Je me demandais si vous seriez prêt à partager l'algorithme que vous avez utilisé pour la distorsion des cercles 2D? Cela aurait vraiment dû être un commentaire et non une réponse, mais je l'ai écrit au mauvais endroit. Désolé.
HankTurbo
Vous devez dessiner vos données dans l'espace 3D, puis les projeter dans la sphère.
AngelLeliel

Réponses:

5

Comment rendre mon image 2D sans distorsion lorsqu'elle est enveloppée dans la sphère 3D?

Les coordonnées de l'image sont la latitude et la longitude, vous pouvez donc

a) Déprojetez-le et reprojetez-le à l' aide d'une projection orthographique ou verticale proche (c'est-à-dire des projections qui ressemblent au monde depuis l'espace) ou

(b) Texture-mappez-le sur un modèle 3D d'une sphère en utilisant lat-lon comme coordonnées de texture et affichez cette sphère avec un dispositif de rendu graphique 3D.

La plupart des SIG le font (a) régulièrement. Pour illustrer (b), voici un ensemble d'images dérivées de la carte "plate" dans la question prise d'un point de vue en orbite autour de la sphère cartographiée par texture:

Le monde vu de l'espace

(Si vous regardez attentivement l'image la plus à droite, vous pouvez voir un méridien proéminent à travers l'océan Pacifique: c'est la "couture" formée en enveloppant les côtés gauche et droit de la carte ensemble.)

La commande de base de Mathematica pour produire l’une d’elles est

SphericalPlot3D[1, {a, 0, \[Pi]}, {b, 0, 2 \[Pi]}, Mesh -> None, 
 PlotStyle -> {Texture[i]}, TextureCoordinateFunction -> ({#5, -#4} &), 
 Lighting -> {{"Ambient", White}}, 
 Boxed -> False, Axes -> False, Background -> Black]

Cela réduit le problème d'origine (de dessiner des "cartes de données" sur une sphère) à générer une carte qui montre correctement les cercles. La meilleure projection pour cela est la stéréographie, car elle projette tous les cercles de la sphère - quelle que soit leur taille - en cercles sur la carte. Ainsi, une procédure pour dessiner correctement de grands cercles dans une projection équirectangulaire , comme indiqué dans la question, consiste à les créer dans une projection stéréographique puis à les dé-projeter en coordonnées géographiques (lat, lon). L'utilisation de (lon, lat) comme coordonnées cartésiennes (x, y) pour créer la carte équivaut à la projection équirectangulaire et convient donc pour le mappage de texture sur la sphère ou pour appliquer une projection orthographique.


Notez que les indicatrices de Tissot ne conviennent pas comme solution: elles ne représentent que des distorsions locales de cercles infinitésimaux . Les cercles suffisamment grands pour être vus à l'échelle mondiale n'apparaîtront même plus circulaires dans la plupart des projections: voyez leur apparence blob dans la carte de la question. C'est pourquoi jouer à des jeux avec des projections, comme indiqué ici, est essentiel à une bonne solution.

whuber
la source
Merci pour le message très instructif! Je prends (b) comme approche et j'ai une carte équirectangulaire correctement générée à portée de main, mais j'obtiens des distorsions de pôles moches tout en mappant la carte sur une sphère 3D. Pourriez-vous nous aider très gentiment? gis.stackexchange.com/questions/245315/…
Sibbs Gambling
2

En supposant que les formes dessinées couvrent une petite partie de la sphère, vous devriez pouvoir vous en tirer avec une échelle de 1 / cos (lat) et en laissant la hauteur seule.

Plus la forme est grande et plus vous vous rapprochez des pôles, moins cela fonctionnera bien.

smithkm
la source
Pourriez-vous expliquer pourquoi cela fonctionnerait? Il semble que cela échouerait considérablement, même sur de petites parties de la sphère près du bord de son rendu dans les images d'exemple.
whuber
Merci pour la retouche; J'ai donc supprimé le downvote car votre réponse me semble correcte et pourrait être utile à quelqu'un à l'avenir. En examinant la question, cependant, il semble peu probable que quelqu'un entoure de si petites formes autour de la sphère - et quand ils le feront, ils devront traiter avec les pôles et partout ailleurs aussi, j'imagine.
whuber
0

Je ne sais pas comment ajouter un commentaire, je vais donc mettre cela dans la solution et laisser les modérateurs se démener pour comprendre pourquoi je ne peux pas commenter.

Ma première impression en lisant votre question était "Pourquoi ne concevez-vous pas vos cercles dans une projection conforme comme Mercator". Vous pouvez projeter cette carte dans une projection Mercator et voir votre cercle et la distorsion du texte, tout corriger pour être joli et lorsque vous la projetez sur votre globe, les formes doivent rester correctes (c'est la définition d'une projection conforme).

brenth
la source
2
Cela se lit comme une réponse pour moi, donc je vais le laisser. Mais c'est incorrect, étant basé sur un malentendu: les projections conformes ne projettent pas tous les cercles en cercles. Ils ne le font que de manière infinitésimale. La distinction est énorme: considérez ce que le Mercator fait à tout cercle qui contourne l'axe de la Terre, par exemple. Il ne peut pas le cartographier comme un cercle - il doit le casser quelque part. Pour plus de discussion à ce sujet, veuillez rechercher notre site pour Tissot .
whuber
1
"Ils ne le font que de manière infinitésimale." -> "Ils ne le font que pour les plus petits."
Martin F
0

Vous voyez, votre première carte 2D n'a pas d'entités géographiques dessinées. Ajoutez-les à cette carte (par exemple contour d'Afrique) et appliquez la distorsion à laquelle vous pensez à tout à la fois. La géographie deviendrait également modifiée, et lorsque vous la mettriez sur la sphère, ce serait faux. Par conséquent, je pense que cette idée d'avoir une certaine distorsion appliquée ne fonctionnerait pas.

Vous pouvez vous débrouiller en 2D, en dessinant des graphiques dans de petites cartes 2D qui ont une zone limitée et une distorsion acceptable. Vous pouvez couper votre carte 2D en tuiles et pour chaque tuile utiliser sa propre "meilleure" projection.

D'un autre côté, il est facile de créer des points sur un cercle géodésique de rayon donné sur la carte 2D. Pour cela, vous devez trouver une fonction qui calcule le lat / long d'un point à une distance donnée et l'azimut d'un autre point (recherchez "problème direct Vincenty"). Une fois que vous avez obtenu cela, vous pouvez générer un tas de points équidistants à une distance donnée du point en changeant l'azimut de 0 à 360. La création d'un polygone à partir de ces points en 2D nécessite plus de travail lorsque le cercle géodésique contient un pôle ou intersecte limite gauche ou droite de la carte. Découvrez à quoi peuvent ressembler les cercles géodésiques sur une carte plate ici .

0kcats
la source