feat: 引入可切换星历模型并扩展天象观测链路
- 新增半解析、旧模型、自定义与多源堆叠星历实例,提供 Context、Instance、SPK 读取及状态与视位置计算 - 统一太阳、月球和行星实例接口,扩展黄经穿越、留、相位、最近角距、偕日可见、任意高度升落、轨道节点及凌日等天象查询 - 完善日月食、月掩与凌日的月缘剖面、有限盘面接触、站心修正、局地可见性、全球路径和地图输出 - 新增 SVG、GeoJSON、KML 天象输出及凌日、月掩和月缘地形相关缓存与几何求解 - 新增恒星星表导入与查询,支持 CSV、Hipparcos、BSC5、Stellarium 等格式及名称、交叉标识、锥面检索和星等过滤 - 补充 IAU 2006、地球定向、折射消光、大气观测、轨道传播及半解析行星/月球数据支持 - 将默认未来民用时标切换为 TimeScaleLeapHour,更新 2027–2400 农历速查表、中文日期解析和时区边界处理 - 增加事件基线、跨模型回归、几何边界、月缘地形和输出契约测试,完善中英文手册、示例资源、NOTICE 与忽略规则
This commit is contained in:
+14
-2
@@ -3,6 +3,7 @@
|
||||
package svg
|
||||
|
||||
import (
|
||||
"b612.me/astro/internal/limbnote"
|
||||
"b612.me/astro/internal/timenote"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -253,7 +254,8 @@ func renderOccultationPathSVG(
|
||||
}
|
||||
writePlanetOccultationEventsPanel(&b, *planetPath, layout, options)
|
||||
}
|
||||
writeStarOccultationFooter(&b, layout, options, flags, occultationScaleInstant(path, planetPath))
|
||||
writeStarOccultationFooter(&b, layout, options, flags, occultationScaleInstant(path, planetPath),
|
||||
occultationLimbApplied(path, planetPath))
|
||||
b.WriteString(`</svg>`)
|
||||
return b.String(), nil
|
||||
}
|
||||
@@ -757,16 +759,26 @@ func occultationScaleInstant(path moon.StarOccultationPath, planetPath *moon.Pla
|
||||
return path.Greatest.Time
|
||||
}
|
||||
|
||||
// occultationLimbApplied 报告图中界线是否按月缘剖面修正。
|
||||
func occultationLimbApplied(path moon.StarOccultationPath, planetPath *moon.PlanetOccultationPath) bool {
|
||||
if planetPath != nil {
|
||||
return planetPath.LunarLimbApplied
|
||||
}
|
||||
return path.LunarLimbApplied
|
||||
}
|
||||
|
||||
func writeStarOccultationFooter(
|
||||
b *strings.Builder,
|
||||
layout starOccultationSVGLayout,
|
||||
options StarOccultationSVGOptions,
|
||||
flags occultationSVGTextFlags,
|
||||
instant time.Time,
|
||||
limbApplied bool,
|
||||
) {
|
||||
maxWidth := layout.width - 80
|
||||
lineHeight := svgchart.FooterLineHeight(11)
|
||||
scaleNote := timenote.Scale(options.TimeScale, instant, options.Location, options.Language)
|
||||
scaleNote := limbnote.Join(timenote.Scale(options.TimeScale, instant, options.Location, options.Language),
|
||||
limbnote.Limits(limbApplied, options.Language), options.Language)
|
||||
// 页脚默认排在画布底边之内(与既有版面一致),说明行放得下时声明单独占最后一行;
|
||||
// 自定义说明太长时改用按字号留白的行数上限:截断说明也要保住时标声明和底边留白。
|
||||
lines := occultationWrappedTextLines(starOccultationSVGFooter(options), flags.footerNote, maxWidth, 11)
|
||||
|
||||
Reference in New Issue
Block a user