Como se calcula a distorção na projeção equiretangular?

28

Estou tentando calcular a distorção para distorcer o texto e os formulários sobrepostos para corresponder com precisão à imagem de uma projeção equiretangular.

Então, como calcular a distorção em uma determinada latitude em uma projeção equiretangular 1: 45.000.000 (digamos, 2000 pixels de largura x 1000 pixels de altura)?

Eu tenho tentado descobrir este post e seus links sem sucesso: Como criar um Indicatrix Tissot preciso?

Eu não sou um profissional, apenas um amador muito interessado, então, por favor, faça o menor para mim!

Muito Obrigado!


Obrigado pelas respostas rápidas! Aqui está a longa história; Espero que seja mais claro.

Estou visualizando / mapeando dados usando a linguagem de programação Processing e gostaria que os dados mapeados em 2D (fontes e círculos de tamanhos diferentes) aparecessem sem distorção quando agrupados em um globo 3D. Os dados são mapeados usando x, y equiretangular e os mapas que eu quero usar como pano de fundo são toda essa projeção, então estou assumindo que quero "corresponder" a essa distorção (por exemplo, calculando a distorção via latitude usando as equações de Tissot?). Usando a linguagem de programação, posso distorcer com precisão o texto e os círculos. Penso que tudo o que preciso são as equações para fazê-lo corretamente.

Aqui está o mapa de dados 2D original:

insira a descrição da imagem aqui

Quando embrulhado, parece distorcido, assim:

insira a descrição da imagem aqui

A pergunta de US $ 10.000: Como fazer com que minha imagem 2D pareça não distorcida quando envolvida na esfera 3D?

Para referência, aqui está a mesma pergunta feita de maneira diferente no fórum Processamento.

Obrigado novamente!


Se entendi direito, não tenho certeza se quero reprojetar para uma projeção ortográfica. Quero que meu mapa de dados 2D seja agrupado em um modelo de esfera 3D que possa ser interagido (ou seja, girado).

Estou usando um programa de modelagem 3D (Cinema 4D) para envolver uma esfera com uma imagem de 2 MB "Blue Marble" (projeção equiretangular) da NASA.

Quando embrulhado, parece não distorcido de todos os hemisférios (não apenas um hemisfério, como seria uma projeção ortográfica?), Veja: ainda do modelo 3D acima. (O programa de modelagem está fazendo a projeção ortográfica para mim enquanto eu giro o objeto, suponho.) Portanto, acho que se distorcer meu mapa de dados 2D de maneira semelhante, ele também aparecerá sem distorção na esfera 3D. Aqui está uma foto que tirei com uma equação que se aproxima da distorção equiretangular. Você notará que as elipses em forma de ovo da imagem 2D parecem um círculo quando enroladas na esfera 3D. Da mesma forma, as elipses de Tissot também aparecem como círculos na esfera 3D.

Indicatriz de Tissot com círculos distorcidos Círculos distorcidos envolvidos na esfera 3D

É por isso que eu estava olhando as equações de Tissot ... para descobrir com mais precisão a distorção da projeção equiretangular em diferentes latitudes, para que eu pudesse distorcer minha sobreposição de acordo.

Espero que tudo isso faça sentido.

Talvez você esteja certo que eu deveria usar um programa GIS. Acabei de baixar o Cartographica e vou ver se consigo descobrir. Alguma sugestão de software para Mac para um novato que está realizando essa tarefa?

Obrigado novamente.

NCashew
fonte
1
Você realmente quer dizer calcular a distorção ou realmente quer saber como calcular a própria projeção? Talvez você possa disponibilizar uma imagem na Web para ilustrar o que você está tentando realizar. Seu uso de "match" sugere que você deseja determinar como transformar uma imagem em outra, indicando que precisa especificar com o que está começando e com o que deseja terminar.
whuber
1
Entendemos que é difícil descrever o que você quer fazer sem conhecer o jargão, mas parece que você está tentando descrever o processo e não o resultado. Tente começar com um problema que você quer resolver, então os resultados que você gostaria, e nós vamos tentar preencher as lacunas :)
MerseyViking
Em termos técnicos: você quer reprojetar a partir da projeção equirectangular a um ortográfica ( "mundo a partir do espaço") de projeção. Qual software você pode usar? Se você possui um software GIS ou deseja codificar em uma biblioteca de projeção, o trabalho é basicamente feito para você. Caso contrário, você precisará implementar as equações para desprojetar a projeção equiretangular (fácil) e projetar a projeção ortográfica (não muito difícil, mas requer algumas habilidades na codificação de rotinas numéricas).
whuber
1
Vi este post e estou tentando basicamente fazer exatamente a mesma coisa. Quero desenhar círculos 2D que distorcem corretamente quando projetados em uma esfera 3D. Eu queria saber se você estaria disposto a compartilhar o algoritmo que você usou para a distorção dos círculos 2D? Deveria realmente ter sido um comentário, não uma resposta, mas escrevi no lugar errado. Desculpe.
HankTurbo
Você deve desenhar seus dados no espaço 3D e depois projetá-los de volta para a esfera.
AngelLeliel

Respostas:

5

Como faço para que minha imagem 2D pareça não distorcida quando envolvida na esfera 3D?

As coordenadas da imagem são latitude e longitude, então você pode

(a) Desprojete e reprojete-o usando uma projeção ortográfica ou vertical próxima ao lado (ou seja, projeções que se parecem com o mundo do espaço) ou

