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 中添加包
https://github.com/joerup/SwiftSPICE.git
将 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)")
SwiftSPICE 是为 Planetaria 创建的,Planetaria 是我开发的沉浸式太阳系模拟器应用程序。 SwiftSPICE 通过将 NASA 的 SPICE 工具包集成到 Swift 原生环境中,为 Planetaria 的星历计算提供支持,让您可以实时以及在过去或未来看到行星轨道。