044f2f4381
- 新增半解析、旧模型、自定义与多源堆叠星历实例,提供 Context、Instance、SPK 读取及状态与视位置计算 - 统一太阳、月球和行星实例接口,扩展黄经穿越、留、相位、最近角距、偕日可见、任意高度升落、轨道节点及凌日等天象查询 - 完善日月食、月掩与凌日的月缘剖面、有限盘面接触、站心修正、局地可见性、全球路径和地图输出 - 新增 SVG、GeoJSON、KML 天象输出及凌日、月掩和月缘地形相关缓存与几何求解 - 新增恒星星表导入与查询,支持 CSV、Hipparcos、BSC5、Stellarium 等格式及名称、交叉标识、锥面检索和星等过滤 - 补充 IAU 2006、地球定向、折射消光、大气观测、轨道传播及半解析行星/月球数据支持 - 将默认未来民用时标切换为 TimeScaleLeapHour,更新 2027–2400 农历速查表、中文日期解析和时区边界处理 - 增加事件基线、跨模型回归、几何边界、月缘地形和输出契约测试,完善中英文手册、示例资源、NOTICE 与忽略规则
101 lines
3.9 KiB
Go
101 lines
3.9 KiB
Go
package astro
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"b612.me/astro/internal/ephem"
|
|
)
|
|
|
|
// Instance 显式星历实例,不改变进程默认模型 / explicit ephemeris instance independent of the process default.
|
|
type Instance = ephem.Instance
|
|
|
|
// Engine 只读 ICRF 几何星历,位置 km、速度 km/日,历元 TDB / read-only ICRF ephemeris in km and km/day at TDB epochs.
|
|
type Engine = ephem.Engine
|
|
|
|
// Stack 按顺序叠加多个只读星历引擎 / ordered stack of read-only ephemeris engines.
|
|
type Stack = ephem.Stack
|
|
|
|
// ApparentEngine 可选的地心 ICRF 单位视方向能力,历元 TT / optional apparent geocentric ICRF unit directions at TT epochs.
|
|
type ApparentEngine = ephem.ApparentEngine
|
|
|
|
// Body NAIF 天体编号 / NAIF body identifier.
|
|
type Body = ephem.Body
|
|
|
|
const (
|
|
// BodySSB 太阳系质心 / solar system barycenter.
|
|
BodySSB = ephem.SSB
|
|
// BodyMercury 水星 / Mercury.
|
|
BodyMercury = ephem.Mercury
|
|
// BodyVenus 金星 / Venus.
|
|
BodyVenus = ephem.Venus
|
|
// BodyEMB 地月质心 / Earth-Moon barycenter.
|
|
BodyEMB = ephem.EMB
|
|
// BodyMars 火星 / Mars.
|
|
BodyMars = ephem.Mars
|
|
// BodyJupiter 木星 / Jupiter.
|
|
BodyJupiter = ephem.Jupiter
|
|
// BodySaturn 土星 / Saturn.
|
|
BodySaturn = ephem.Saturn
|
|
// BodyUranus 天王星 / Uranus.
|
|
BodyUranus = ephem.Uranus
|
|
// BodyNeptune 海王星 / Neptune.
|
|
BodyNeptune = ephem.Neptune
|
|
// BodySun 太阳 / Sun.
|
|
BodySun = ephem.Sun
|
|
// BodyMoon 月球 / Moon.
|
|
BodyMoon = ephem.Moon
|
|
// BodyEarth 地球 / Earth.
|
|
BodyEarth = ephem.Earth
|
|
)
|
|
|
|
// EphemerisModel 内置或自定义星历模型标识 / built-in or custom ephemeris model identifier.
|
|
type EphemerisModel = ephem.Model
|
|
|
|
const (
|
|
// EphemerisLegacy 旧级数模型 / legacy series model.
|
|
EphemerisLegacy = ephem.Legacy
|
|
// EphemerisSemianalytic 半解析模型 / semi-analytic model.
|
|
EphemerisSemianalytic = ephem.Semianalytic
|
|
// EphemerisCustom 自定义几何引擎 / custom geometric engine.
|
|
EphemerisCustom = ephem.Custom
|
|
)
|
|
|
|
var (
|
|
// ErrEphemerisOutOfRange 超出星历覆盖 / epoch outside ephemeris coverage.
|
|
ErrEphemerisOutOfRange = ephem.ErrOutOfRange
|
|
// ErrEphemerisUnsupportedBody 引擎不含该天体 / body not provided by the engine.
|
|
ErrEphemerisUnsupportedBody = ephem.ErrUnsupportedBody
|
|
// ErrEphemerisNoEngine 实例没有几何引擎 / instance has no geometric engine.
|
|
ErrEphemerisNoEngine = ephem.ErrNoEngine
|
|
// ErrEphemerisUnsupportedApparent 引擎不提供视位置 / apparent positions are unsupported.
|
|
ErrEphemerisUnsupportedApparent = ephem.ErrUnsupportedApparent
|
|
// ErrUnknownModel 模型不是本函数接受的模型 / model is not accepted by this function.
|
|
ErrUnknownModel = errors.New("astro: unknown or unsupported ephemeris model")
|
|
// ErrInvalidEngine 引擎个数或取值不符合模型要求 / engine count or value does not fit the model.
|
|
ErrInvalidEngine = errors.New("astro: invalid ephemeris engine")
|
|
)
|
|
|
|
// NewInstance 创建显式自定义星历实例 / create an explicit custom ephemeris instance.
|
|
func NewInstance(engine Engine) *Instance {
|
|
return ephem.NewInstance(engine)
|
|
}
|
|
|
|
// NewStack 创建多源星历,先传入的引擎优先 / creates a multi-source ephemeris; earlier engines have priority.
|
|
func NewStack(engines ...Engine) *Stack {
|
|
return ephem.NewStack(engines...)
|
|
}
|
|
|
|
// NewStackInstance 创建使用多源星历的显式实例 / creates an explicit instance backed by multiple ephemeris sources.
|
|
func NewStackInstance(engines ...Engine) *Instance {
|
|
return ephem.NewInstance(ephem.NewStack(engines...))
|
|
}
|
|
|
|
// NewModelInstance 创建内置模型实例,非内置模型(含 EphemerisCustom)返回 ErrUnknownModel;旧模型目前仅支持标量入口 /
|
|
// create a built-in model instance; non-built-in models including EphemerisCustom return ErrUnknownModel.
|
|
func NewModelInstance(model EphemerisModel) (*Instance, error) {
|
|
if model != EphemerisLegacy && model != EphemerisSemianalytic {
|
|
return nil, ErrUnknownModel
|
|
}
|
|
return ephem.NewModelInstance(model), nil
|
|
}
|