Расчет восхода и захода солнца с помощью java
Я ищу способ рассчитать восход солнца и-установить для данного часового пояса ака местоположение. Я хотел бы что-то похожее на Zend_Date.
идея состоит в том, чтобы иметь приложение, где вы можете выбрать место и на основе этого вы получите фактическое время, а также восход солнца,- установить время.
ура и спасибо,
- Лони!--3-->
5 ответов
посмотри sunrisesunsetlib-java который вычисляет время восхода / захода солнца из координат GPS и даты.
вычисление восхода и захода солнца на самом деле очень сложная проблема для решения, и большинство библиотек, которые утверждают, что это сделать, используют слишком простые модели Солнечной системы, которые на самом деле не дают точных результатов.
орбиты Земли вокруг Солнца и Луны вокруг Земли нерегулярны, ось вращения Земли колеблется двумя различными способами (прецессия и нутация), а временные шкалы, используемые астрономами, не согласуются с координированным универсальным временем (UTC). Сверху атмосферная рефракция искажает воспринимаемое положение небесных тел (особенно вблизи горизонта); восход и закат солнца и Луны обычно определяются первым появлением диска над горизонтом, а не прохождением центра диска; и воспринимаемый размер диска изменяется со временем в зависимости от его расстояния от наблюдателя.
Мне нужно было точное вычисление этого для проекта, над которым я работал, и написал библиотеку, чтобы сделать это включает в себя все современные модели.
мы также предлагаем веб-API для этого, и веб-API и библиотеку Java можно найти по адресу:
этот сайт также предлагает много другой информации, которая зависит от широты и долготы. Подробнее о Библиотеке вы можете прочитать здесь:
http://askgeo.com/database/Astronomy
библиотека и веб-API коммерческий, но мы предоставляем бесплатный доступ к веб-API для квалификации некоммерческих, исследователей и проектов с открытым исходным кодом. Для коммерческих пользователей информация о ценах находится по адресу:
библиотека, которая дает восход и закат (среди прочего), является" астрономией " в списке.
только что я выпустил Time4J-v4.29 С поддержкой восход/закат-расчеты. Пример:
SolarTime hamburg = SolarTime.ofLocation(53.55, 10.0);
Optional<Moment> result = PlainDate.nowInSystemTime().get(hamburg.sunrise());
System.out.println(result.get().toZonalTimestamp(() -> "Europe/Berlin"));
Java-8-совместимость:
результаты класс SolarTime
(типа Moment
или PlainTimestamp
) можно легко преобразовать в Java-8-типы, такие как Instant
или LocalDateTime
, обычно вызывая метод toTemporalAccessor()
.
об алгоритме:
основной алгоритм то же, что используется NOAA (С основным отличием, что дельта-t-вычисления также учитываются по Time4J). Алгоритм NOAA (который практически совпадает с разработанным Жаном Меусом) более точен, чем алгоритм Уильямса, используемый библиотекой sunrisesunsetlib, упомянутой в ответе @dogbane, особенно вблизи или в полярных регионах. Однако Time4J также поддерживает алгоритм Williams, указав имя калькулятора. Этот простой алгоритм по-прежнему используется в нормальное географическое положение и дает 1-2-минутную точность.
другие особенности:
некоторые трюки, такие как синий час, различные определения сумерек, длина солнечного света или определение полярной ночи / полуночного солнца или влияние высоты наблюдателей также поддерживаются, см. API.
примечание о точности:
что так всегда, мы должны всегда иметь в виду, что топологические факты, как горы или специальная погода условия сильно влияют на реальное время восхода/захода солнца и не могут быть смоделированы ни в одной библиотеке, поддерживающей sunrise/sunset-вычисления.
вы можете использовать общее-suncalc, библиотека без зависимостей для Java ⩾7:
Date date = // date of calculation
double lat, lng = // geolocation
SunTimes times = SunTimes.compute()
.on(date) // set a date
.at(lat, lng) // set a location
.execute(); // get the results
System.out.println("Sunrise: " + times.getRise());
System.out.println("Sunset: " + times.getSet());
вы можете использовать этот бесплатный веб-сервис, чтобы получить Восход ИИ и захода солнца
Это очень простой в использовании. Он реагирует на время в GMT, поэтому вам нужно сделать преобразование lat/lon в часовой пояс, если вам это нужно.