jspredict-dc
Version:
Satellite propagation and visibility utilities built on satellite.js.
301 lines (276 loc) • 13.1 kB
TypeScript
declare module 'jspredict-dc' {
/** 观察者位置,按 [纬度, 经度, 海拔公里] 顺序传入。 */
export type ObserverLocation = [number, number, number];
/** 支持对象式写法的观察者位置。 */
export interface ObserverLocationObject {
/** 纬度,单位为度(支持 latitude 或 lat)。 */
latitude?: number;
lat?: number;
/** 经度,单位为度(支持 longitude、lon 或 lng)。 */
longitude?: number;
lon?: number;
lng?: number;
/** 海拔高度,单位为公里(支持 altitude、height 或 alt)。 */
altitude?: number;
height?: number;
alt?: number;
/** 海拔高度,单位为米(支持 altMeters、altitudeMeters 或 heightMeters)。 */
altMeters?: number;
altitudeMeters?: number;
heightMeters?: number;
}
/** 观察者位置的数组写法或对象写法。 */
export type ObserverLocationInput = ObserverLocation | ObserverLocationObject;
/** 单次过境窗口,包含起止时间、峰值仰角和方位角范围。 */
export interface Transit {
/** 过境开始时间戳,单位为毫秒。 */
start: number;
/** 过境结束时间戳,单位为毫秒。 */
end: number;
/** 峰值仰角,单位为度。 */
maxElevation: number;
/** 峰值仰角出现时的方位角,单位为度。 */
apexAzimuth: number;
/** 峰值仰角出现时刻,单位为毫秒。 */
apexTime: number | null;
/** 过境过程中的最大方位角,单位为度。 */
maxAzimuth: number;
/** 过境过程中的最小方位角,单位为度。 */
minAzimuth: number;
/** 过境持续时长,单位为毫秒。 */
duration: number;
}
/** findTransits 调试诊断信息。 */
export interface TransitDiagnostics {
/** 诊断扫描步长,单位为毫秒。 */
scanStepMs: number;
/** 该时间窗内观测到的最大仰角,单位为度。 */
maxElevationInWindow: number | null;
/** 最接近地平线的时间点,毫秒时间戳。 */
closestToHorizonAt: number | null;
/** closestToHorizonAt 对应仰角,单位为度。 */
closestToHorizonElevation: number | null;
/** 最近一次接近地平线(|elevation|<=1°)的时间点。 */
latestNearHorizonAt: number | null;
/** 诊断扫描采样点数量。 */
sampledPoints: number;
/** 本次过境搜索所使用的阈值,单位为度。 */
thresholdElevation: number;
/** 过境搜索迭代次数。 */
searchIterations: number;
/** 过境搜索终止原因。 */
terminationReason: 'badSat' | 'noTransitPredicted' | 'windowEnded' | 'maxTransitsReached' | 'maxIterationsReached';
/** 搜索循环最近一次推进到的时间点。 */
lastScanTime: number;
}
/** findTransits 调试返回值。 */
export interface TransitDebugResult {
transits: Transit[];
diagnostics: TransitDiagnostics;
}
/** findTransitsDebug 可选参数。 */
export interface FindTransitsDebugOptions {
/** 诊断扫描步长,支持毫秒数、字符串数值或单位对象。 */
scanStepMs?: number | string | { [unit: string]: number };
}
/** 传播后的惯性系位置和速度。 */
export interface Eci {
/** 位置向量,单位为公里。 */
position: { x: number; y: number; z: number };
/** 速度向量,单位为公里/秒。 */
velocity: { x: number; y: number; z: number };
}
/** 单时刻观测结果,包含地理位置、日照状态和可选的地面观测量。 */
export interface ObserveResult {
/** 观测时刻的毫秒时间戳。 */
timestamp: number;
eci: Eci;
/** 格林尼治平恒星时。 */
gmst: number;
/** 纬度,单位为度。 */
latitude: number;
/** 经度,单位为度。 */
longitude: number;
/** 海拔高度,单位为公里。 */
altitude: number;
/** 可见覆盖范围直径,单位为公里。 */
footprint: number;
/** 是否处于日照状态。 */
sunlit: boolean;
/** 处于地影时的阴影深度。 */
eclipseDepth: number;
/** 观测者坐标存在时的方位角,单位为度。 */
azimuth?: number;
/** 观测者坐标存在时的仰角,单位为度。 */
elevation?: number;
/** 观测者坐标存在时的斜距,单位为公里。 */
rangeSat?: number;
/** 观测者坐标存在时的多普勒因子。 */
doppler?: number;
}
/** OMM / JSON GP 的标准字段集合。 */
export interface OmmRecord {
OBJECT_NAME?: string;
OBJECT_ID?: string;
CENTER_NAME?: string;
REF_FRAME?: string;
TIME_SYSTEM?: string;
MEAN_MOTION?: string | number;
ECCENTRICITY?: string | number;
INCLINATION?: string | number;
RA_OF_ASC_NODE?: string | number;
ARG_OF_PERICENTER?: string | number;
MEAN_ANOMALY?: string | number;
EPHEMERIS_TYPE?: string | number;
CLASSIFICATION_TYPE?: string;
NORAD_CAT_ID?: string | number;
ELEMENT_SET_NO?: string | number;
REV_AT_EPOCH?: string | number;
BSTAR?: string | number;
MEAN_MOTION_DOT?: string | number;
MEAN_MOTION_DDOT?: string | number;
EPOCH?: string | Date;
[key: string]: unknown;
}
/** TLE 的两行文本结构。 */
export interface TleSource {
name?: string;
line1: string;
line2: string;
}
export type OrbitFormat = 'tle' | 'omm' | 'satrec';
/** 统一后的轨道根数字段。 */
export interface OrbitElements {
epoch: string | null;
epochMs: number | null;
epochYear: number | null;
epochDayOfYear: number | null;
meanMotion: number | null;
meanMotionFirstDerivative: number | null;
meanMotionSecondDerivative: number | null;
bstar: number | null;
inclination: number | null;
rightAscensionOfAscendingNode: number | null;
eccentricity: number | null;
argumentOfPerigee: number | null;
meanAnomaly: number | null;
semiMajorAxisKm: number | null;
orbitalPeriodSeconds: number | null;
revolutionNumberAtEpoch: number | null;
ephemerisType: string | null;
}
/** 统一后的轨道元数据。 */
export interface OrbitMetadata extends OrbitElements {
format: OrbitFormat;
name: string | null;
noradCatalogNumber: string | null;
classification: string | null;
internationalDesignator: string | null;
launchYear: number | null;
launchNumberOfYear: number | null;
launchPiece: string | null;
objectType?: string | null;
countryCode?: string | null;
launchDate?: string | null;
decayDate?: string | null;
centerName: string | null;
referenceFrame: string | null;
referenceFrameEpoch?: string | null;
timeSystem: string | null;
meanElementTheory: string | null;
creationDate?: string | null;
originator?: string | null;
comment?: string | null;
elementSetNumber: number | null;
orbitClass: 'LEO' | 'MEO' | 'GEO' | 'HEO' | 'DEEP_SPACE' | null;
isDeepSpace: boolean;
raw: unknown;
}
/** 归一化后的轨道源结构。 */
export interface OrbitSource {
kind: 'tle' | 'omm' | 'satrec';
tle?: TleSource;
omm?: OmmRecord;
satrec?: unknown;
source?: string;
}
/** 可传入库中的轨道源总输入。 */
export type OrbitSourceInput = string | TleSource | OmmRecord | OrbitSource | unknown;
/** jspredict-dc 对外暴露的完整 API。 */
export interface JSPredictDC {
/** 默认最多返回的过境条目数。 */
DEFAULT_MAX_TRANSITS: number;
/** 开关式调试日志输出。 */
printIntervalInfo(open: boolean): boolean;
/** 兼容旧名的调试开关。 */
setDebugIntervalLogging(open: boolean): boolean;
/** 设置最大迭代次数。 */
setMax(max?: number): number;
/** 兼容旧名的最大迭代次数设置。 */
setIterationLimit(max?: number): number;
/** 将任意轨道源归一化成内部标准结构。 */
normalizeOrbitSource(source: OrbitSourceInput): OrbitSource;
/** 统一解析轨道源的身份、历元和轨道要素。 */
parseOrbitMetadata(source: OrbitSourceInput): OrbitMetadata;
/** 只返回统一后的轨道根数字段。 */
parseOrbitElements(source: OrbitSourceInput): OrbitElements;
/** 解析 TLE,并返回更完整的 TLE 元数据。 */
parseTle(source: OrbitSourceInput): OrbitMetadata;
/** 从 TLE 文本构建轨道源。 */
fromTle(line1OrText: string, line2?: string): OrbitSource;
/** 从 JSON GP 记录构建轨道源。 */
fromJsonGp(record: OmmRecord): OrbitSource;
/** 从 OMM XML 构建轨道源。 */
fromOmmXml(xml: string): OrbitSource;
/** 计算给定时刻的观测结果。 */
observeAt(source: OrbitSourceInput, observerLocation?: ObserverLocationInput, start?: number | Date | string): ObserveResult | null;
/** 兼容旧名的单时刻观测接口。 */
getPositionByTime(source: OrbitSourceInput, observerLocation?: ObserverLocationInput, start?: number | Date | string): ObserveResult | null;
/** 在时间段内按固定步长采样星历。 */
ephemeris(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string, interval?: number | string | { [unit: string]: number }): ObserveResult[];
/** 兼容旧名的星历采样接口。 */
getEphemeris(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string, interval?: number | string | { [unit: string]: number }): ObserveResult[];
/** 搜索过境窗口。 */
findTransits(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string, minElevation?: number, maxTransits?: number): Transit[];
/** 兼容旧名的过境搜索接口。 */
transits(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string, minElevation?: number, maxTransits?: number): Transit[];
/** 过境搜索调试接口,返回结果与诊断信息。 */
findTransitsDebug(
source: OrbitSourceInput,
observerLocation: ObserverLocationInput,
start: number | Date | string,
end: number | Date | string,
minElevation?: number,
maxTransits?: number,
options?: FindTransitsDebugOptions
): TransitDebugResult;
/** 返回单个过境窗口。 */
transitSegment(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string): Transit | null;
/** 兼容旧名的单窗口过境搜索。 */
getTransitSegment(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string): Transit | null;
/** 返回观测者可见窗口的起止时间数组。 */
visibilityWindows(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string): number[][];
/** 兼容旧名的可见窗口接口。 */
getVisibilityWindows(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string): number[][];
/** 语义更清晰的地面观测可见窗口接口。 */
groundVisibilityWindows(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string): number[][];
/** groundVisibilityWindows 的兼容别名。 */
getGroundVisibilityWindows(source: OrbitSourceInput, observerLocation: ObserverLocationInput, start: number | Date | string, end: number | Date | string): number[][];
/** 计算两颗卫星之间的可见窗口。 */
satelliteVisibilityWindows(source1: OrbitSourceInput, source2: OrbitSourceInput, start: number | Date | string, end: number | Date | string, stepSeconds?: number): number[][];
/** 兼容旧名的卫星互见窗口接口。 */
getSatelliteVisibilityWindows(source1: OrbitSourceInput, source2: OrbitSourceInput, start: number | Date | string, end: number | Date | string, stepSeconds?: number): number[][];
/** 根据轨道源估算轨道周期。 */
orbitalPeriodFromOrbitSource(source: OrbitSourceInput): number;
/** 兼容旧名的轨道周期接口。 */
orbitalPeriodFromTle(source: OrbitSourceInput): number;
/** 兼容旧名的轨道周期接口。 */
getOrbitalPeriodByTle(source: OrbitSourceInput): number;
/** 根据笛卡尔坐标估算轨道周期。 */
orbitalPeriodFromCartesian3(cartesian3?: [number, number, number]): number;
/** 兼容旧名的笛卡尔周期接口。 */
getOrbitalPeriodByCartesian3(cartesian3?: [number, number, number]): number;
}
const jspredict_dc: JSPredictDC;
export default jspredict_dc;
}