SunCalc — солнечный калькулятор

    Хочу поделиться с вами небольшим, но полезным проектиком, разработанным мной на досуге — солнечным калькулятором SunCalc.



    SunCalc показывает на карте для выбранного места и даты траекторию движения солнца и фазы освещённости в течении суток (и еще пару приятных мелочей).

    Идея его появилась после того, как мне понадобилось найти в Крыму хорошее место для съёмки кадра солнца, уходящего в море на закате (для клипа, снимали в итоге вот здесь) — оказалось, что все существующие средства для этого сильно устарели. Захотелось создать своё, сделав его самым лучшим, каким только можно себе представить, нашёл хорошую страницу с кучей астрономических формул, взялся за разработку по свободным вечерам и вот результат.

    Возможности


    • рисует на карте красивый векторный график с положением солнца на рассвете, закате и в выбранное время (жёлтая, оранжевая и красная линия), проекцией траектории солнца (оранжевая дуга) и ее разбросом в течении года (жёлтая область вокруг нее); чем ближе точка на графике к центру круга, тем выше в этот момент солнце над горизонтом
    • по наведении мышкой на линию заката/рассвета показывает соответствующий разброс положений
    • показывает освещённость (темнота, сумерки, дневной свет) цветом на слайдере времени
    • можно посмотреть время не только рассвета и заката, но и 3-х типов сумерек (гражданские, навигационные, астрономические) и полной темноты
    • показывает ссылку на недельный прогноз погоды (облачность, осадки, туман) в выбранном месте
    • умеет определять местоположение (кликните по соответствующему полю -> Detect my location)
    • местоположение также можно выбирать поиском, автоопределением, кликом по карте или перетаскиванием маркера
    • работают пермалинки на конкретное место/время и back/forward в браузере


    Для чего эго можно использовать


    Во-первых, в чисто бытовых ситуациях. До скольки мне нужно выехать из леса, пока еще хоть что-то видно, если я до сих пор не купил на велик фару? До скольки я смогу вечером загорать перед тем, как пляж накроет тень от скалы справа? В какое время уже не будет слепить прямо в глаза солнце, когда выйду поиграть в футбол на площадку под домом? Какая у квартиры, которую я собираюсь снять, освещённость в течении года? Уже самому не раз пригодилось в подобного рода вопросах.

    Во-вторых, любителям фотографии! Включая меня. Часто бывает важно знать, например, когда и сколько длятся сумерки (для ночных пейзажей), в какую сторону садится или откуда восходит солнце (чтобы выбрать удачный ракурс), какое время выбрать для фотосессии какого-то объекта так, чтобы не пришлось фотографировать против солнца или он не попал полностью в тень соседнего здания, и т.д.

    В-третьих, для общего образования и удовлетворения природной любознательности. Почему в Австралии зимой жарче, чем летом? Что на самом деле такое белые ночи и в каких городах и когда они наблюдаются? Что насчёт полярного дня и ночи? Как меняется траектория солнца от севера к югу? Сколько минут идёт рассвет от Москвы до Киева? И т.д.

    Немного деталей реализации


    • весь код приложения выполняется на стороне браузера
    • для карты и поиска используется Google Maps API v3
    • для векторной графики на карте — библиотека Raphaёl
    • для определения местоположения — W3C Geolocation API, Google Gears или Google IP Geolocation
    • используется jQuery и несколько компонентов jQuery UI (Slider для времени, Datepicker для даты и Dialog для окошка приветствия)
    • для deep linking и ajax history используется плагин jQuery Address
    • между сессиями состояние сохраняется в печеньках
    • для прогноза погоды на удивление самым подходящим оказался Wolfram Alpha
    • для идей по улучшению заведена страничка на сервисе UserIdea/Reformal (который уже освещался его авторами на Хабре)


    Что планируется в будущем


    • сделать мобильную версию для браузеров iPhone и Android
    • добавить опцию отображения времени в локальном часовом поясе
    • добавить слайдер для дней года, аналогичный слайдеру времени
    • подчистить и выложить на гитхабе вычислительную часть кода
    • написать для Хабра хорошую статью о нюансах разработки подобного приложения


    Надеюсь, полезное применение этого маленького сервиса найдёте и вы. Буду очень рад впечатлениям и замечаниям в комментариях. Оставлять идеи или голосовать за уже высказанные также можно тут. Спасибо!

    update: извините за проблемы с хостингом, проект временно переехал на другой сервер — теперь вроде всё хорошо.
    Поделиться публикацией

    Похожие публикации

    Комментарии 72

      0
      Извините за глупый вопрос, не совсем понял. Могу ли я узнать благодаря вашему проекту, какое время по солнцу в моем городе? К примеру мне нужно знать, когда по солнцу в городе 12-ть часов.
        0
        Думаю, вам нужно перемещать верхних ползунок с временем в поисках точки на оранжевой траектории, максимально приближенной к центру окружности.
        Для меня это примерно 14.00 =) Точное значение найти, видимо, не удастся.
          0
          Значение есть, просто я забыл, что его тоже стоило бы показать на страничке. :) Исправлю.
          0
          Чтобы получить местное солнечное время, нужно долготу вашего места разделить на 15 и прибавить к текущему гринвичскому времени.

          Чтобы получить из среднего солнечного времени истинное, нужно учесть так называемое «уравнение времени», которое даст поправку в зависимости от сезона (см., например, Википедию). Эта разница вызвана неравномерным движением Земли по орбите вокруг Солнца (см. второй закон Кеплера).
            +1
            Опечатка: «Чтобы получить среднее местное солнечное время...».
            0
            Я просто не знал на момент создания сервиса о таком понятии, как солнечное время. :) Но это можно прикрутить, конечно.
            +2
            Картинку бы лучше запилили на хостинг другой…
              0
              Запилил!
              0
              ваш сайт не подаёт признаков жизни. хабраэффект?
                –3
                К сожалению, Google Chrome не может открыть страницу suncalc.net.
                  +1
                  Помер солнечный калькулятор…
                    +5
                    батарейки у калькулятора сели)))
                      +3
                      солнечные™
                        +2
                        так вечер же! по мск солнце садится — вот и не работает. с рассветом сайт восстановит свою работоспособность
                        0
                        в шоке просто, не ожидал что такая несложная статика завалится, не понимаю, почему… надеюсь, исправится к утру, в это время поищу альтернативный вариант…
                          0
                          Всё, перенёс на другой сервер, теперь смотрите :)
                          0
                          С вашего сайта даже картинка в топик с трудом прогружается, не говоря уже обо всём остальном.
                            –1
                            очень сожалею, не ожидал такого эффекта :(
                            –2
                            Ну что сказать, если сервис правда нужен кому-то, то могу только пожелать дальнейших успехов в его развитии.
                              +3
                              Нужен. Да просто провести выходные на воздухе — во сколько выехать, чтобы успеть.

                              Я люблю солнце и мне приятно было обнаружить этот сервис.

                              Оставил идею по улучшению, автору — спасибо! =)
                                0
                                и вам спасибо :)
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                дело не в доработке, просто хостинг лёг :( поэтому или вообще не грузится, или часть скриптов :(
                                0
                                а можно сделать так чтобы на гугл стрит вью в панорамном изображении рисовалась траектория солнца?
                                  0
                                  Гугл стрит вью на флэше сделан и у него, насколько я знаю, нет API для рисования в его пространстве, так что вряд ли.
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    0
                                    а они почему обижены временем?
                                      +1
                                      Изменили часовой пояс. Как и для жителей Камчатки и ряда других регионов. Сдвинули для сокращения разрыва с Москвой.
                                    0
                                    Вот кстати, еще один калькулятор, довольно-таки старый — www.esrl.noaa.gov/gmd/grad/solcalc/

                                    Такой калькулятор будет полезен в первую очередь фотографам :)
                                      0
                                      да, я его видел :) хотел сделать что-то более симпатичное.
                                      0
                                      А кроме траектории будет ли показываться скорость вращения солнца вокруг земли?
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          меня бы в таком случае назвали капитаном и поблагодарили :)
                                          +1
                                          Да, забавная штучка, проверил по своему расположению — все сходится :)
                                          Седня у нас солнце светило с 7 утра и до 20 вечера, аж 13 часов света, круть!
                                            0
                                            зачем в печеньках, если есть localStorage?
                                              +1
                                              а зачем localStorage, если хранить нужно одну маленькую строку?
                                                0
                                                В куках стоит хранить то, что имеет смысл слать в каждом запросе на сервер. Остальное в localStorage. И никакого больше парсинга кук.
                                                  0
                                                  ты веришь в то что лишние несколько байт в запросе отражаются на перформансе? к тому же у localStorage сейчас не шибко хорошее покрытие браузеров, всё равно придётся куки как фоллбек использовать
                                              0
                                              кстати, а зачем хостить в Украине? медленно и ненадежно же, есть много отличных хостингов в большом мире
                                                0
                                                просто я как правило не нуждаюсь в хостингах, выдерживающих большие нагрузки — в основном там небольшие статические странички, мне его друг отдал в бесплатное распоряжение и как правило с ним никаких проблем.
                                                +1
                                                Вместо странички с кучей формул рекомендую заинтересованным лицам книгу Монтенбрука и Пфлегера «Астрономия на персональном компьютере» (Питер, 2002), которую в т.ч. можно спиратить в интернетах.
                                                  0
                                                  Спасибо, почитаю! Никогда в жизни не думал, что вот так вдруг заинтересуюсь этой темой :)
                                                    0
                                                    Ну если интересно, то придётся мне делать публичную версию своей библиотеки StarJs :)

                                                      0
                                                      конечно интересно, делайте!
                                                        0
                                                        А что сейчас модно использовать для документирования кода на Javascript (типа JavaDoc и Doxygen)?
                                                          0
                                                          я пробовал пользоваться разными и в итоге пришёл к выводу, что лучше всего вики. :) Намного гибче и проще чем любые автогенерирующие решения.
                                                      +1
                                                      Пародон, не дописал. Вот несколько демок:

                                                      раз, два (используется RaphaelJs), три (используется Canvas, лучше смотреть в Firefox и Chrome).
                                                        0
                                                        демки классные! мне особенно интересна вторая, я построение подобного графика тоже собирался делать. :)
                                                          0
                                                          а можно из первой демки сделать скринсейвер?
                                                          Красивые яркие линии на чёрном фоне в реальном времени.
                                                            0
                                                            Можно, конечно, но я этим заниматься точно не буду :)
                                                      +1
                                                      Раз уж вы упомянули фотографов, то есть такой ресурс как:
                                                      www.golden-hour.com/

                                                      А вам рекомендую добавить в верхнюю шкалу значение угла солнца над горизонтом. Или хотя бы обозначить часы когда солнце выше/ниже 45 градусов.
                                                        0
                                                        Немного недружелюбный ресурс… А угол над горизонтом легко виден по графику на карте. Хотя числовые значения наверное тоже нужно добавить, но они не так уж полезны, если есть примерное представление.
                                                        0
                                                        > До скольки я смогу вечером загорать перед тем, как пляж накроет тень от горы справа?
                                                        А можно поподробнее для непонятливых? Вот перенёс я маркер на подножие высокой горы, и как мне теперь учесть влияние ландшафта на восход/заход солнца в этой точке?
                                                          0
                                                          ну это условно, точно рассчитать с учётом ландшафта оно не может конечно, но примерно представить что от горы, которую видно на карте, будет тень вечером падать в направлении, параллельном линии солнца на графике, вполне можно, учитывая то что вечером солнце уже довольно низко над горизонтом.
                                                            0
                                                            Насколько я знаю, Google Maps API v3 позволяет получать данные о ландшафте. Почему бы эти данные не учитывать, например, вдоль прямых восхода/захода? А при желании галочкой включать стандартный режим идеально плоской планеты.
                                                              +1
                                                              Вдоль прямых восхода/захода это бесполезно, солнце ведь за эти горы будет заходить не в этих точках, а раньше. Для того, чтобы полноценно всё вычислить, нужны ландшафтные данные в целом секторе, а у Гугла довольно жёсткое ограничение на кол-во точек, которые можно запросить. Но вообще я об этом думал, возможно реализую позже — просто это нетривиальная задача, поэтому пока откладывается.
                                                                0
                                                                Нетривиальные задачи интереснее решать, не так ли? :)
                                                                  0
                                                                  Интересно конечно, но не всё сразу, а шаг за шагом. :)
                                                            0
                                                            имеется в виду не гора на горизонте, а например отвесная скала прямо справа от пляжа, мне такая вспомнилась с отдыха на Фиоленте в Крыму.
                                                            +1
                                                            Теперь я знаю с какой стороны утром садиться в автобусе что бы солнце не мешало выспаться. Это было тяжело вычислить эмпирическим путём. =)
                                                            Спасибо!
                                                              +2
                                                              а можно то же самое с луной?
                                                                +1
                                                                придётся, уже многие спрашивали :)
                                                                +4
                                                                Это просто мегаполезно!!!
                                                                Только недавно думал — если покупать квартиру, как определить ее освещенность в течении года? будет ли там летом жарища или приятный восход?
                                                                Уже не говоря про зиму — вопрос освещенности в это суровую и, главное, длинную пору крайне важно.

                                                                Отлично, просто отлично. В закладки
                                                                  0
                                                                  Спасибо, даже добавил этот вопрос в примеры. :)
                                                                    0
                                                                    Спасибо за ваш труд. Делайте мобильные версии — мне кажется, это будут популярные приложения. Я бы точно купил, хоть и не риэлтор/фотограф, но вижу много ситуаций, когда такая информация очень будет полезна!
                                                                      0
                                                                      Платных приложений для мобильных с таким функционалом уже пруд пруди (мне так друг-айфонер сказал, искал). :) Но нужно изучить подробнее, может получится сделать что-то существенно лучше того что есть.
                                                                  +4
                                                                  Mourner, молодец!
                                                                  Хотел бы сделать только пару замечаний.
                                                                  1) Период с момента окончания вечерних астрономических сумерек до момента начала утренних астр. сумерек называется ночь (night). У вас он назван «темный» (dark).
                                                                  2) Довольно странно видеть, что в Австралии (для примера — в г. Brisbane) Солнце восходит в полночь и заходит в полдень ;-) Даже более странно, чем ваше замечание, что в Австралии зимой теплее, чем летом. Чтобы объяснить первое, достаточно где-то написать, что все времена даются по тому времени, которое показывают часы на компьютере пользователя (или по какому другому — вам виднее). Чтобы сделать правдой второе, можно написать, что в Австралии теплее в январе, чем в июле. Австралийцы хоть и антиподы и ходят вниз головами ;-) но летом у них все-таки теплее, просто лето длится с декабря по февраль.
                                                                  3) То, про что спросил парень в 1-м комментарии («когда по солнцу 12 часов?»), называется верхней кульминацией Солнца или истинным солнечным полднем (solar noon). В этот момент Солнце находится на небесном меридиане (линии, которая проходит через точку севера, точку юга и зенит). Известные латинские аббревиатуры am и pm отражают тот факт, что до полудня солнце «до меридиана» (ante meridiem), а после полудня — «после меридиана» (post meridiem).
                                                                  4) Иногда, когда нужны не «примерные» ориентиры, а точные моменты восхода/истинного солнечного полудня/захода, либо когда хочется сразу видеть изменение этих моментов и длины дня в течение месяца/года, таблица с числами может быть удобнее графики. Таких таблиц много, но я рекомендую две:
                                                                  www.timeanddate.com/worldclock/astronomy.html?n=47&month=4&year=2010&obj=sun&afl=-1&day=1
                                                                  и
                                                                  aa.usno.navy.mil/cgi-bin/aa_rstablew.pl?FFX=1&xxy=2010&type=0&st=HI&place=Honolulu&ZZZ=END
                                                                  Руководствуясь этими таблицами, например, легко понять, что ехать на Новый год в Финляндию означает вообще не видеть белый свет (продолжительность дня либо 1 час, либо дня нет вообще, в зависимости от широты конкретного места)
                                                                    0
                                                                    Спасибо за дельные замечания!
                                                                    1 — исправлю
                                                                    2 — да, уже было замечание, что нет указания, в каком часовом поясе указывается время… Планирую также добавить опцию показывания времени в локальном часовом поясе (выбранной точки), хотя для этого каждый раз придётся делать запрос на сторонний сервис…
                                                                    3 — solar noon добавлю, тем более что он у меня и так считается, просто не отображается :)
                                                                    4 — возможно тогда и таблицу сделаю, хотя мне казалось, что для большинства людей такие данные намного менее полезны, чем графика, потому что не показательна… Хочу сначала сделать график вроде этого: heavens-above.ru/twcal/ а пример с Финляндией у меня имхо удобнее смотреть, потому что продолжительность дня сразу видно визуально и к тому же не в одной точке, а можно водить маркером от южного конца страны к северу и обратно и смотреть, как она изменяется :)
                                                                    +1
                                                                    Спасибо огромное!
                                                                    Собираюсь снимать офис, надо было посмотреть слепит ли солнце в окно.
                                                                    Получилось, что светит всего пару часов и под углом.
                                                                      +2
                                                                      Очень здоровский проект!
                                                                      Главное практическое применение не заставит долго ждать.

                                                                      Спасибо Вам за труд!
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                          0
                                                                          Невероятно крутой сервис! Низкий поклон автору!

                                                                          Потребовалось рассчитать оптимальное расположение солнечных батарей на объекте, о таком калькуляторе и мечтать не мог!

                                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                          Самое читаемое