(b) Mapeie a textura para um modelo 3D de uma esfera usando lat-lon como coordenada da textura e exiba essa esfera com um dispositivo de renderização de gráficos 3D.

A maioria dos GIS faz (a) rotineiramente. Para ilustrar (b), aqui está um conjunto de imagens derivadas do mapa "plano" na pergunta feita de um ponto de vista que orbita a esfera mapeada pela textura:

Mundo do espaço

(Se você observar atentamente a imagem mais à direita, poderá ver um meridiano de destaque no Oceano Pacífico: essa é a "costura" formada ao envolver os lados esquerdo e direito do mapa.)

O comando básico do Mathematica para produzir um desses é

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]

Isso reduz o problema original (de desenhar "mapas de dados" em uma esfera) para gerar um mapa que mostra círculos corretamente. A melhor projeção para isso é o Stereographic, porque projeta todos os círculos na esfera - independentemente do tamanho - em círculos no mapa. Assim, um procedimento para desenhar círculos grandes corretamente em uma projeção equiretangular , como mostrado na pergunta, é criá-los em uma projeção estereográfica e depois projetá-los em coordenadas geográficas (lat, lon). Usar (lon, lat) como (x, y) coordenadas cartesianas para fazer o mapa é equivalente à projeção equiretangular e, portanto, é adequado para o mapeamento de texturas na esfera ou para aplicar uma projeção ortográfica.


Observe que os indicadores de Tissot não são adequados como solução: eles representam apenas distorções locais de círculos infinitesimais . Círculos grandes o suficiente para serem vistos em escala global não aparecerão mais circulares na maioria das projeções: testemunhe sua aparição desajeitada no mapa da pergunta. É por isso que jogar com projeções, como mostrado aqui, é essencial para uma boa solução.

whuber
fonte
Obrigado pelo post muito informativo! Estou adotando (b) como minha abordagem e tenho em mãos um mapa retangular retangular gerado corretamente, mas recebo distorções feias nos pólos ao mapear o mapa para a esfera 3D. Você ajudaria muito gentilmente? gis.stackexchange.com/questions/245315/…
Sibbs Gambling
2

Supondo que as formas desenhadas cubram uma pequena parte da esfera, você poderá escalar a largura em 1 / cos (lat) e deixar a altura sozinha.

Quanto maior a forma e mais perto você chegar dos postes, menos isso funcionará.

smithkm
fonte
Poderia explicar por que isso funcionaria? Parece que falharia dramaticamente, mesmo em pequenas porções da esfera perto da borda de sua renderização nas imagens de exemplo.
whuber
Obrigado pela edição; Por conseguinte, removi o voto negativo, porque sua resposta parece correta para mim e pode ser útil para alguém no futuro. Ao revisar a pergunta, no entanto, parece improvável que alguém envolva formas tão pequenas em torno da esfera - e quando o fizerem, precisarão lidar com os pólos e em qualquer outro lugar, imagino.
whuber
0

Não consigo descobrir como adicionar um comentário, então colocarei isso na solução e deixarei os moderadores se esforçarem para descobrir por que não posso comentar.

Minha primeira impressão ao ler sua pergunta foi "Por que você não está projetando seus círculos em uma projeção conforme o Mercator". Você pode projetar esse mapa em uma projeção Mercator e ver sua distorção de círculo e texto, corrigir tudo para ficar bonito e quando você projetá-lo em seu globo, as formas devem permanecer corretas (que é a definição de uma projeção conforme).

brenth
fonte
2
Isso parece uma resposta para mim, então vou deixar. Mas é incorreto, baseando-se em um mal-entendido: projeções conformes não projetam todos os círculos em círculos. Eles fazem isso apenas infinitesimalmente. A distinção é enorme: considere o que o Mercator faz com qualquer círculo que gire o eixo da Terra, por exemplo. Não é possível mapeá-lo como um círculo - deve quebrá-lo em algum lugar. Para mais discussões sobre isso, por favor, procure no nosso site por Tissot .
whuber
1
"Eles fazem isso apenas infinitesimalmente." -> "Eles fazem isso apenas para infinitesimalmente pequenos."
Martin F
0

Veja, seu primeiro mapa 2D não possui recursos geográficos desenhados. Adicione-os a este mapa (por exemplo, contorno da África) e aplique a distorção em que você está pensando em tudo de uma vez. A geografia também se modificaria e, quando você a colocasse na esfera, estaria errada. Portanto, acredito que essa ideia de aplicar alguma distorção não funcionaria.

Você pode se dar bem em 2D, desenhando gráficos em pequenos mapas 2D com área limitada e distorção aceitável. Você pode cortar seu mapa 2D em ladrilhos e, para cada ladrilho, usar sua própria "melhor" projeção.

Por outro lado, é fácil criar pontos em um círculo geodésico de determinado raio no mapa 2D. Para isso, você precisará encontrar uma função que calcule lat / long de um ponto a uma determinada distância e azimute a partir de outro ponto (procure por "problema direto Vincenty"). Quando você conseguir isso, poderá gerar vários pontos equidistantes a uma determinada distância do ponto, alterando o azimute de 0 para 360. Criar um polígono com esses pontos em 2D exige mais trabalho quando o círculo geodésico contém um polo ou cruza limite esquerdo ou direito do mapa. Confira como os círculos geodésicos podem parecer em um mapa plano aqui .

0kcats
fonte