Método para sombrear ou sobrepor um mapa raster para refletir a hora do dia e a luz ambiente

14
  • Eu tenho uma varredura diurna da minha área de estudo.
  • Tenho mais de 20 contadores na área de estudo que contam "coisas" com um carimbo de data / hora.
  • Usando PyEphem , determinei o tipo de luz ambiente para cada ponto de dados coletado.

O que eu gostaria de fazer:

  • Adicione uma sobreposição cinza / semi transparente para refletir a luz ambiente (Crepúsculo, Nascer do sol, dia, pôr do sol e escuro).

  • O objetivo final: produzir uma visualização baseada em tempo da coleta de dados que destaque a hora do dia. Ou seja, capaz de produzir um instantâneo em um determinado momento com a sobreposição sombreada adequada.

  • Pense nisso como esta a imagem:

globo dia / noite fonte

dassouki
fonte
2
Respostas adicionais (com o código do Mathematica em funcionamento ) são exibidas em mathematica.stackexchange.com/questions/3326/… .
whuber

Respostas:

9

Sumário

Dada a posição do sol, é possível criar facilmente uma grade da intensidade da luz da superfície (ignorando os efeitos atmosféricos e topográficos) nas coordenadas lat-lon. Reprojete essa grade conforme desejado e sobreponha-a no mapa.

Detalhes

As fórmulas são as padrão para coordenadas esféricas: o vetor unitário correspondente a uma coordenada esférica (lon, lat) é

(cos(lon)cos(lat), sin(lon)cos(lat), sin(lat)).

A intensidade depende do cosseno entre a direção normal externa da unidade ("para cima") e a direção do sol. Esse cosseno é apenas o produto escalar desses dois vetores unitários. Ou seja, seja (x, y, z) o vetor unitário apontando para o sol (em coordenadas geocêntricas), converta o geodésico (lat, lon) do ponto central de cada célula da grade em um vetor unitário (xi, eta, zeta) e calcular

(x,y,z) . (xi, eta, zeta) = x*xi + y*eta + z*zeta.

Quaisquer resultados menores que 0 correspondem a um sol invisível, portanto, defina-os como zero.

Notas de implementação

Esses cálculos são fáceis de executar com álgebra de mapa, começando com uma grade de valores (lat, lon) (como fiz) ou com um par de grades, uma para latitude e outra para longitude (que é como você teria para fazer isso com o software ESRI, por exemplo).

(Para criar uma grade de latitude ou longitude, forme as coordenadas y ou x, respectivamente, em coordenadas geográficas, depois projete-as.) A partir dessas informações iniciais, calcule, de uma vez por todas, três grades [xi], [eta ] e [zeta] (ou uma única grade com valor vetorial [xi, eta, zeta]) para representar as direções para cima nas células da grade. Para qualquer posição do sol, o cálculo se torna a combinação linear simples de [xi], [eta] e [zeta] fornecida acima; o sol determina os coeficientes x, ye z (que são apenas números, é claro).

Exemplo

Aqui está um mapa-múndi na projeção Plate Carree de uma grade dessa intensidade (216 por 432 células).

Intensidade

O meridiano principal fica no centro e o norte está no topo, como de costume. Para esse cálculo, defino o vetor do sol proporcional a (0,6, -0,8, 0,5), para aproximar um dia de verão ao meio-dia sobre o meio do Oceano Atlântico. (Em retrospecto, um valor-z de 0,4 seria mais realista; o sol nunca chega tão ao norte).

Uma sobreposição alfa (que torna as áreas mais brilhantes também um pouco mais transparentes) em um mapa colorido do Aster produz essa imagem.

Mapa mundial

À medida que o tempo muda, o vetor do sol (x, y, z) é recalculado, exigindo um recálculo da grade de intensidade. Este é um cálculo rápido. Você também não precisa de alta resolução: usei apenas um décimo da resolução da grade original (2160 por 4320 células) para esta ilustração. A interpolação usada para exibir a grade de intensidade mais grossa funciona muito bem para preencher as lacunas. Isso deve permitir que você modifique a exibição quase instantaneamente, se desejar, criando uma animação suave.

whuber
fonte
2
Muito, muito bom