satellite.js介绍、安装以及用法

satellite.js介绍、安装以及用法

satellitejs包:https://download.csdn.net/download/qq_41176306/19362223

介绍

一个使通过TLEs在网络上进行卫星传播成为可能的库。
提供SGP4/SDP4计算所需的函数,如可调用的javascript方法。还提供了坐标变换的函数。

这个库的内部几乎与Brandon Rhode的sgp4 python库相同。但是,它被封装在标准JS库(自执行函数)中,并仅公开跟踪卫星和传播路径。作者对Brandon Rhode代码所做的唯一改变就是改变了位置参数以及键值对象的函数。这降低了需要50多个参数的函数的复杂性,而且不要求参数按精确的顺序排列。

使用该库的网站可以在这里找到。

开始:

这个库中的javascript大量基于(直接复制):

作者已经从python库中包含了原始的PKG-INFO文件。

坐标变换是基于 T.S. Kelso’s columns:

以及加州大学博尔德分校ASEN学生的课程

作者建议对卫星跟踪或轨道传播感兴趣的人读一读所有TS Kelso的专栏。没有他的工作,这个项目是不可能的。

获得一个免费的Space Track account并下载您自己的最新的TLEs与此库一起使用。

安装

Install the library with NPM:

npm install satellite.js

Install the library with Yarn:

yarn add satellite.js

Install the library with Bower:

bower install satellite.js

警告!

satellite.js 版本 1.3.0 是 Bower 的最新版本,因为它已被弃用。

用法

Common.js (Node.js)

var satellite = require('satellite.js');
...
var positionAndVelocity = satellite.sgp4(satrec, time);

ES (Babel.js)

import { sgp4 } from 'satellite.js';
...
const positionAndVelocity = sgp4(satrec, time);

AMD (Require.js)

define(['path/to/dist/satellite'], function(satellite) {
    ...
    var positionAndVelocity = satellite.sgp4(satrec, time);
});

这里是一个repo显示了基本的库使用Require.js。

Script tag

在html中以脚本的形式包含dist/satellite.min.js:

<script src="path/to/dist/satellite.min.js"></script>

“卫星”对象将在全球范围可用

var positionAndVelocity = satellite.sgp4(satrec, time);

示例使用

// Sample TLE
var tleLine1 = '1 25544U 98067A   19156.50900463  .00003075  00000-0  59442-4 0  9992',
    tleLine2 = '2 25544  51.6433  59.2583 0008217  16.4489 347.6017 15.51174618173442';    

// 初始化一条卫星记录
var satrec = satellite.twoline2satrec(tleLine1, tleLine2);

//  获取卫星在某一时间点的位置与方向信息
var positionAndVelocity = satellite.sgp4(satrec, timeSinceTleEpochMinutes);
// positionAndVelocity = 
//  {position: {x: -3987.4321373686917, y: -4619.1250647378265, z: -3280.414501412166}
  //velocity: {x: -3.1645649194011605, y: -1.9557509950512322, z: 6.603671697337737}
  //__proto__: Object
//}

//  或者你可以使用JavaScript日期
var positionAndVelocity = satellite.propagate(satrec, new Date());

var positionEci = positionAndVelocity.position,
    velocityEci = positionAndVelocity.velocity;

// 将观察者(固定区域)设为西经122.03度,北纬36.96度(degreesToRadians——角度转弧度)
var observerGd = {
    longitude: satellite.degreesToRadians(-122.0308),
    latitude: satellite.degreesToRadians(36.9613422),
    height: 0.370
};

// 将GMT中国时、Julindate时转成格林尼治恒星时
var gmst = satellite.gstime(new Date());

// 你可以得到ECF,大地测量,观察角度和多普勒因子。
var positionEcf   = satellite.eciToEcf(positionEci, gmst),
    observerEcf   = satellite.geodeticToEcf(observerGd),
    positionGd    = satellite.eciToGeodetic(positionEci, gmst),
    lookAngles    = satellite.ecfToLookAngles(observerGd, positionEcf),
    dopplerFactor = satellite.dopplerFactor(observerCoordsEcf, positionEcf, velocityEcf);

// 所有坐标都存储在键值对中。
// ECI和ECF被' x ', ' y ', ' z '属性访问。
var satelliteX = positionEci.x,
    satelliteY = positionEci.y,
    satelliteZ = positionEci.z;

// 角度可以通过' azimuth ', ' elevation ', ' range_sat '属性访问。
var azimuth   = lookAngles.azimuth,
    elevation = lookAngles.elevation,
    rangeSat  = lookAngles.rangeSat;

// 通过'经度','纬度','高度'访问大地坐标。
var longitude = positionGd.longitude,
    latitude  = positionGd.latitude,
    height    = positionGd.height;

//  将弧度转换为度。
var longitudeDeg = satellite.degreesLong(longitude),
    latitudeDeg  = satellite.degreesLat(latitude);

暴露对象

satrec

