satellite.js库下载、介绍、安装、引用,返回函数的方法
satellite.js是一个js函数库,利用TLE可以推算出来卫星传播的参数方法等,他提供SGP4/SDP4计算所需的函数,还提供坐标转换的函数。
![](/uploads/2106/2_210617110422_1.png)
下载:
https://github.com/shashwatak/satellite-js
https://www.bootcdn.cn/satellite.js/
安装:
- 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
引用:
- 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);
- });
- Script tag
- Include dist/satellite.min.js as a script in your html:
- <script src="path/to/dist/satellite.min.js"></script>
基本使用:
- // 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);
主要暴露的js方法:
- 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
暴露对象
satrec
“satrec”对象来自Rhodes和Vallado的原始代码。它是巨大而复杂的,但是它包含的最重要的值是开普勒元素和从TLEs中提取的其他值。作者不建议任何人都试着去简化它,除非他们完全理解轨道力学。
- satnum TLE文件中给出的唯一卫星号。
- epochyr 这个元素集的纪元时刻的整整四位数年份。
- epochdays 分数日进入纪元时刻的年份。
- jdsatepoch 历元的儒略历日期(由’ epochyr ‘和’ epochdays '计算)。
- ndot 平均运动的一次导数(被SGP4忽略)。
- nddot 平均运动的二阶导数(被SGP4忽略)。
- bstar 反地球半径中的弹道阻力系数B*。
- inclo 倾斜的弧度
- nodeo 升交点赤经。
- ecco 偏心率
- argpo 近地点以弧度表示的辐角
- mo 平均异常弧度。
- no 表示每分钟弧度的平均运动。
暴露的功能
初始化
返回从传入的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坐标系为地心固定坐标系)。
返回位置和速度,给定satrec和日历日期。仅仅是’ sgp4() '的包装器,转换自卫星纪元以来的历日到儒略历时间。有时要求给出位置和速度会更好一个具体的日期。
返回位置和速度,给定卫星和时间(以分钟为单位)。有时候开口更好给定自历元以来经过的时间的位置和速度。
多普勒
你可以得到卫星当前的多普勒因子,相对于你的位置,使用’ dopplerFactor() '函数。
使用ECI或ECF坐标,但不要混合它们。
参见坐标变换一节了解如何获得ECF/ECI/大地坐标。
坐标变换
格林尼治平均恒星时
你需要提供一些坐标转换函数与你当前的GMST,也就是GSTIME。您可以使用儒略日:
或JavaScript日期:
转换
它们中的大多数从名字就不言自明了。坐标是三个浮点数EX:[1.1, 1.2, 1.3]的数组公里。再说一遍,先读下面的内容。
坐标变换是基于 T.S. Kelso’s columns:
公里或公里/ 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。
经纬度
这两个函数将返回人类可读的纬度或经度字符串(Ex:“125.35W”或“45.565N”)
从“geodeticCoords”:
- var latitudeStr = satellite.degreesLat(geodeticRadians),
- longitudeStr = satellite.degreesLong(geodeticRadians);