Метод затінення або накладання растрової карти для відображення часу доби та навколишнього світла


14
  • У мене денний растр моєї області дослідження.
  • У досліджуваній області у мене є 20+ лічильників, які рахують "речі" з часовою позначкою.
  • Використовуючи PyEphem, я визначив тип навколишнього світла для кожної зібраної точки даних.

Що я хотів би зробити:

  • Додайте сірий / напівпрозорий наклад для відображення навколишнього світла (сутінки, схід сонця, день, захід сонця та темно).

  • Кінцева мета: створити часову візуалізацію збору даних, яка висвітлює час доби. Або бути в змозі зробити знімок в певний час за допомогою відповідної затіненої накладки.

  • Подумайте про це як це зображення:

денна / нічна земна куля джерело


2
Додаткові відповіді (з робочим кодом Mathematica ) з'являються на сайті mateica.stackexchange.com/questions/3326/… .
whuber

Відповіді:


9

Підсумок

Враховуючи положення Сонця, ви можете легко створити сітку інтенсивності поверхневого світла (ігноруючи атмосферні та топографічні ефекти) у координатах lat-lon. Відхиліть цю сітку за бажанням та накладіть її на карту.

Деталі

Формули є типовими для сферичних координат: одиничний вектор, відповідний сферичній координаті (lon, lat) -

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

Інтенсивність залежить від косинусу між одиницею в напрямку нормального («вгору») і напрямом до сонця. Цей косинус - лише крапка добутку цих двох одиничних векторів. Тобто, нехай (x, y, z) є одиничним вектором, що вказує на сонце (у геоцентричних координатах), перетворять геодезичне (лат, lon) центральної точки кожної сітки в одиничний вектор (xi, eta, zeta) , і обчислити

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

Будь-які результати менше 0 відповідають невидимому сонцю, тому встановіть їх на нуль.

Примітки щодо реалізації

Ці обчислення легко виконати з алгеброю карти, починаючи з сітки значень (lat, lon) (саме так я це зробив) або з сіткою сітки, одна для широти та інша для довготи (як би ви мали наприклад, це робити з програмним забезпеченням ESRI).

(Щоб створити сітку широти чи довготи, сформуйте сітку y-координати або координати x відповідно в географічних координатах, а потім спроектуйте її.) З цієї початкової інформації обчисліть раз і назавжди три сітки [xi], [eta ], і [zeta] (або єдина сітка, що оцінюється векторною [xi, eta, zeta]), щоб представити висхідні напрямки в осередках сітки. Для будь-якого заданого положення сонця обчислення стає простою лінійною комбінацією [xi], [eta] і [zeta], наведеної вище; сонце визначає коефіцієнти x, y і z (звичайно, це просто числа).

Приклад

Ось карта світу в проекції Plate Carree такої сітки інтенсивності (216 на 432 комірки).

Інтенсивність

Основний меридіан знаходиться в центрі, а північ - на вершині, як завжди. Для цього розрахунку я встановив вектор сонця, пропорційний (0,6, -0,8, 0,5), щоб наблизити літній день полудня над середньоатлантичним океаном. (Зрештою, z-значення 0,4 було б більш реалістичним; сонце ніколи не потрапляє так далеко на північ.)

Альфа-накладка (яка також робить яскравіші ділянки трохи прозорішими) на кольоровій карті Астера створює це зображення.

Карта світу

У міру зміни часу вектор сонця (x, y, z) перераховується, вимагаючи перерахунку сітки інтенсивності. Це швидкий розрахунок. Вам також не потрібна висока роздільна здатність: я використав лише одну десяту роздільну здатність оригінальної сітки (2160 на 4320 комірок) для цієї ілюстрації. Інтерполяція, що використовується для відображення сітки більш великої інтенсивності, працює просто добре, щоб заповнити прогалини. Це повинно дозволити вам змінювати дисплей майже миттєво, якщо вам це подобається, створюючи плавну анімацію.


2
Дуже, дуже приємно
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.