У меня есть веб-сайт веб-камеры, и я хотел показать время восхода солнца для фактического дня. Поэтому я использовал для этого функцию date_sunrise в PHP. В дополнение к координатам он принимает значение зенита солнца в качестве входных данных.
Я узнал, что правильный зенит для восхода солнца — 90,8333. 90 будет теоретическим углом к центру Солнца (то есть на горизонте). Для учета диаметра солнца и преломления добавляется 0,8333 (16 угловых минут + 34 угловых минуты, деленных на 60).
Но я заметил, что этот вход дал другое время восхода, чем на других сайтах. Наиболее достоверным источником должен быть Отдел астрономических применений Военно-морской обсерватории США. Увидеть их онлайн калькулятор и читать описание их метода. Утверждается, что они также используют значение зенита 90,8333 для расчета восхода солнца.
Затем я обнаружил, что функция php date_sun_info, которая является массивом, содержащим различные данные, дает правильное время восхода (соответствующее результатам AAD).
Чтобы достичь того же времени восхода из функции date_sunrise, мне нужно ввести значение зенита около 90,5.
Почему date_sunrise с zenith = 90.8333 не дает такой же результат, как date_sun_info?
В соответствии с http://php.net/manual/en/function.date-sunrise.php параметр Zenith по умолчанию берется из файла конфигурации (см. ini_get ())
.Ini речь идет о php.ini из вашей установки PHP. Он имеет следующие строки (они здесь закомментированы, но используются по умолчанию, если не перезаписаны в INI-файле).
; http://php.net/date.sunrise-zenith
;date.sunrise_zenith = 90.583333
; http://php.net/date.sunset-zenith
;date.sunset_zenith = 90.583333
Поэтому, если вы перейдете к файлу php.ini и удалите точку с запятой, вы можете перезаписать значения по умолчанию для восхода / установки зенита так, как вам удобно. В вашем случае «90,8333».
Что касается разницы, «sun_info» принимает аргументы координат времени, долготы и широты. Так что это может иметь более точную базу данных где-то, а не использовать значение по умолчанию, установленное в конфигурации.
Рекомендации:
Почему date_sunrise с zenith = 90.8333 не дает такой же результат, как date_sun_info?
Хороший вопрос. Пойдемте к источнику. date_sunrise
рассчитывает высоту как функция зенита:
altitude = 90 - zenith;
в то время как date_sun_info
вычисляет высоту как константа:
-35.0/60
Что означает высота над уровнем моря, и как изменение этого значения влияет на результат? Что ж, перекрестная ссылка на timelib_astro_rise_set_altitude
, который является вызовом библиотеки как date_sunrise
а также date_sun_info
использовать, мы видим:
* altit = the altitude which the Sun should cross
* Set to -35/60 degrees for rise/set, -6 degrees
* for civil, -12 degrees for nautical and -18
* degrees for astronomical twilight.
Теперь просмотрите этот код и обратите внимание, что это просто Обобщенное уравнение восхода и постоянная -35.0/60
соответствует центру солнечного диска (-0,83 ° или около -50 угловых минут). Таким образом, использование константы здесь имеет смысл, так как является частью обобщенного уравнения, которое использует USNO AAD.
Вопрос сейчас в том, почему date_sunrise
рассчитать высоту как функцию зенита? Давайте заметим две вещи. Во-первых, если мы поставляем зенит 90.583333
тогда расчет 90 - 90.583333
дает точно такую же константу -35/60 == -.583333
что мы видели ранее, объясняя, почему использование этого конкретного значения дает вам такие же результаты. Во-вторых, это 90 - zenith
это солнечный угол места а также горизонтальный параллакс. Взяв эти записи вместе, я предполагаю, что вычитание объясняет форму сплющенного сфероида Земли более точно, чем постоянная. Однако мне не ясно, что обобщенное уравнение допускает это.
Поэтому я бы рекомендовал использовать date_sun_info
для расчетов, где вам нужно согласованность с другими источниками.
Однако есть и разница, когда дело доходит до сумерек, и я не вижу существенной разницы в исходном коде между ними. Сумерки определяются как момент, когда геометрический центр Солнца проходит под углом 6/12/18 градусов под горизонтом, поэтому солнечный диск не должен учитываться. И sun_info, и восход солнца используют -6.0 для высоты, но результаты немного отличаются.