Skip to content

Introduce Topocentric reference frame#145

Merged
rhannequin merged 2 commits intomainfrom
topocentric-frame
Mar 7, 2025
Merged

Introduce Topocentric reference frame#145
rhannequin merged 2 commits intomainfrom
topocentric-frame

Conversation

@rhannequin
Copy link
Owner

This is supposedly the final reference frame needed for a full conversion of raw vectors from an ephemeris into the actual location of an object in the sky as an observer on Earth.

Topocentric represents the position of a celestial object from a geographic location on Earth. The geographic location is represented by the already existing Astronoby::Observer.

As the other reference frames, it supports the state methods position and velocity, the distance method, and the coordinates methods equatorial and ecliptic. But it also supports, and it is the only reference frame to do so, the coordinates method horizontal to access the azimuth and altitude of the object on the celestial sphere.

At the moment, the atmospheric refraction is not supported and horizontal only returns the position in a theoretical air-less world. While it is not affecting the azimuth, and has a noticeable effect mainly on objects appearing close to the local horizon, it will be supported soon, to have the true and apparent horizontal coordinates.

There might still be some small adjustments to increase even further the precision, but these are supposed to only impact precision on milli-arcseconds. They will, or will not, be implemented later:

  • there might be an additional equation of the equinoxes for computing the Greenwich Apparent Sidereal Time
  • delta_t, the difference between Universal Time and Terrestrial Time, might not be up-to-date
  • the conversion between J2000 and ICRF reference frames is not implemented

How to use it

instant = Astronoby::Instant.from_time(Time.utc(2025, 2, 7, 6))
ephem = Astronoby::Ephem.load("de440s.bsp")

observer = Astronoby::Observer.new(
  latitude: Astronoby::Angle.from_degrees(1.364917),
  longitude: Astronoby::Angle.from_degrees(103.822872),
  elevation: Astronoby::Distance.from_meters(15)
)
sun = Astronoby::Sun.new(instant: instant, ephem: ephem)

topocentric = observer.observe(sun)
# or, sun.observed_by(observer)

topocentric.equatorial.right_ascension.str(:hms)
# => "21h 24m 33.3293s"

topocentric.equatorial.declination.str(:dms)
# => "-15° 13′ 3.5273″"

topocentric.horizontal.azimuth.str(:dms)
# => "+211° 11′ 5.3327″"

topocentric.horizontal.altitude.str(:dms)
# => "+70° 32′ 19.6073″"

@rhannequin rhannequin self-assigned this Mar 5, 2025
@rhannequin rhannequin marked this pull request as ready for review March 6, 2025 16:07
@rhannequin rhannequin merged commit 53a8c9f into main Mar 7, 2025
37 checks passed
@rhannequin rhannequin deleted the topocentric-frame branch March 7, 2025 09:35
@rhannequin rhannequin mentioned this pull request Apr 30, 2025
rhannequin added a commit that referenced this pull request May 12, 2025
## 0.7.0 - 2025-05-12

_If you are upgrading: please see [UPGRADING.md]._

### Bug fixes

* Fix Moon monthly phase events calculation by @valeriy-sokoloff in ([#124])

### Features

* Add `Instant` value object ([#121])
* Introduce barycentric position of Solar System major bodies ([#127])
* Introduce Astrometric position for planets ([#129])
* Rename Barycentric into Geometric ([#130])
* Rename IRCF and remove module Position ([#131])
* Geometric and Astrometric reference frames with coordinates ([#132])
* Ecliptic coordinates for Geometric and Astrometric reference frames ([#134])
* Add Geometric and Astrometric positions for `Sun` and `Moon` ([#135])
* Implement new aberration correction ([#136])
* Precession matrix for 2006 P03 model ([#137])
* Introduce `MeanOfDate` reference frame ([#138])
* New nutation model ([#141])
* Light deflection correction ([#142])
* Introduce `Apparent` reference frame ([#143])
* Introduce `Topocentric` reference frame ([#145])
* Improve Vector integration with value objects ([#146])
* Handle refracted topocentric horizontal coordinates ([#147])
* Add `#angular_diameter` to apparent and topocentric reference frames ([#149])
* Introduce new calculator for rising, transit and setting times ([#148])
* Clean code after Ephem refactoring ([#152])
* Improve `RisingTransitSettingEventsCalculator` ([#155])
* Simplify `RisingTransitSettingEventsCalculator` ([#156])
* Lazy-load reference frames ([#157])
* Overall performance improvements ([#163])
* Add support for IMCCE INPOP by @JoelQ and @rhannequin ([#166])
* Update INPOP excerpt in spec data ([#167])
* Introduce a better rise/transit/set calculator ([#168])
* Drop `Astronoby::Observer#observe` ([#174])

### Improvements

* Bump standard from 1.42.1 to 1.49.0 by @dependabot ([#123], [#128], [#150], [#165])
* Bump rubyzip from 2.3.2 to 2.4.1 by @dependabot ([#120])
* Add more tests for Julian Date conversion ([#122])
* Upgrade main Ruby version and supported ones ([#125])
* Update email address and gem description ([#126])
* Increase precision of mean obliquity ([#133])
* Add supported Rubies ([#139])
* Set Ruby 3.4.2 as default version ([#140])
* Fix dependency secutiry patch ([#151])
* Improve HMS/DMS formats ([#153])
* Use excerpts ephemerides for specs of Sun and Moon ([#154])
* Add link to deprecated documentation ([#160])
* Default Ruby 3.4.3 and support recent rubies ([#169])
* Better Moon phases test coverage ([#172])
* Optimize Observer with GMST from Instant ([#173])
* Update README about documentation location ([#175])
* Add GitHub Actions permissions ([#176])

### New Contributors

* @valeriy-sokoloff made their first contribution in #124
* @JoelQ made their first contribution in #166

**Full Changelog**: v0.6.0...v0.7.0

[#120]: #120
[#121]: #121
[#122]: #122
[#123]: #123
[#124]: #124
[#125]: #125
[#126]: #126
[#127]: #127
[#128]: #128
[#129]: #129
[#130]: #130
[#131]: #131
[#132]: #132
[#133]: #133
[#134]: #134
[#135]: #135
[#136]: #136
[#137]: #137
[#138]: #138
[#139]: #139
[#140]: #140
[#141]: #141
[#142]: #142
[#143]: #143
[#145]: #145
[#146]: #146
[#147]: #147
[#148]: #148
[#149]: #149
[#150]: #150
[#151]: #151
[#152]: #152
[#153]: #153
[#154]: #154
[#155]: #155
[#156]: #156
[#157]: #157
[#160]: #160
[#163]: #163
[#165]: #165
[#166]: #166
[#167]: #167
[#168]: #168
[#169]: #169
[#172]: #172
[#173]: #173
[#174]: #174
[#175]: #175
[#176]: #176
[UPGRADING.md]: https://github.com/rhannequin/astronoby/blob/main/UPGRADING.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant