SwiftAA • aa-js • QLFits • FITSImporter • ObjCFITSIO
SwiftAA(和ObjCAA)
准确的天体算法最全面集合,包括 C++、Objective-C 和 Swift,全在一个地方。
(通过所有分发机制:Swift 包管理器、CocoaPods 和 Carthage。)
其他实现:JavaScript(aa-js)、C#(AASharp)。
下面对 ObjCAA 和 SwiftAA 之间的区别进行说明。
描述
SwiftAA 提供了构建我们太阳系所需的一切,包括计算季节长度、月相、确定升起、经过和落下的时间、获取大型行星卫星的位置、转换坐标、确定行星的物理细节,它们的照明、距离等。具有专业级的准确性。
SwiftAA 已在生产应用中使用。特别是,MeteorActive,这是一个精心制作的 iOS 应用,可以获取有关流星的所有信息。
SwiftAA 首先是用 C++ 实现基于 P.J. Naughter 的参考教科书《天体算法》(作者:Jean Meeus,2 版,Amazon)的 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包管理器可获得三个目标:
AA+
、ObjCAA
和SwiftAA
。只在项目中使用你打算使用的最后一级别。 - 通过Carthage,在Xcode项目内部可获得三个目标:
ObjCAA
(包括AA+
)、SwiftAA-iOS
和SwiftAA-macOS
。 - 通过Cocoapods可获得两个pod:
ObjCAA
和SwiftAA
。
AA+
A+框架,由PJ Naughter(Visual C++ MVP)用C++编写,无疑是“天文学算法”最完整、最佳的实施,这些算法可以在Jean Meeus的参考教科书中找到。为了充分利用此代码,您必须有一本此书的副本(API和方法名称在没有了解它们所引用的内容的情况下几乎无法理解)。
只接受关于Objective-C(++)和Swift代码的pull请求。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+版权
- 当您以二进制形式发布产品(商业软件、共享软件、免费软件或其他形式)时,您可以将其源代码包含在任何产品中。
- 您可以随意修改源代码,ただし、模块顶部的版权详细信息は変更できません。
- 如果您想与您的应用程序一起分发源代码,则只能分发作者发布的版本。这是为了保持源代码的单点分发。