Günün saatini ve ortam ışığını yansıtmak için bir raster haritayı gölgelendirme veya kaplama yöntemi


14
  • Çalışma alanımda gündüz bir tarama var.
  • Çalışma alanında bir zaman damgası ile "şeyler" sayan 20+ sayacım var.
  • PyEphem I kullanarak toplanan her veri noktası için ortam ışığının tipini belirledim.

Ne yapmak istiyorum:

  • Ortam ışığını (Akşam karanlığı, Gündoğumu, gün, gün batımı ve karanlık) yansıtmak için gri / yarı saydam bir katman ekleyin.

  • Nihai hedef: Veri toplamada günün saatini vurgulayan zamana dayalı bir görselleştirme oluşturmak. Veya uygun gölgeli bindirmeyle belirli bir zamanda anlık görüntü üretebilirsiniz.

  • Bunu şu görüntü olarak düşünün:

gündüz / gece küre kaynak


2
Ek cevaplar (çalışan Mathematica koduyla) mathematica.stackexchange.com/questions/3326/… adresinde görünür .
whuber

Yanıtlar:


9

özet

Güneşin konumu göz önüne alındığında, lat-lon koordinatlarında yüzey ışık yoğunluğunun (atmosferik ve topografik etkileri göz ardı edilerek) kolayca bir ızgarası oluşturabilirsiniz. Bu ızgarayı istediğiniz gibi yeniden projeksiyon yapın ve haritanın üzerine yerleştirin.

ayrıntılar

Formüller, küresel koordinatlar için standarttır: küresel bir koordinata (lon, lat) karşılık gelen birim vektör

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

Yoğunluk, ünitenin dışa doğru normal ("yukarı") yönü ile güneşin yönü arasındaki kosinüse bağlıdır. Bu kosinüs, bu iki birim vektörün sadece nokta ürünüdür. Yani, (x, y, z) güneşe doğru (jeosantrik koordinatlarda) işaret eden birim vektör olsun, her ızgara hücresinin merkez noktasının jeodezik (lat, lon) birim vektörüne (xi, eta, zeta) dönüştürelim ve hesapla

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

0'dan küçük sonuçlar görünmez bir güneşe karşılık gelir, bu yüzden bunları sıfıra ayarlayın.

Uygulama notları

Bu hesaplamalar, harita cebiriyle, (lat, lon) değerlerden oluşan bir ızgarayla (işte böyle yaptım) başlayarak veya biri enlem için diğeri boylam için (bu şekilde örneğin ESRI yazılımı ile).

(Bir enlem veya boylam ızgarası oluşturmak için, coğrafi koordinatlarda sırasıyla y koordinatı veya x koordinat ızgarasını oluşturun, sonra yansıtın.) Bu ilk bilgilerden, üç ızgara [xi], [eta ] ve [zeta] (veya ızgara hücrelerindeki yukarı yönleri temsil etmek için tek bir vektör değerli ızgara [xi, eta, zeta]). Belirli bir güneş pozisyonu için hesaplama, yukarıda verilen [xi], e ve [zeta] 'nın basit doğrusal kombinasyonu haline gelir; güneş x, y ve z katsayılarını belirler (elbette sadece sayılardır).

Misal

İşte böyle bir yoğunluk ızgarasının (216 x 432 hücre) Plate Carree projeksiyonunda bir dünya haritası.

yoğunluk

Asal meridyen merkezde ve kuzey her zamanki gibi zirvede. Bu hesaplama için, güneş vektörünü (0.6, -0.8, 0.5) ile orantılı olarak ayarladım, Atlantik Okyanusu'nun ortasında bir yaz gününü yaklaşık olarak. (Geçmişe bakıldığında, 0,4'lük bir z değeri daha gerçekçi olurdu; güneş asla bu kadar kuzeyde olmaz.)

Aster renklendirilmiş bir haritadaki alfa yer paylaşımı (daha parlak alanları da biraz daha saydam hale getirir) bu görüntüyü üretir.

Dünya haritası

Zaman değiştikçe, güneşin vektörü (x, y, z) yeniden hesaplanır ve yoğunluk ızgarasının yeniden hesaplanmasını gerektirir. Bu hızlı bir hesaplamadır. Yüksek çözünürlüğe de ihtiyacınız yok: Bu örnek için orijinal ızgaranın onda birini kullandım (2160 x 4320 hücre). Kaba yoğunluk ızgarasını görüntülemek için kullanılan enterpolasyon, boşlukları doldurmak için iyi çalışır. Bu, pürüzsüz bir animasyon oluşturarak, ekranı neredeyse anında değiştirmenize olanak tanır.


2
Very, very nice
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.