36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
|
|
package basic
|
||
|
|
|
||
|
|
import (
|
||
|
|
"b612.me/astro/internal/ephem"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Instance 显式只读星历实例 / explicit read-only ephemeris instance.
|
||
|
|
type Instance = ephem.Instance
|
||
|
|
|
||
|
|
// EphemerisModel 几何位置所用的星历模型 / ephemeris model behind geometric positions.
|
||
|
|
type EphemerisModel int
|
||
|
|
|
||
|
|
const (
|
||
|
|
// EphemerisLegacy VSOP87 + ELP2000 截断级数,astro_legacy 构建下为默认 / truncated VSOP87 and ELP2000 series, default under astro_legacy.
|
||
|
|
EphemerisLegacy EphemerisModel = iota
|
||
|
|
// EphemerisSemianalytic VSOP2013/TOP2013 + ELP/MPP02 结构、按 DE441 重拟的半解析表 / semi-analytic tables refitted to DE441.
|
||
|
|
EphemerisSemianalytic
|
||
|
|
)
|
||
|
|
|
||
|
|
// SetEphemerisModel 切换全局星历模型,未知值返回 false / switches the global ephemeris model; unknown values return false.
|
||
|
|
func SetEphemerisModel(m EphemerisModel) bool {
|
||
|
|
if m != EphemerisLegacy && m != EphemerisSemianalytic {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
// 依赖星历的缓存都按 ΔT 世代校验,切换时一并递增。
|
||
|
|
deltaTFnMu.Lock()
|
||
|
|
if ephem.SetActive(ephem.Model(m)) {
|
||
|
|
deltaTGeneration++
|
||
|
|
}
|
||
|
|
deltaTFnMu.Unlock()
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetEphemerisModel 当前星历模型 / the active ephemeris model.
|
||
|
|
func GetEphemerisModel() EphemerisModel { return EphemerisModel(ephem.Active()) }
|