Этот репозиторий содержит исходный код для библиотеки загружаемой функции MySQL (ранее называемой UDF - пользовательские функции), которая обеспечивает функцию Additonal SQL Astrononmy для получения информации Astro Sun и Moon для данного географического местоположения и времени.
Расчеты основаны на адаптации класса астрономии C ++ из ESP32-Astronomie.
Если вам нравится lib_mysqludf_astro , дайте ему звезду или разделите ее:
Из базового каталога запуска:
make clean
make
sudo make installЭто создаст и установит файл библиотеки.
Чтобы создать версию для конкретной страны, Call Make Coming с параметром lang = -dlang_xx, где xx-код страны: de = немецкий, ES = испанский, FR = французский, итальянец, nl = netherlands, en = английский (дефолт).
Пример: создать и установить голландское бинарное использование
make clean
make LANG=-DLANG_NL
sudo make install Наконец, мы активируем загружаемую функцию в MySQL Server (замените username локальным пользователем MySQL, который имеет разрешение на создание функций, например, root)
mysql -u username -p < install.sqlЧтобы удалить сначала деактивировать загружаемую функцию в вашем сервере MySQL, используя запросы SQL:
DROP FUNCTION IF EXISTS astro_info;
DROP FUNCTION IF EXISTS astro;Затем удалите библиотеку, используя командную строку:
sudo make uninstallВозвращает информацию Astro на дату, геолокацию и часовой пояс в качестве строки JSON.
Данная действующая дата в формате 'Yyyy-mm-dd HH: MM: SS'. Неверные даты приводят к нулевому значению.
Положение точки в север -юг точки в формате градусов
Положение в восточном западе точки в формате градусов
Смещение часового пояса от UTC в часы
Функция возвращает информацию Astro в качестве строки JSON со следующими ключами:
| JSON KEY | Описание | Формат/единица |
|---|---|---|
| $ .Time | Дата для данного результата | 'Yyyy-mm-ddthh: mm: ss' |
| $ .Zone | Смещение часового пояса от UTC в часы | час |
| $ .Latity | Географическая широта | градусы |
| $ | Географическая долгота | градусы |
| $ .deltat | Дельтат | Десятичный |
| $ .Juliandate | Джулиан Дата | Десятичный |
| $ .Gmst | Гринвич Сидерил Время | 'HH: MM: SS' |
| $ .Lmst | Местное сидеревое время | 'HH: MM: SS' |
| $ .Sun.distance.earth | Расстояние до солнца (Центр Земли) | км |
| $ .Sun.distance.observer | Расстояние до солнца (от наблюдателя) | км |
| $ .Sun.ecliptic | Эклиптическая длина солнца | градусы |
| $ .Sun.clination | Склонение солнца | градусы |
| $ .Sun.azimuth | Азимут солнца | градусы |
| $ .Sun.height | Высота солнца над горизонтом | градусы |
| $ .Sun.diameter | Диаметр солнца | дуговые секунды |
| $ .Sun.rise.astronomical | Астрономический рассвет | 'HH: MM: SS' |
| $ .Sun.rise.nautical | Морской рассвет | 'HH: MM: SS' |
| $ .Sun.rise.civil | Гражданский рассвет | 'HH: MM: SS' |
| $ .Sun.rise.sunrise | Восход | 'HH: MM: SS' |
| $ .Sun.culmination | Кульминация солнца | 'HH: MM: SS' |
| $ .Sun.set.sunset | Закат | 'HH: MM: SS' |
| $ .Sun.set.civil | Гражданский сумерк | 'HH: MM: SS' |
| $ .Sun.set.nautical | Морские сумерки | 'HH: MM: SS' |
| $ .Sun.set.astronomical | Астрономический сумерки | 'HH: MM: SS' |
| $ .Sun.ascension | Правильное восхождение на солнце | 'HH: MM: SS' |
| $ .Sun.zodiac | Зодиак | Овен, Телец, Близнецы, Рак, Лео, Дева, Весы, Скорпион, Стрелец, Козерог, Водолей, Рыбы |
| $ .Moon.distance.earth | Расстояние до Луны (Центр Земли) | км |
| $ .Moon.distance.observer | Расстояние до Луны (от наблюдателя) | км |
| $ .Moon.ecliptic.latitude | Эклиптическая широта луны | градусы |
| $ .Moon.ecliptic.longity | Эклиптическая долгота луны | градусы |
| $ .Moon.clination | Склонение Луны | градусы |
| $ .Moon.azimuth | Азимут луны | градусы |
| $ .Moon.height | Высота луны над горизонтом | градусы |
| $ .Moon.diameter | Диаметр луны | дуговые секунды |
| $ .Moon.rise | Луна | 'HH: MM: SS' |
| $ .Moon.culmination | Кульминация луны | 'HH: MM: SS' |
| $ .Moon.set | Мунсет | 'HH: MM: SS' |
| $ .Moon.ascension | Правильное восхождение на луну | 'HH: MM: SS' |
| $ .Moon.phase.name | Луновое имя | Новолуние, восковая полумесяца, первая четверть, восковая гиббус, полнолуние, убывающаяся гиббус, третья четверть, убывающий полумесяц |
| $ .Moon.phase.value | Луна фаза в качестве индекса | 0..7 |
| $ .Moon.phase.number | Возраст Луны в новолуничестве (0) - Полнолуние (1) | Десятичный |
| $ .Moon.age | Возраст луны в радианах | 0..359 |
| $ .Moon.sign | Лунный знак | Овен, Телец, Близнецы, Рак, Лео, Дева, Весы, Скорпион, Стрелец, Козерог, Водолей, Рыбы |
Пример:
{
"Time" : " 2023-01-18T09:00:00 " ,
"Zone" : 1 ,
"Latitude" : 53.182153 ,
"Longitude" : 4.854429 ,
"deltaT" : 65 ,
"JulianDate" : 2459962.83333 ,
"GMST" : " 15:49:54 " ,
"LMST" : " 16:09:19 " ,
"Sun" : {
"Distance" : {
"Earth" : 147182898.6 ,
"Observer" : 147182769.4
},
"Ecliptic" : 297.968 ,
"Declination" : -20.565 ,
"Azimuth" : 127.65 ,
"Height" : 1.5 ,
"Diameter" : 32.51 ,
"Rise" : {
"Astronomical" : " 06:39:38 " ,
"Nautical" : " 07:21:00 " ,
"Civil" : " 08:04:22 " ,
"Sunrise" : " 08:44:23 "
},
"Culmination" : " 12:50:58 " ,
"Set" : {
"Sunset" : " 16:58:02 " ,
"Civil" : " 17:38:04 " ,
"Nautical" : " 18:21:28 " ,
"Astronomical" : " 19:02:52 "
},
"Ascension" : " 20:00:14 " ,
"Zodiac" : " Capricorn "
},
"Moon" : {
"Distance" : {
"Earth" : 370620.2 ,
"Observer" : 369274.6
},
"Ecliptic" : {
"Latitude" : -2.528 ,
"Longitude" : 248.606
},
"Declination" : -25.195 ,
"Azimuth" : 176.16 ,
"Height" : 12 ,
"Diameter" : 32.24 ,
"Rise" : " 05:33:24 " ,
"Culmination" : " 09:17:17 " ,
"Set" : " 12:52:19 " ,
"Ascension" : " 16:25:58 " ,
"Phase" : {
"Name" : " Waning crescent " ,
"Value" : 7 ,
"Number" : 0.174
},
"Age" : 310.737 ,
"Sign" : " Sagittarius "
}
}Получить солнце встать/сет
SET @ts = NOW();
SET @latitude = 53 . 182153 ;
SET @longitude = 4 . 854429 ;
SET @timezone = TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), NOW());
SELECT
JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Time ' ) AS ` Time ` ,
JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Sun.Rise.Sunrise ' ) AS ` Sunrise ` ,
JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Sun.Set.Sunset ' ) AS ` Sunset ` ;возврат
+ -- -------------------+----------+----------+
| Time | Sunrise | Sunset |
+ -- -------------------+----------+----------+
| 2023 - 01 - 18T09: 00 : 00 | 08 : 44 : 23 | 16 : 58 : 02 |
+ -- -------------------+----------+----------+Получите информацию о луне
SET @ts = NOW();
SET @latitude = 53 . 182153 ;
SET @longitude = 4 . 854429 ;
SET @timezone = TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), NOW());
SELECT
JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Time ' ) AS ` Time ` ,
JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Moon.Rise ' ) AS ` Moonrise ` ,
JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Moon.Set ' ) AS ` Moonset ` ,
JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Moon.Phase.Name ' ) AS ` Phase ` ,
ROUND(CAST(JSON_VALUE(astro(@ts, @latitude, @longitude, @timezone), ' $.Moon.Age ' ) AS FLOAT) / 3 . 6 , 0 ) AS ` % Age ` ;возврат
+ -- -------------------+----------+----------+-----------------+-------+
| Time | Moonrise | Moonset | Phase | % Age |
+ -- -------------------+----------+----------+-----------------+-------+
| 2023 - 01 - 18T09: 00 : 00 | 05 : 33 : 24 | 12 : 52 : 19 | Waning crescent | 86 |
+ -- -------------------+----------+----------+-----------------+-------+ Возвращает информацию о библиотеке как строка json
Примеры:
> SELECT
JSON_UNQUOTE(JSON_VALUE(astro_info(), ' $.Name ' )) AS Name,
JSON_UNQUOTE(JSON_VALUE(astro_info(), ' $."Version" ' )) AS Version,
JSON_UNQUOTE(JSON_VALUE(astro_info(), ' $."Build" ' )) AS Build;
+ -- ------------------+---------+----------------------+
| Name | Version | Build |
+ -- ------------------+---------+----------------------+
| lib_mysqludf_astro | 1 . 0 . 0 | Jan 18 2023 09 : 00 : 00 |
+ -- ------------------+---------+----------------------+