Come si calcola la distorsione sulla proiezione equirettangolare?


28

Sto cercando di calcolare la distorsione in modo da poter distorcere la sovrapposizione di testo e forme in modo che corrispondano esattamente all'immagine di una proiezione equirettangolare.

Quindi, come si calcola la distorsione a una determinata latitudine su una proiezione equirettangolare 1: 45.000.000 (diciamo, 2000 pixel di larghezza x 1000 pixel di altezza)?

Ho cercato di capire questo post e i suoi collegamenti senza risultati: come creare un indicatore Tissot accurato?

Non sono un professionista, sono solo un dilettante molto interessato, quindi per favore stupiscilo per me!

Grazie molto!


Grazie per le risposte rapide! Ecco la lunga storia; Spero sia più chiaro

Sto visualizzando / mappando i dati usando il linguaggio di programmazione Processing e vorrei che i dati mappati in 2D (caratteri e cerchi di dimensioni diverse) sembrassero non distorti se avvolti in un globo 3D. I dati sono mappati usando le equirangolari x, y e le mappe che voglio usare come fondali sono tutta questa proiezione, quindi presumo che io voglia "abbinare" questa distorsione (ad esempio calcolando la distorsione tramite latitudine usando le equazioni di Tissot?). Usando il linguaggio di programmazione posso distorcere con precisione sia il testo che i cerchi. Penso che tutto ciò di cui ho bisogno siano le equazioni per farlo correttamente.

Ecco la mappa dati 2D originale:

inserisci qui la descrizione dell'immagine

Quando avvolto sembra distorto, in questo modo:

inserisci qui la descrizione dell'immagine

La domanda da $ 10.000: Come posso rendere la mia immagine 2D non distorta se avvolta nella sfera 3D?

Per riferimento, ecco la stessa domanda posta in modo diverso sul forum di elaborazione.

Grazie ancora!


Se ti capisco correttamente non sono sicuro di voler riproiettare su una proiezione ortografica. Voglio che la mia mappa di dati 2D si adatti a un modello di sfera 3D con cui è possibile interagire (ad es. Filare).

Sto usando un programma di modellazione 3D (Cinema 4D) per avvolgere una sfera con un'immagine "Blue Marble" da 2 MB (proiezione equirettangolare) della NASA.

Quando viene avvolto, appare non distorto da tutti gli emisferi (non solo un emisfero, come sarebbe una proiezione ortografica?), Vedi: ancora dal modello 3D sopra. (Suppongo che il programma di modellazione stia eseguendo la proiezione ortografica durante la rotazione dell'oggetto.) Pertanto, penso che se distorco la mia mappa di dati 2D in modo simile, anche questa apparirà non distorta sulla sfera 3D. Ecco uno scatto che ho fatto con un'equazione che approssima la distorsione equirettangolare. Noterai che le ellissi a forma di uovo dall'immagine 2D sembrano un cerchio quando sono avvolte nella sfera 3D. Allo stesso modo, le ellissi di Tissot appaiono anche come cerchi sulla sfera 3D.

Tissot Indicatrix con cerchi distorti Cerchi distorti avvolti in una sfera 3D

Questo è il motivo per cui stavo guardando le equazioni di Tissot ... per capire più precisamente la distorsione della proiezione equirettangolare a diverse latitudini in modo da poter distorcere la mia sovrapposizione di conseguenza.

Spero che tutto ciò abbia un senso.

Forse hai ragione che dovrei usare un programma GIS. Ho appena scaricato Cartographica e vedrò se riesco a capirlo. Qualche suggerimento sul software Mac per un principiante che intraprende questa attività?

Grazie ancora.


1
Intendi davvero calcolare la distorsione o vuoi davvero sapere come calcolare la proiezione stessa? Forse potresti rendere disponibile un'immagine sul Web per illustrare ciò che stai cercando di realizzare. L'uso di "match" suggerisce che ti piacerebbe determinare come trasformare un'immagine in un'altra, indicando che devi specificare con cosa stai iniziando e con cosa vuoi finire.
whuber

1
Comprendiamo che è difficile descrivere ciò che si desidera fare senza conoscere il gergo, ma sembra che tu stia cercando di descrivere il processo piuttosto che il risultato. Prova a iniziare con un problema che vuoi risolvere, quindi i risultati che desideri e cercheremo di colmare le lacune :)
MerseyViking

In termini tecnici: vuoi riproiettare dalla proiezione equirettangolare a una proiezione ortografica ("mondo dallo spazio"). Quale software puoi usare? Se hai un software GIS o sei disposto a programmare contro una biblioteca di proiezioni, il lavoro è sostanzialmente fatto per te. Altrimenti, è necessario implementare le equazioni per non proiettare la proiezione equirettangolare (facile) e proiettare la proiezione ortografica (non troppo difficile, ma richiede alcune abilità nella codifica delle routine numeriche).
whuber

1
Ho visto questo post e sto cercando di fare praticamente la stessa cosa. Voglio disegnare cerchi 2D che distorcono correttamente quando proiettati su una sfera 3D. Mi chiedevo se saresti disposto a condividere l'algoritmo che hai usato per la distorsione dei cerchi 2D? Avrei dovuto davvero essere un commento, non una risposta, ma l'ho scritto nel posto sbagliato. Scusate.
HankTurbo,

Dovresti disegnare i tuoi dati nello spazio 3D, quindi proiettarli sulla sfera.
AngelLeliel,

Risposte:


5

Come posso rendere la mia immagine 2D non distorta se avvolta nella sfera 3D?

Le coordinate dell'immagine sono latitudine e longitudine, quindi anche tu

