SwiftSPICE

SwiftSPICE 是一个 Swift 包,它为 NASA 的 SPICE 工具包 提供了一个 Swift 原生接口。

SPICE 工具包由 NASA 的导航和辅助信息设施 (NAIF) 开发,广泛用于空间科学和工程应用。 SwiftSPICE 使您可以轻松地将这些强大的功能直接集成到基于 Swift 的应用程序和模拟中。

要使用 SwiftSPICE,您需要加载 SPK(航天器和行星内核)文件,其中包含天体历表数据。


设置

SwiftSPICE 添加到您的 Swift 项目

在您的 Package.swift 文件中,添加以下依赖项

dependencies: [
    .package(url: "https://github.com/joerup/SwiftSPICE.git", from: "2.0.0")
]

或者,直接在 Xcode 中添加包


用法

SwiftSPICE 导入到 Swift 文件中

import SwiftSPICE

在执行任何计算之前,加载必要的 SPICE 内核。 从 SPK 文件(例如,de430.bsp)和闰秒文件(例如,naif0012.tls)加载

if let kernelURL = Bundle.main.url(forResource: "de430", withExtension: "bsp") {
    try SPICE.loadKernel(kernelURL.path)
}
if let leapsecondKernelURL = Bundle.main.url(forResource: "naif0012", withExtension: "tls") {
    try SPICE.loadKernel(leapsecondKernelURL.path)
}

加载内核后,您可以直接访问 SPICE 函数。 例如,要获取相对于太阳系质心(ID 0)的地球质心(ID 3)的状态向量(位置和速度)和光行时

let (stateVector, lightTime) = try SPICE.getState(target: 3, reference: 0)
// or, using names:
let (stateVector, lightTime) = try SPICE.getState(target: "Earth Barycenter", reference: "Solar System Barycenter")

完成后,卸载内核以释放内存并避免冲突

try SPICE.clearKernels()

例子

计算 2025-01-01木星质心(ID 5)到太阳(ID 10)的距离

let date = Calendar.current.date(from: DateComponents(year: 2025, month: 1, day: 1))!
let (stateVector, _) = try SPICE.getState(target: 5, reference: 10, time: date)
print(stateVector.distance)

查找 2024-04-08 下午 2:30:00 EDT月球相对于地球的速度

let date = Calendar.current.date(from: DateComponents(timeZone: TimeZone(abbreviation: "EDT"), year: 2024, month: 4, day: 8, hour: 14, minute: 30, second: 0))!
let (stateVector, _) = try SPICE.getState(target: "Moon", reference: "Earth", time: date)
print(stateVector.speed)

获取金星(ID 2)相对于水星(ID 1)在黄道坐标系中的当前 XYZ 位置和速度

let (stateVector, _) = try SPICE.getState(target: 2, reference: 1, frame: .eclipticJ2000) 
print("\(stateVector.x) \(stateVector.y) \(stateVector.z)")
print("\(stateVector.vx) \(stateVector.vy) \(stateVector.vz)")

获取土星质心相对于太阳的当前状态和光行时,并进行光行时校正

let (stateVector, lightTime) = try SPICE.getState(target: "Saturn Barycenter", reference: "Sun", abcorr: .lightTime)
print("\(stateVector) \(lightTime)")

Planetaria

SwiftSPICE 是为 Planetaria 创建的,Planetaria 是我开发的沉浸式太阳系模拟器应用程序。 SwiftSPICE 通过将 NASA 的 SPICE 工具包集成到 Swift 原生环境中,为 Planetaria 的星历计算提供支持,让您可以实时以及在过去或未来看到行星轨道。

在 App Store 上下载

Header Image