Este repositorio contiene el código fuente para una biblioteca de funciones cargables de MySQL (anteriormente llamada UDF - Funciones definidas por el usuario), que proporciona una función adicional SQL Astrononmy para obtener información de Astro Sun y Moon para una ubicación y hora geográficas determinadas.
Los cálculos se basan en una adaptación de la clase de astronomía C ++ de ESP32-Astronomie.
Si te gusta lib_mysqludf_astro , dale una estrella o la bifurca:
Desde la ejecución del directorio base:
make clean
make
sudo make installEsto construirá e instalará el archivo de la biblioteca.
Para crear una versión específica del país, llame al comando hacer el parámetro lang = -dlang_xx, donde xx es el código de país: de = alemán, es = español, fr = francés, italiano, nl = Países Bajos, en = inglés (predeterminado).
Ejemplo: crear e instalar un uso binario holandés
make clean
make LANG=-DLANG_NL
sudo make install Finalmente, activamos la función cargable en MySQL Server (reemplace username por un usuario local de MySQL que tiene el permiso para crear funciones, por ejemplo, root)
mysql -u username -p < install.sqlPara desinstalar primero la función cargable dentro de su servidor MySQL utilizando las consultas SQL:
DROP FUNCTION IF EXISTS astro_info;
DROP FUNCTION IF EXISTS astro;Luego desinstale la biblioteca usando la línea de comandos:
sudo make uninstallDevuelve la información Astro para la fecha dada, la geolocalización y la zona horaria como cadena JSON.
Una fecha válida dada en el formato 'YYYY-MM-DD HH: MM: SS'. Las fechas no válidas dan como resultado un valor nulo.
Posición norte -sur de un punto en formato de grados
Posición este-oeste de un punto en formato de grados
Compensación de zona horaria de UTC en horas
La función devuelve la información Astro como cadena JSON con las siguientes teclas:
| Llave json | Descripción | Formato/unidad |
|---|---|---|
| $. | Fecha para el resultado dado | 'Aaa yyy-mm-ddthh: mm: ss' |
| $ .Zona | Compensación de zona horaria de UTC en horas | hora |
| $. .Latitud | Latitud geográfica | grados |
| $. | Longitud geográfica | grados |
| $ .deltat | deltat | decimal |
| $ .Juliandate | Cita juliana | decimal |
| $ .Gmst | Tiempo sideral de Greenwich | 'HH: MM: SS' |
| $ .Lmst | Tiempo sideral local | 'HH: MM: SS' |
| $ .Sun.distance.earth | Distancia al sol (Centro de la Tierra) | km |
| $ .Sun.distance.observer | Distancia al sol (desde el observador) | km |
| $ .Sun.eclíptico | Longitud eclíptica del sol | grados |
| $ .Sun.declination | Declinación del sol | grados |
| $ .Sun.azimut | Azimut del sol | grados |
| $ .Sun.Height | Altura del sol sobre el horizonte | grados |
| $ .Sun.diameter | Diámetro del sol | arco segundos |
| $ .Sun.rise.Astronomical | Astronómico | 'HH: MM: SS' |
| $ .Sun.rise.nautical | Amanecer náutico | 'HH: MM: SS' |
| $ .Sun.rise.civil | Amanecer civil | 'HH: MM: SS' |
| $ .Sun.rise.sunrise | Amanecer | 'HH: MM: SS' |
| $ .Sun.culmination | Culminación del sol | 'HH: MM: SS' |
| $ .Sun.set.sunset | Atardecer | 'HH: MM: SS' |
| $ .Sun.set.civil | Anochecer | 'HH: MM: SS' |
| $ .Sun.set.náutico | Anochecer | 'HH: MM: SS' |
| $ .Sun.set.Astronomical | Anochecer astronómico | 'HH: MM: SS' |
| $ .Sun.ascension | Ascensión derecha del sol | 'HH: MM: SS' |
| $ .Sun.zodiac | Zodíaco | Aries, Tauro, Géminis, Cáncer, Leo, Virgo, Libra, Escorpio, Sagitario, Capricornio, Acuario, Piscis |
| $ .Moon.distance.earth | Distancia a la luna (Centro de la Tierra) | km |
| $ .Moon.distance.observer | Distancia a la luna (desde el observador) | km |
| $ .Moon.ecliptic.latitude | Latitud eclíptica de la luna | grados |
| $ .Moon.ecliptic.longitude | Longitud eclíptica de la luna | grados |
| $ .Mon.declination | Declinación de la luna | grados |
| $ .Mon.azimut | Azimut de la luna | grados |
| $ .Moon.Height | Altura de la luna sobre el horizonte | grados |
| $ .Moon.diameter | Diámetro de la luna | arco segundos |
| $ .Mon.rise | Cría en la luna | 'HH: MM: SS' |
| $ .Mon.culmination | Culminación de la luna | 'HH: MM: SS' |
| $ .Mon.set | Lunar | 'HH: MM: SS' |
| $ .Mon.cension | Ascensión derecha de la luna | 'HH: MM: SS' |
| $ .Moon.phase.name | Nombre de fase lunar | Luna nueva, Crescent de depilación, primer trimestre, gibroso de ceras, luna llena, giboso menguante, tercer trimestre, creciente menguante |
| $ .Moon.phase.value | Fase lunar como índice | 0..7 |
| $ .Moon.phase.number | Edad de la luna en la luna nueva (0) - Luna llena (1) | decimal |
| $ .Moon.age | Edad de la luna en radianes | 0..359 |
| $ .Mon.sign | Signo de luna | Aries, Tauro, Géminis, Cáncer, Leo, Virgo, Libra, Escorpio, Sagitario, Capricornio, Acuario, Piscis |
Ejemplo:
{
"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 "
}
}Get Sun Rise/Set
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 ` ;devolución
+ -- -------------------+----------+----------+
| Time | Sunrise | Sunset |
+ -- -------------------+----------+----------+
| 2023 - 01 - 18T09: 00 : 00 | 08 : 44 : 23 | 16 : 58 : 02 |
+ -- -------------------+----------+----------+Obtener información sobre la luna
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 ` ;devolución
+ -- -------------------+----------+----------+-----------------+-------+
| Time | Moonrise | Moonset | Phase | % Age |
+ -- -------------------+----------+----------+-----------------+-------+
| 2023 - 01 - 18T09: 00 : 00 | 05 : 33 : 24 | 12 : 52 : 19 | Waning crescent | 86 |
+ -- -------------------+----------+----------+-----------------+-------+ Devuelve la información de la biblioteca como cadena JSON
Ejemplos:
> 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 |
+ -- ------------------+---------+----------------------+