(a) Non proiettarlo e riproiettarlo usando una proiezione ortogonale o verticale vicino (cioè proiezioni che sembrano il mondo dallo spazio) o

(b) Mappare la trama su un modello 3D di una sfera usando lat-lon come coordinate della trama e visualizzare quella sfera con un dispositivo di rendering grafico 3D.

La maggior parte dei GIS fa (a) regolarmente. Per illustrare (b), ecco un insieme di immagini derivate dalla mappa "piatta" nella domanda presa da un punto di vista in orbita attorno alla sfera mappata a trama:

Mondo dallo spazio

(Se guardi da vicino l'immagine più a destra puoi vedere un meridiano prominente attraverso l'Oceano Pacifico: questa è la "giuntura" formata avvolgendo insieme i lati sinistro e destro della mappa.)

Il comando base di Mathematica per produrre uno di questi è

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]

Ciò riduce il problema originale (del disegno di "mappe dati" su una sfera) alla generazione di una mappa che mostri i cerchi correttamente. La migliore proiezione per questo è la Stereografica, perché proietta tutti i cerchi sulla sfera, indipendentemente dalle loro dimensioni, sui cerchi sulla mappa. Quindi una procedura per disegnare correttamente grandi cerchi in una proiezione equirettangolare , come mostrato nella domanda, è di crearli in una proiezione stereografica e quindi di riproporli su coordinate geografiche (lat, lon). Usare (lon, lat) come (x, y) coordinate cartesiane per rendere la mappa equivale alla proiezione equirettangolare ed è quindi adatto per la mappatura delle trame sulla sfera o per applicare una proiezione ortografica.


Si noti che le indicatrici Tissot non sono adatte come soluzione: rappresentano solo distorsioni locali di cerchi infinitesimali . I cerchi abbastanza grandi da essere visualizzati su scala globale non appariranno più nemmeno circolari nella maggior parte delle proiezioni: assisti al loro aspetto squallido sulla mappa nella domanda. Ecco perché giocare con le proiezioni, come mostrato qui, è essenziale per una buona soluzione.


Grazie per il post molto informativo! Sto prendendo (b) come mio approccio e ho una mappa equirettangolare correttamente generata a portata di mano, ma ottengo brutte distorsioni polari durante la mappatura della mappa sulla sfera 3D. Aiuteresti molto gentilmente? gis.stackexchange.com/questions/245315/…
Sibbs Gambling

2

Supponendo che le forme disegnate coprano una piccola porzione della sfera, dovresti essere in grado di cavartela ridimensionando la larghezza di 1 / cos (lat) e lasciando sola l'altezza.

Più grande è la forma e più ti avvicini ai poli, meno funzionerà comunque.


Potresti spiegare perché questo dovrebbe funzionare? Sembra che fallirebbe drammaticamente anche in piccole porzioni della sfera vicino al bordo del suo rendering nelle immagini di esempio.
whuber

Grazie per la modifica; Di conseguenza ho rimosso il voto negativo perché la tua risposta mi sembra corretta e potrebbe essere utile a qualcuno in futuro. Nel rivedere la domanda, tuttavia, sembra improbabile che qualcuno avvolga così piccole forme attorno alla sfera - e quando lo faranno, avranno bisogno di avere a che fare con i poli e ovunque, immagino.
whuber

0

Non riesco a capire come aggiungere un commento, quindi lo inserirò nella soluzione e lascerò che i moderatori si affrettino a capire perché non posso commentare.

La mia prima impressione quando ho letto la tua domanda è stata "Perché non stai progettando le tue cerchie in una proiezione conforme come Mercator". Potresti proiettare questa mappa in una proiezione di Mercatore e vedere il tuo cerchio e la distorsione del testo, correggere tutto in modo che appaia bello e quando la proietti sul tuo globo, le forme dovrebbero rimanere corrette (questa è la definizione di una proiezione conforme).


2
Mi sembra una risposta, quindi la lascio. Ma non è corretto, essendo basato su un malinteso: le proiezioni conformi non proiettano tutti i cerchi su cerchi. Lo fanno solo all'infinito. La distinzione è enorme: considera ad esempio ciò che fa il Mercatore in ogni cerchio che gira attorno all'asse terrestre. Non è possibile mapparlo come un cerchio: deve romperlo da qualche parte. Per ulteriori discussioni su questo, si prega di cercare Tissot nel nostro sito .
whuber

1
"Lo fanno solo all'infinito." -> "Lo fanno solo per quelli infinitamente piccoli."
Martin F,

0

Vedi, la tua prima mappa 2D non ha le caratteristiche geografiche disegnate. Aggiungili a questa mappa (dì contorno Africa) e applica la distorsione che stai pensando a tutto in una volta. Anche la geografia verrebbe modificata e quando la metti sulla sfera, sarebbe sbagliata. Pertanto, credo che questa idea di applicare una certa distorsione non funzionerebbe.

Puoi cavartela in 2D, disegnando grafici in piccole mappe 2D che hanno un'area limitata e una distorsione accettabile. Puoi tagliare la tua mappa 2D in tessere e per ogni tessera usare la sua "migliore" proiezione.

D'altra parte, è facile creare punti su un cerchio geodetico di un determinato raggio sulla mappa 2D. Per questo dovresti trovare una funzione che calcola lat / long di un punto a una data distanza e azimut da un altro punto (cerca "Vincenty problema diretto"). Una volta ottenuto ciò, puoi generare un gruppo di punti equidistanti a una determinata distanza dal punto modificando l'azimut da 0 a 360. Realizzare un poligono da quei punti in 2D richiede più lavoro quando il cerchio geodetico contiene un polo o si interseca limite sinistro o destro della mappa. Scopri come possono apparire i cerchi geodetici su una mappa piatta qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.