SwiftAA • aa-js • QLFits • FITSImporter • ObjCFITSIO
SwiftAA(以及 ObjCAA)
最全面的准确天文算法集合,提供 C++、Objective-C 和 Swift,全部在一个地方。
(可通过所有分发机制获取:Swift 包管理器、CocoaPods 和 Carthage。)
其他实现:JavaScript(aa-js),C#(AASharp)。
在下面的注释中查看 ObjCAA 和 SwiftAA 之间的区别。
描述
SwiftAA 提供了您构建我们的太阳系所需的一切,包括计算季节长度、月亮相、确定升起、穿过和落下时间、获取大型行星月亮的位置、转换坐标、确定行星的物理细节、光照、距离等。具有专业级精度。
strong>SwiftAA 已在产品应用中使用。特别是,MeteorActive,一个精心制作的 iOS 应用,旨在获取有关流星的所有信息。
SwiftAA 是首先由 P.J. Naughter 根据 Jean Meeus 的参考教科书《天体算法》(第2版)在 C++ 实现的 Objective-C(++) 层构建的。此 C++ 库称为 AA+(见下文)。AA+ 还包括 VSOP87 框架的附加算法,并支持完整的 ELP/MPP02 理论。因此,SwiftAA,得益于 AA+,是 Swift 中关于天文学事物的最完整、最精确的算法集合。
但 SwiftAA 提供了更现代且阅读性更强的 API,充分利用 Swift 的表达性及其各种语法元素,使其使用起来既轻松又愉快。事实上,没有 AA 书的话,您根本无法使用 AA+。而 SwiftAA 的目标正是使任何人都能轻松访问。添加了更多功能和算法,以进一步提高完整性和易用性。特别是,SwiftAA 提供了比 C++ API 更强的 单位安全性。
此外,SwiftAA 的单元测试覆盖率极高(Swift 代码 >=90%!)。事实上,单元测试是使用来自 Jean Meeus 的教科书、AA+ 的自测试、USNO、SkySafari 和 Xephem(并尝试在来源之间实现可能的假设一致性)的数据仔细编写的。
文档
从代码本身生成的文档可在 http://onekiloparsec.github.io/SwiftAA 查找。
安装
使用 Swift 包管理器:通过 Xcode > 文件 > Swift 包 > 添加依赖... 并输入此仓库 URL(包括 .git
扩展名),然后选择 SwiftAA
目标。或者在你 Package.swift
文件的 dependencies
部分中添加这条线 .package(url: "https://github.com/onekiloparsec/SwiftAA.git", from: "2.2.2")
。
使用 Carthage:将 github "onekiloparsec/SwiftAA"
添加到你的 Cartfile
,然后运行 carthage update
,最后将新构建的 SwiftAA-macOS.framework
或 SwiftAA-iOS.framework
添加到你的项目中(在 嵌入式二进制
中)。
使用 CocoaPods:在你的 Podfile
中添加 pod 'SwiftAA'
,或 pod 'ObjCAA'
,然后运行 pod update
。
笔记
ObjCAA
长期以来,所有的C++、Objective-C++和Swift代码都被捆绑在一起。但是为了通过SPM分发SwiftAA,有必要将源代码分为单独的文件夹。然后,在Package.swift
文件中声明了三个不同的库,并单独构建,每个都依赖于前一个(AA+
,然后是ObjCAA
,最后是SwiftAA
)。
在这个演变过程中,我们选择在Xcode项目中创建一个特定的ObjCAA
目标。结果是ObjCAA
必须导入到需要它的SwiftAA
源文件中。这不是什么大问题,除了Cocoapods不了解这个细节。因此,我们创建了一个特定的ObjCAA
pod,它将遵循主包的版本号。
总结一下,我们有
- 通过Swift Package Manager提供的三个目标:
AA+
、ObjCAA
和SwiftAA
。只嵌入你在项目中打算使用的最后一个级别。 - 通过Carthage在Xcode项目中可用的三个目标:
ObjCAA
(包括AA+
)、SwiftAA-iOS
和SwiftAA-macOS
。 - 通过Cocoapods提供的两个pod:
ObjCAA
和SwiftAA
。
AA+
AA+框架是由PJ Naughter(Visual C++ MVP)编写的C++,无疑是“天文学算法”在Jean Meeus参考教科书中的最佳和最完整实现。为了充分利用这段代码,你需要有一本这本书的副本(在没有了解它们所指的内容的情况下,API和方法名称很难理解)。
仅接受关于Objective-C(++)和Swift代码的拉取请求。AA+代码的更改必须指向原始源(见AA+网站)。
SwiftAA中使用的AA+当前版本为2.44(发布于2022年7月14日)。
坐标注意事项
坐标计算对于现代天文学至关重要。然而,在Jean Meeus的教科书中没有提及现代协议(如ICRS),因此AA+代码中也没有提及。在此改进之前,任何想要计算坐标转换的用户都应小心谨慎。有关此类转换的完整实现的良好示例,请参阅AstroPy优秀包。
前缀及约定
不言而喻,C、C++、Objective-C和Swift之间的语法差异很大。编写SwiftAA的主要指导原则是构建一个遵循底层C++库方法及接口的Objective-C(++)层。仅仅是一些变量的命名方法略有“Objective-C化”(以避免在单个字母类型前添加前缀,如'b'表示布尔值等)。
由于Objective-C缺少命名空间,所有内容都必须带有前缀。在Objective-C中使用3个字母的前缀是一种约定。KPC代表“千秒差距”是我的常用前缀。我选择保留属于C++库的AA前缀。因此,所有方法的(相当长)5个字母的前缀是KPCAA。
首先构建Objective-C层的限制源于不能直接在Swift代码旁边编写C++代码(在同一个文件中)。Swift也没有将头文件/实现拆分为不同的文件。因此,必须编写一个带有前缀的Objective-C++/C包装器。
分支
有关Swift4,请参阅swift4
分支。同样,对于Swift3(已停更)。
作者
Cédric Foellmi,别名@onekiloparsec (网站)。
(天体物理学博士,曾任智利欧洲南方天文台天文台台长)。
我是应用程序iObserve(适用于macOS(以及之前在[iOS/iPad]上使用)和arcsecond.io。)的作者。
支持
你可以通过在Patreon上支持我,帮助我把更多时间投入到天文爱好者的开源软件上!
许可协议
此软件的许可协议是MIT许可协议,允许你自由用于开源或商业产品。但该许可证不适用于保留其自有许可证的AA+框架。如原文所述。
AA+版权
- 如果你的产品以二进制形式发布,则允许你在任何产品(商业、共享软件、免费软件等)中包含源代码。
- 你可以在任何方式下修改源代码,但不能修改每个模块顶部的内容。
- 如果你想与应用程序一起分发源代码,那么你只能分发作者发布的版本。这是为了维护源代码的单一点发布。