Расчет восхода и захода солнца с помощью java

Я ищу способ рассчитать восход солнца и-установить для данного часового пояса ака местоположение. Я хотел бы что-то похожее на Zend_Date.

идея состоит в том, чтобы иметь приложение, где вы можете выбрать место и на основе этого вы получите фактическое время, а также восход солнца,- установить время.

ура и спасибо,
- Лони!--3-->

5 ответов


посмотри sunrisesunsetlib-java который вычисляет время восхода / захода солнца из координат GPS и даты.


вычисление восхода и захода солнца на самом деле очень сложная проблема для решения, и большинство библиотек, которые утверждают, что это сделать, используют слишком простые модели Солнечной системы, которые на самом деле не дают точных результатов.

орбиты Земли вокруг Солнца и Луны вокруг Земли нерегулярны, ось вращения Земли колеблется двумя различными способами (прецессия и нутация), а временные шкалы, используемые астрономами, не согласуются с координированным универсальным временем (UTC). Сверху атмосферная рефракция искажает воспринимаемое положение небесных тел (особенно вблизи горизонта); восход и закат солнца и Луны обычно определяются первым появлением диска над горизонтом, а не прохождением центра диска; и воспринимаемый размер диска изменяется со временем в зависимости от его расстояния от наблюдателя.

Мне нужно было точное вычисление этого для проекта, над которым я работал, и написал библиотеку, чтобы сделать это включает в себя все современные модели.

мы также предлагаем веб-API для этого, и веб-API и библиотеку Java можно найти по адресу:

http://askgeo.com/

этот сайт также предлагает много другой информации, которая зависит от широты и долготы. Подробнее о Библиотеке вы можете прочитать здесь:

http://askgeo.com/database/Astronomy

библиотека и веб-API коммерческий, но мы предоставляем бесплатный доступ к веб-API для квалификации некоммерческих, исследователей и проектов с открытым исходным кодом. Для коммерческих пользователей информация о ценах находится по адресу:

http://askgeo.com/#pricing

библиотека, которая дает восход и закат (среди прочего), является" астрономией " в списке.


только что я выпустил 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 в часовой пояс, если вам это нужно.