1个不稳定版本
0.1.0 | 2023年12月12日 |
---|
#984 在 编码
每月463次下载
在 moc 中使用
230KB
7.5K SLoC
stc-s
或 STCSLibRust
用于在Rust中读取/写入IVOASTC-S字符串的库,并将它们从/到JSON进行转换。解析器是根据
其他现有实现
- 纯Python:请参阅gavo/dachs/sts
- 帮助我完善这个!
动机
此库用于MOC库Rust,以支持从(简单)STC-S描述创建MOCs -- S-MOCs、ST-MOCs、F-MOCs等。例如,这个特性已在MOCPy中提出,请参阅问题#111。
它也可以用于
- QAT2S位置查询
- Aladin Lite V3 显示区域,并替换迄今为止仅支持多边形和圆的最小JS代码。
- Astropy Region,请参阅此问题
- 现有的纯Python解析器马克斯·德莱特纳可以使用?
状态
此库处于早期开发阶段。我们对(合理的)更改持开放态度,并感谢反馈。请提供更多STC-S示例!
API示例中的STC-S字符串
Stc::new().set_space(
PositionInterval::from_frame(Frame::ICRS)
.set_refpos(SpaceTimeRefPos::Geocenter)
.set_lo_hi_limits(vec![170.0, -20.0, 190.0, 10.0])
.set_resolution(vec![0.0001])
).to_string();
提供字符串
"PositionInterval ICRS GEOCENTER 170 -20 190 10 Resolution 0.0001"
您可以使用以下方法将字符串解析回对象(请避免使用unwrap
,有关完整示例,请参阅lib.rs
中的测试)
let ascii = "PositionInterval ICRS GEOCENTER 170 -20 190 10 Resolution 0.0001";
let stc = Stc::parse::<VerboseError<&str>>(ascii).unwrap().1;
STC-S到JSON转换示例
以下示例是从内部测试中提取的。
示例1
Circle ICRS TOPOCENTER 147.6 69.9 0.4
转换为
{
"space": {
"Circle": {
"frame": "ICRS",
"refpos": "TOPOCENTER",
"pos": [
147.6,
69.9
],
"radius": 0.4
}
}
}
示例2
Time TDB BARYCENTER MJD 50814.0
Position ICRS BARYCENTER 147.3 69.3
转换为
{
"time": {
"Time": {
"timescale": "TDB",
"refpos": "BARYCENTER",
"time": {
"MJD": "50814.0"
}
}
},
"space": {
"frame": "ICRS",
"refpos": "BARYCENTER",
"pos": [
147.3,
69.3
]
}
}
示例3
TimeInterval TT GEOCENTER 1996-01-01T00:00:00 1996-01-01T00:30:00
Time MJD 50814.0 Error 1.2 Resolution 0.8 PixSize 1024.0
Circle ICRS GEOCENTER 179.0 -11.5 0.5 Position 179.0 -11.5
Error 0.000889 Resolution 0.001778 Size 0.000333 0.000278
PixSize 0.000083 0.000083
Spectral BARYCENTER 1420.4 unit MHz Resolution 10.0
RedshiftInterval BARYCENTER VELOCITY OPTICAL 200.0 2300.0
Redshift 300.0 Resolution 0.7 PixSize 0.3
转换为
{
"time": {
"TimeInterval": {
"timescale": "TT",
"refpos": "GEOCENTER",
"start": [
{
"Iso": "1996-01-01T00:00:00Z"
}
],
"stop": [
{
"Iso": "1996-01-01T00:30:00Z"
}
],
"time": {
"MJD": "50814.0"
},
"error": 1.2,
"resolution": 0.8,
"pixsize": 1024.0
}
},
"space": {
"Circle": {
"frame": "ICRS",
"refpos": "GEOCENTER",
"pos": [
179.0,
-11.5
],
"radius": 0.5,
"position": [
179.0,
-11.5
],
"error": [
0.000889
],
"resolution": [
0.001778
],
"size": [
0.000333,
0.000278
],
"pixsize": [
0.000083,
0.000083
]
}
},
"spectral": {
"Value": {
"refpos": "BARYCENTER",
"value": 1420.4,
"unit": "MHz",
"resolution": 10.0
}
},
"redshift": {
"RedshiftInterval": {
"refpos": "BARYCENTER",
"type": "VELOCITY",
"dopplerdef": "OPTICAL",
"lolimit": [
200.0
],
"hilimit": [
2300.0
],
"redshift": 300.0,
"resolution": 0.7,
"pixsize": 0.3
}
}
}
示例4
Union ICRS TOPOCENTER
(Circle 180 10 20
Circle 190 20 20
Intersection
(Circle 120 -10 20
Difference
(Circle 130 -10 20
Circle 125 -10 2
)
Not
(Circle 118 -8 3)
)
)
转换为
{
"space": {
"Union": {
"frame": "ICRS",
"refpos": "TOPOCENTER",
"elems": [
{
"Circle": {
"pos": [
180.0,
10.0
],
"radius": 20.0
}
},
{
"Circle": {
"pos": [
190.0,
20.0
],
"radius": 20.0
}
},
{
"Intersection": {
"elems": [
{
"Circle": {
"pos": [
120.0,
-10.0
],
"radius": 20.0
}
},
{
"Difference": {
"left": {
"Circle": {
"pos": [
130.0,
-10.0
],
"radius": 20.0
}
},
"right": {
"Circle": {
"pos": [
125.0,
-10.0
],
"radius": 2.0
}
}
}
},
{
"Not": {
"Circle": {
"pos": [
118.0,
-8.0
],
"radius": 3.0
}
}
}
]
}
}
]
}
}
}
待办事项列表
- 解析和写入STC-S。
- 支持JSON序列化和反序列化。
- 支持解析TAP中定义的STC-S。
- 制作CLI。
- 创建一个JS/Wasm库。
- 在所有地方添加构建器、获取器和设置器,就像在
FillFrameRefposFlavor
结构中一样,以创建一个干净的API。 - 创建一个访问者。
- 实现一个
empty
访问者 - 实现一个
echo
访问者 - 实现一个
stcs2moc
访问者(可在MOCLibRust中找到)
- 实现一个
- 实现
fold
以避免过宽的行。 - 支持STC XML序列化/反序列化吗?
许可证
像大多数Rust项目一样,此项目根据您的选择使用以下任一许可证
- Apache许可证2.0版本(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您提交给本项目以供包含在内的任何贡献,根据Apache-2.0许可证的定义,应如上所述双重许可,不附加任何额外条款或条件。
依赖关系
~1.4–2.4MB
~50K SLoC