I'm developing a telescope controller open-source application. I started this project with a very little knowledge of Astronomy. Basically, the app is going to send data to telescope over a wireless connection.
Data of the celestial object is as follow:
["SAO#": 308,
"HD": 8890,
"Con": "Alpha Ursae Minoris",
"StarName": "Polaris",
"RAH": 2,
"RAM": 31.812,
"DED": 89,
"DEM": 15.85,
"Mag": 2.02,
"PRA": 0.038,
"PDec": -0.015]
RAH = RA hours, RAM = RA minutes,
DED = Dec degrees, DEM = Dec minutes
(PRA and PDec are the drift of the star in arc-seconds per year (from the catalog Epoch J2000.0). I don't need to use these in the app, that I'm told.)
The controller server (data receiver) accepts in this format:
Set target RA- HH:MM:SS,
Set target Dec- DD:MM:SS,
Set target Azm- DDD:MM:SS,
Set target Alt- DD:MM:SS
I would want to convert the given celestial object data to Ra, Dec, Azm, Alt.
I'm told that:
RA = ((RAH + (RAM / 60.0)) * 15.0); //in degrees, RA is an earthly longitude projected onto the sky
DEC = (DED + (DEM / 60.0)); //in degrees, Dec is an earthly latitude projected onto the sky
For a star or other celestial object from the catalogs they have a fixed Epoch (J2000.) I need to apply a correction for precession/nutation (wobble of the Earth's axis of rotation) to get a half decent estimate of the star's RA/Dec "now".
I'm using a code library that seems to have support for this and does the calculation on it own.
I would want to know the procedure of the data conversion from equatorial coordinates to horizontal including.
For an instance this is how the code works:
let jd = Date().julianDay
let RAH = 2.0
let RAM = 31.812
let DED = 89.0
let DEM = 15.85
let eqCoor = EquatorialCoordinates.init(rightAscension: Hour((RAH+(RAM/60.0))*15.0), declination: (Degree(DED+(DEM/60.0))), epoch: Epoch.J2000, equinox: Equinox.standardJ2000)
let annualAbb = eqCoor.correctedForAnnualAberration(julianDay: jd, highPrecision: true)
let initEQ = AstronomicalObject.init(name: "Polaris", coordinates: annualAbb, julianDay: jd, highPrecision: true)
print("EquatorialCoordinates -> RA(α):", initEQ.equatorialCoordinates.alpha, "DEC(δ):", initEQ.equatorialCoordinates.delta)
let userLocation = GeographicCoordinates(positivelyWestwardLongitude: Degree(.plus, 75, 51, 13.65), latitude: Degree(.plus, 30, 54, 43.55), altitude: 256)
print("User Location -> Latitude:", userLocation.latitude, "Longitude:", userLocation.longitude)
let preccCoor = annualAbb.precessedCoordinates(to: Equinox.standardJ2000)
let horizontalCoor = preccCoor.makeHorizontalCoordinates(for: userLocation, at: jd)
print("Horizontal Coordinates -> Azimuth:", horizontalCoor.azimuth.inHours, "Altitude:", horizontalCoor.altitude.inRadians.inDegrees)
This is the data that code returns:
EquatorialCoordinates -> RA(α): +37h56m06.009s DEC(δ): +89°16'05.165"
User Location -> Latitude: +30°54'43.550" Longitude: +75°51'13.650"
Horizontal Coordinates -> Azimuth: +12h1m07.396s Altitude: +30°13'16.650"
Here's the data from Stellarium according to the same location as my code.
The data calculated from my code is not even close to the one from Stellarium except apparent altitude.