“satrec”对象来自Rhodes和Vallado的原始代码。它是巨大而复杂的,但是它包含的最重要的值是开普勒元素和从TLEs中提取的其他值。作者不建议任何人都试着去简化它,除非他们完全理解轨道力学。

  • satnum TLE文件中给出的唯一卫星号。
  • epochyr 这个元素集的纪元时刻的整整四位数年份。
  • epochdays 分数日进入纪元时刻的年份。
  • jdsatepoch 历元的儒略历日期(由’ epochyr ‘和’ epochdays '计算)。
  • ndot 平均运动的一次导数(被SGP4忽略)。
  • nddot 平均运动的二阶导数(被SGP4忽略)。
  • bstar 反地球半径中的弹道阻力系数B*。
  • inclo 倾斜的弧度
  • nodeo 升交点赤经。
  • ecco 偏心率
  • argpo 近地点以弧度表示的辐角
  • mo 平均异常弧度。
  • no 表示每分钟弧度的平均运动。

暴露的功能

初始化

var satrec = satellite.twoline2satrec(longstr1, longstr2);

返回从传入的TLEs创建的satrec对象。satrec对象非常复杂,除了传下去,您不能用它做任何事。

注意!你负责提供tle。点击这里获取您的免费Space Track帐号
longstr1和longstr2是TLE的两行,由NASA和NORAD标准正确格式化。如果你使用太空轨道,应该没有问题。

传播

’ propagate() ‘和’ sgp4() '函数都以字典的形式返回位置和速度:

{
  "position": { "x" : 1, "y" : 1, "z" : 1 },
  "velocity": { "x" : 1, "y" : 1, "z" : 1 }
}

位置单位是km,速度单位是km/s,都是ECI坐标系(地心惯性坐标系,ECF坐标系为地心固定坐标系)。

var positionAndVelocity = satellite.propagate(satrec, new Date());

返回位置和速度,给定satrec和日历日期。仅仅是’ sgp4() '的包装器,转换自卫星纪元以来的历日到儒略历时间。有时要求给出位置和速度会更好一个具体的日期。

var positionAndVelocity = satellite.sgp4(satrec, timeSinceTleEpochMinutes);

返回位置和速度,给定卫星和时间(以分钟为单位)。有时候开口更好给定自历元以来经过的时间的位置和速度。

多普勒

你可以得到卫星当前的多普勒因子,相对于你的位置,使用’ dopplerFactor() '函数。

使用ECI或ECF坐标,但不要混合它们。

var dopplerFactor = satellite.dopplerFactor(observer, position, velocity);

参见坐标变换一节了解如何获得ECF/ECI/大地坐标。

坐标变换

格林尼治平均恒星时

你需要提供一些坐标转换函数与你当前的GMST,也就是GSTIME。您可以使用儒略日:

var gmst = satellite.gstime(julianDay);

或JavaScript日期:

var gmst = satellite.gstime(new Date());
转换

它们中的大多数从名字就不言自明了。坐标是三个浮点数EX:[1.1, 1.2, 1.3]的数组公里。再说一遍,先读下面的内容。

坐标变换是基于 T.S. Kelso’s columns:

以及加州大学博尔德分校ASEN学生的课程

当您需要时,这四个用于在ECI、ECF和Geodetic之间进行转换。ECI和ECF坐标到达

公里或公里/ s。大地坐标是以弧度表示的。

var ecfCoords = satellite.eciToEcf(eciCoords, gmst);
var eciCoords = satellite.ecfToEci(ecfCoords, gmst);
var geodeticCoords = satellite.eciToGeodetic(eciCoords, gmst);
var ecfCoords = satellite.geodeticToEcf(geodeticCoords);

这些函数用于计算从你的大地位置到ECF坐标中的卫星的角度。
请确保首先将ECI输出从sgp4()转换为ECF。

var lookAngles = satellite.ecfToLookAngles(observerGeodetic, satelliteEcf);
经纬度

这两个函数将返回人类可读的纬度或经度字符串(Ex:“125.35W”或“45.565N”)
从“geodeticCoords”:

var latitudeStr = satellite.degreesLat(geodeticRadians),
    longitudeStr = satellite.degreesLong(geodeticRadians);

返回的所有方法:

  • constants: 获取一些数学计算上的常量
  • propagate: 返回给定日期和时间的位置和速度向量。
  • sgp4: TLE轨道根数对应的计算模型是简化普适模型
  • twoline2satrec: 返回从两行TLE数据导入的卫星。
  • gstime: 从 julian 日期算出 greenwich sidereal 时间。
  • jday: 将日、月、年、时、分、秒换算成 julian 日期
  • invjday: 找到年、月、日、时、分和秒返回julian日期。tu可以是ut1 tdt tdb等等。
  • dopplerFactor: 多普勒因子。
  • radiansToDegrees: 弧度转角度。
  • degreesToRadians: 角度转弧度。
  • degreesLat: 纬度转角度,
  • degreesLong: 经度转角度,
  • radiansLat: 角度转维度,
  • radiansLong: 角度转经度,
  • geodeticToEcf: 大地坐标系转ECF坐标系,
  • eciToGeodetic: ECI坐标系转大地坐标系,
  • eciToEcf: ECI坐标系转ECF坐标系,
  • ecfToEci: ECF坐标系转ECI坐标系,
  • ecfToLookAngles: ECF坐标系转LookAngles
var indexUmd = {
    constants: constants,
    // Propagation
    propagate: propagate,
    sgp4: sgp4,
    twoline2satrec: twoline2satrec,
    gstime: gstime,
    jday: jday,
    invjday: invjday,
    dopplerFactor: dopplerFactor,
    // Coordinate transforms
    radiansToDegrees: radiansToDegrees,
    degreesToRadians: degreesToRadians,
    degreesLat: degreesLat,
    degreesLong: degreesLong,
    radiansLat: radiansLat,
    radiansLong: radiansLong,
    geodeticToEcf: geodeticToEcf,
    eciToGeodetic: eciToGeodetic,
    eciToEcf: eciToEcf,
    ecfToEci: ecfToEci,
    ecfToLookAngles: ecfToLookAngles
  };

  return indexUmd
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值