3 个版本 (破坏性更新)
0.3.0 | 2022 年 12 月 13 日 |
---|---|
0.2.0 | 2022 年 11 月 18 日 |
0.1.0 | 2022 年 11 月 18 日 |
#187 in 科学
388 每月下载
用于 2 crates
275KB
2.5K SLoC
mapproj
FITS 世界坐标系统(WCS)中定义的地图投影(部分)的实现。
目的
主要用于添加投影,并支持在 Aladin Lite V3 中显示 FITS 图像。
警告
此库
- 不支持 FITS 读取/解析和关键字分析;
- 目前处于早期阶段(请参阅待办事项列表),将在 Aladin Lite V3 中包含时进行演变。
详细信息
与 WCS 论文 不同,我们遵循 F. Ochsenbein 之前的作品,使用春分点 (1, 0, 0)
作为默认投影中心/原点。对于天顶投影,我们因此使用欧几里得坐标而不是赤道坐标在 yz 平面上进行投影。更改投影中心对应于欧几里得坐标的简单 3x3 矩阵乘法。
这项工作最初于 2017 年内部完成(仍由 F.-X. Pineau 完成),使用 Java,以在 Aladin Desktop 中支持更多投影(尚未发布,尚未公开)。F. Ochsenbein 在其 AstroCoo 库中先前实现了 TAN、STG、SIN、ZEA、ARC、AIT、SFL、MER 和 CEA(对于 lambda=1,即兰伯特投影)。
示例
给定以下 FITS 卡
CTYPE1 = 'RA---SIN'
CTYPE2 = 'DEC--SIN'
CRPIX1 = 382.00001513958 / reference pixel in X coordinate
CRPIX2 = 389.500015437603 / reference pixel in Y coordinate
CRVAL1 = 183.914583333 / RA of reference position (degrees)
CRVAL2 = 36.3275 / DEC of reference position (degrees)
WCSDIM = 2
CD1_1 = -2.7777777349544E-4
CD2_2 = 2.77777773495436E-4
CDELT1 = -2.7777777349544E-4 / Redundancy with CD1_1, we ignore it
CDELT2 = 2.77777773495436E-4 / Redundancy with CD2_2, we ignore it
// Imports
use mapproj::{
CenteredProjection, ImgXY, LonLat
img2lonlat::Img2LonLat,
img2proj::ImgXY2ProjXY,
zenithal::sin::Sin,
};
// Define constants
let crpix1 = 382.00001513958_f64;
let crpix2 = 389.500015437603_f64;
let crval1 = 183.914583333_f64;
let crval2 = 36.3275_f64;
let cd11 = -2.7777777349544e-4_f64;
let cd22 = 2.77777773495436e-4_f64;
// Set the projection
let mut proj = CenteredProjection::new(Sin::default());
let proj_center = LonLat::new(crval1.to_radians(), crval2.to_radians());
proj.set_proj_center_from_lonlat(&proj_center);
let img2proj = ImgXY2ProjXY::from_cd(crpix1, crpix2, cd11, 0.0, 0.0, cd22);
let img2lonlat = Img2Celestial::new(img2proj, proj);
// We could have set the projection center here instead of previously:
// img2lonlat.set_proj_center_from_lonlat(proj_center);
// Use to project, unproject coordinates:
// - we choose on purpose position in the image of the projection center
let img_coo_input = ImgXY::new(382.00001513958, 389.500015437603);
let lonlat = img2lonlat.img2lonlat(&img_coo_input).unwrap();
assert!((lonlat.lon() - proj_center.lon()).abs() < 1e-14);
assert!((lonlat.lat() - proj_center.lat()).abs() < 1e-14);
let img_coo_input = img2lonlat.lonlat2img(&lonlat).unwrap();
assert!((img_coo_input.x() - img_coo_input.x()).abs() < 1e-14);
assert!((img_coo_input.y() - img_coo_input.y()).abs() < 1e-14);
待办事项列表
- 添加圆锥投影(
COD
、COE
、COO
、COP
) - 添加圆柱投影(
CAR
、CEA
、CYP
、MER
) - 添加混合投影(
HPX
) - 添加伪圆柱投影(
AIT
、MOL
、PAR
、SFL
) - 添加天顶投影(
AIR
、ARC
、AZP
、FEYE
、NCP
、SIN
、STG
、SZP
、TAN
、ZEA
、ZPN
) - 添加多圆锥和伪圆锥投影(
BON, PCO
)? - 添加四立方投影(
TSC
、CSC
、QSC
)? - 为每个投影添加边界
- 为
is_in_proj_bounds
创建单独的实现以避免不必要的计算(但将与未投影引入冗余) - 检查并记录要添加到WCS投影边界的常数
- 支持
CRPIX
+CD
约定 - 支持
CRPIX
+PC
+CDELT
约定 - 支持
CRPIX
+CROTA
+CDELT
约定 - 添加对LONPOLE的支持?
- 测试并完善SIP
- 将包含计算细节的pdf文档添加到git
- 检查、修复错别字,丰富包含计算细节的pdf文档
- 添加生成投影文件和绘图(如Java库中的)的功能
许可证
像大多数Rust项目一样,本项目许可为以下之一
- Apache License,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义,你提交的任何旨在包含在本项目中的有意贡献,都应以上述方式双许可,没有任何额外的条款或条件。