• Ajax
  • Ant design
  • Axios-Fetch
  • Avue
  • Browser
  • Canvas
  • CSS
  • Dos-bat
  • Dva
  • Dedecms
  • Echart
  • ElementUI
  • Editors
  • Git
  • GeoServer
  • GIS
  • H5
  • Jquery
  • Java安卓
  • Json
  • Javascript
  • Leaflet
  • Linux
  • Life-Info
  • Mock
  • MongoDB
  • Network
  • NodeJS
  • NPM
  • React
  • 设计运营
  • SEO
  • SVG
  • TypeScript
  • Tools
  • umi
  • uni-APP
  • Vant
  • Vue
  • Windows
  • webpack
  • 位置:OC中文网 > 其他 > GIS >

    satellite.js库下载、介绍、安装、引用,返回函数的方法

    来源:openlayers-cesium.com 时间:03-11

     satellite.js是一个js函数库,利用TLE可以推算出来卫星传播的参数方法等,他提供SGP4/SDP4计算所需的函数,还提供坐标转换的函数。

    下载:

    https://github.com/shashwatak/satellite-js

    https://www.bootcdn.cn/satellite.js/

    安装:

    1. Install the library with NPM: 
    2.  
    3. npm install satellite.js 
    4. Install the library with Yarn: 
    5.  
    6. yarn add satellite.js 
    7. Install the library with Bower: 
    8.  
    9. bower install satellite.js 

    引用:

    1. Common.js (Node.js) 
    2. var satellite = require('satellite.js'); 
    3. ... 
    4. var positionAndVelocity = satellite.sgp4(satrec, time); 
    5. ES (Babel.js) 
    6. import { sgp4 } from 'satellite.js'; 
    7. ... 
    8. const positionAndVelocity = sgp4(satrec, time); 
    9. AMD (Require.js) 
    10. define(['path/to/dist/satellite'], function(satellite) { 
    11.     ... 
    12.     var positionAndVelocity = satellite.sgp4(satrec, time); 
    13. }); 
    14.  
    15. Script tag 
    16. Include dist/satellite.min.js as a script in your html: 
    17.  
    18. <script src="path/to/dist/satellite.min.js"></script> 

    基本使用:

    1. // Sample TLE 
    2. var tleLine1 = '1 25544U 98067A   19156.50900463  .00003075  00000-0  59442-4 0  9992'
    3.     tleLine2 = '2 25544  51.6433  59.2583 0008217  16.4489 347.6017 15.51174618173442';     
    4.  
    5. // 初始化一条卫星记录 
    6. var satrec = satellite.twoline2satrec(tleLine1, tleLine2); 
    7.  
    8. //  获取卫星在某一时间点的位置与方向信息 
    9. var positionAndVelocity = satellite.sgp4(satrec, timeSinceTleEpochMinutes); 
    10. // positionAndVelocity =  
    11. //  {position: {x: -3987.4321373686917, y: -4619.1250647378265, z: -3280.414501412166} 
    12.   //velocity: {x: -3.1645649194011605, y: -1.9557509950512322, z: 6.603671697337737} 
    13.   //__proto__: Object 
    14. //} 
    15.  
    16. //  或者你可以使用JavaScript日期 
    17. var positionAndVelocity = satellite.propagate(satrec, new Date()); 
    18.  
    19. var positionEci = positionAndVelocity.position, 
    20.     velocityEci = positionAndVelocity.velocity; 
    21.  
    22. // 将观察者(固定区域)设为西经122.03度,北纬36.96度(degreesToRadians——角度转弧度) 
    23. var observerGd = { 
    24.     longitude: satellite.degreesToRadians(-122.0308), 
    25.     latitude: satellite.degreesToRadians(36.9613422), 
    26.     height: 0.370 
    27. }; 
    28.  
    29. // 将GMT中国时、Julindate时转成格林尼治恒星时 
    30. var gmst = satellite.gstime(new Date()); 
    31.  
    32. // 你可以得到ECF,大地测量,观察角度和多普勒因子。 
    33. var positionEcf   = satellite.eciToEcf(positionEci, gmst), 
    34.     observerEcf   = satellite.geodeticToEcf(observerGd), 
    35.     positionGd    = satellite.eciToGeodetic(positionEci, gmst), 
    36.     lookAngles    = satellite.ecfToLookAngles(observerGd, positionEcf), 
    37.     dopplerFactor = satellite.dopplerFactor(observerCoordsEcf, positionEcf, velocityEcf); 
    38.  
    39. // 所有坐标都存储在键值对中。 
    40. // ECI和ECF被' x ', ' y ', ' z '属性访问。 
    41. var satelliteX = positionEci.x, 
    42.     satelliteY = positionEci.y, 
    43.     satelliteZ = positionEci.z; 
    44.  
    45. // 角度可以通过' azimuth ', ' elevation ', ' range_sat '属性访问。 
    46. var azimuth   = lookAngles.azimuth, 
    47.     elevation = lookAngles.elevation, 
    48.     rangeSat  = lookAngles.rangeSat; 
    49.  
    50. // 通过'经度','纬度','高度'访问大地坐标。 
    51. var longitude = positionGd.longitude, 
    52.     latitude  = positionGd.latitude, 
    53.     height    = positionGd.height; 
    54.  
    55. //  将弧度转换为度。 
    56. var longitudeDeg = satellite.degreesLong(longitude), 
    57.     latitudeDeg  = satellite.degreesLat(latitude); 

    主要暴露的js方法:

    1. constants: 获取一些数学计算上的常量 
    2.  
    3. propagate: 返回给定日期和时间的位置和速度向量。 
    4.  
    5. sgp4: TLE轨道根数对应的计算模型是简化普适模型 
    6.  
    7. twoline2satrec: 返回从两行TLE数据导入的卫星。 
    8.  
    9. gstime: 从 julian 日期算出 greenwich sidereal 时间。 
    10.  
    11. jday: 将日、月、年、时、分、秒换算成 julian 日期 
    12.  
    13. invjday: 找到年、月、日、时、分和秒返回julian日期。tu可以是ut1 tdt tdb等等。 
    14.  
    15. dopplerFactor: 多普勒因子。 
    16.  
    17. radiansToDegrees: 弧度转角度。 
    18.  
    19. degreesToRadians: 角度转弧度。 
    20.  
    21. degreesLat: 纬度转角度, 
    22.  
    23. degreesLong: 经度转角度, 
    24.  
    25. radiansLat: 角度转维度, 
    26.  
    27. radiansLong: 角度转经度, 
    28.  
    29. geodeticToEcf: 大地坐标系转ECF坐标系, 
    30.  
    31. eciToGeodetic: ECI坐标系转大地坐标系, 
    32.  
    33. eciToEcf: ECI坐标系转ECF坐标系, 
    34.  
    35. ecfToEci: ECF坐标系转ECI坐标系, 
    36.  
    37. ecfToLookAngles: ECF坐标系转LookAngles 

     暴露对象

    satrec

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

    1. satnum TLE文件中给出的唯一卫星号。 
    2.  
    3. epochyr 这个元素集的纪元时刻的整整四位数年份。 
    4.  
    5. epochdays 分数日进入纪元时刻的年份。 
    6.  
    7. jdsatepoch 历元的儒略历日期(由’ epochyr ‘和’ epochdays '计算)。 
    8.  
    9. ndot 平均运动的一次导数(被SGP4忽略)。 
    10.  
    11. nddot 平均运动的二阶导数(被SGP4忽略)。 
    12.  
    13. bstar 反地球半径中的弹道阻力系数B*。 
    14.  
    15. inclo 倾斜的弧度 
    16.  
    17. nodeo 升交点赤经。 
    18.  
    19. ecco 偏心率 
    20.  
    21. argpo 近地点以弧度表示的辐角 
    22.  
    23. mo 平均异常弧度。 
    24.  
    25. no 表示每分钟弧度的平均运动。 

    暴露的功能

    初始化

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

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

    注意!你负责提供tle。点击这里获取您的免费Space Track帐号

    longstr1和longstr2是TLE的两行,由NASA和NORAD标准正确格式化。如果你使用太空轨道,应该没有问题。

    传播

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

    1.  
    2.   "position": { "x" : 1, "y" : 1, "z" : 1 }, 
    3.  
    4.   "velocity": { "x" : 1, "y" : 1, "z" : 1 } 
    5.  

    位置单位是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:

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

    1. var ecfCoords = satellite.eciToEcf(eciCoords, gmst); 
    2.  
    3. var eciCoords = satellite.ecfToEci(ecfCoords, gmst); 
    4.  
    5. var geodeticCoords = satellite.eciToGeodetic(eciCoords, gmst); 
    6.  
    7. var ecfCoords = satellite.geodeticToEcf(geodeticCoords); 

    这些函数用于计算从你的大地位置到ECF坐标中的卫星的角度。

    请确保首先将ECI输出从sgp4()转换为ECF。

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

    经纬度

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

    从“geodeticCoords”:

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