Seguimiento y visualizaci贸n de la posici贸n de la ISS con 30 l铆neas de c贸digo JavaScript





Les traigo una traducci贸n de este maravilloso art铆culo .



En este tutorial crearemos una aplicaci贸n web que visualice la posici贸n de cualquier sat茅lite, por ejemplo, la Estaci贸n Espacial Internacional (en adelante - ISS), en tiempo real (bueno, casi).



Construiremos una aplicaci贸n desde cero y probaremos el papel de un verdadero cient铆fico espacial.



  • Descubriremos d贸nde encontrar los datos de un sat茅lite individual, conocido como el conjunto de elementos de dos l铆neas (TLE ).
  • Usamos la biblioteca "satellite-js" para predecir la 贸rbita del sat茅lite desde la DNE (esta parte est谩 directamente relacionada con la ciencia espacial)
  • Usamos la biblioteca "CesiumJS" para renderizar el resultado, sin embargo, puede usar cualquier biblioteca / motor que pueda trabajar con longitud, latitud y altitud.


Vista previa del resultado final:





Aqu铆 vemos el movimiento de la ISS en 贸rbita a una velocidad aumentada 40 veces. Para ver la posici贸n actual de la ISS, haga clic en el icono del reloj en la esquina superior izquierda del panel de control.



1. Obtenci贸n de la DNE



DNE es un formato de datos que describe el movimiento de un objeto que orbita la Tierra. Fue creado por el Comando de Defensa Aeroespacial de Am茅rica del Norte (NORAD). Puede leer m谩s sobre la historia de su creaci贸n aqu铆 .



Al tener una descripci贸n de la 贸rbita, podemos predecir la ubicaci贸n en la que se ubicar谩 el sat茅lite en cualquier momento (ver m谩s abajo).



Esto significa que la mayor铆a de los dispositivos de rastreo por sat茅lite no lo hacen en tiempo real. En lugar de recibir datos continuamente actualizados, como cuando se rastrea el movimiento de un autom贸vil, utilizan los 煤ltimos DNE disponibles para predecir la posici贸n de un objeto en un momento espec铆fico.



驴D贸nde podemos conseguir la DNE? No existe un registro global con tales datos. De la publicaci贸n y actualizaci贸n de estos datos para la comunidad espacial, la persona propietaria de tal o cual sat茅lite es la responsable (claro, si no estamos hablando de un sat茅lite esp铆a).



Podemos encontrar el DNE en el sitio web de Space Track , que es el registro del Comando Espacial de los Estados Unidos.



Otro recurso es esta lista en CeleStrak , mantenida por el Dr. TS Kelso.



Usaremos este 煤ltimo ya que no requiere registro. Para encontrar el DNE para la ISS, haga clic en el enlace de Estaciones Espaciales .



El primero de la lista ser谩 la ISS:



ISS (ZARYA)
1 25544U 98067A   21122.75616700  .00027980  00000-0  51432-3 0  9994
2 25544  51.6442 207.4449 0002769 310.1189 193.6568 15.48993527281553

      
      





Los significados de estos n煤meros se pueden encontrar en esta tabla . La mayor铆a de ellos son identificadores de sat茅lites y metadatos, por ejemplo, cuando se lanz贸.



En el recurso especificado, puede encontrar DNE para sat茅lites meteorol贸gicos, sat茅lites GPS e incluso para el sistema global de sat茅lites Starlink , que est谩 siendo implementado por SpaceX.



2. Predecir la 贸rbita del sat茅lite



Nuestro siguiente paso es transformar la DNE en un puesto espec铆fico en el tiempo.



Usaremos satellite-js para esto .



Conectamos la biblioteca desde CDN:



<script src="https://cdnjs.cloudflare.com/ajax/libs/satellite.js/4.0.0/satellite.min.js"></script>

      
      





Luego le damos la DNE y la hora:



const ISS_TLE =
    `1 25544U 98067A   21122.75616700  .00027980  00000-0  51432-3 0  9994
     2 25544  51.6442 207.4449 0002769 310.1189 193.6568 15.48993527281553`;
//       
const satrec = satellite.twoline2satrec(
  ISS_TLE.split('\n')[0].trim(),
  ISS_TLE.split('\n')[1].trim()
);
//    
const date = new Date();
const positionAndVelocity = satellite.propagate(satrec, date);
const gmst = satellite.gstime(date);
const position = satellite.eciToGeodetic(positionAndVelocity.position, gmst);

console.log(position.longitude); //  
console.log(position.latitude); //  
console.log(position.height); //  

      
      





Ahora tenemos la posici贸n actual del sat茅lite ( new Date()



).



Esta posici贸n es el resultado de construir un determinado modelo del movimiento del sat茅lite. Este modelo se llama SGP4 / SDP4. Todos los DNE siguen este patr贸n.



Si se pregunta qu茅 tan preciso es este modelo, la respuesta corta es: depende de varios factores .



. , , , .. , , . , NORAD , .



3.



Ahora tenemos la capacidad de obtener la posici贸n del sat茅lite en un momento dado. Podemos usar esto para animar la trayectoria del sat茅lite.



Pero primero, veamos c贸mo animar un solo punto en el espacio usando CesiumJS .



Conectamos la biblioteca junto con los estilos:



<script src="https://cesium.com/downloads/cesiumjs/releases/1.81/Build/Cesium/Cesium.js"></script>
<link href="https://cesium.com/downloads/cesiumjs/releases/1.81/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
      
      





Creamos un contenedor:



<div id="cesiumContainer"></div>

      
      





A continuaci贸n, necesitamos inicializar el llamado visor. Le pasamos varias configuraciones adicionales para deshabilitar la funcionalidad que requiere un token de acceso:



const viewer = new Cesium.Viewer('cesiumContainer', {
  imageryProvider: new Cesium.TileMapServiceImageryProvider({
    url: Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"),
  }),
  baseLayerPicker: false, geocoder: false, homeButton: false, infoBox: false,
  navigationHelpButton: false, sceneModePicker: false
});
viewer.scene.globe.enableLighting = true;
      
      





Finalmente, podemos visualizar la posici贸n del sat茅lite como un punto rojo en el espacio:



const satellitePoint = viewer.entities.add({
  position: Cesium.Cartesian3.fromRadians(
    position.longitude, position.latitude, position.height * 1000
  ),
  point: { pixelSize: 5, color: Cesium.Color.RED }
});

      
      





Aqu铆 est谩 el c贸digo completo para este paso en Glitch .



4. Animando el camino



Para animar el camino, solo necesitamos obtener algunas posiciones futuras de sat茅lites m谩s. CesiumJS admite la interpolaci贸n (transici贸n) entre posiciones a lo largo del tiempo fuera de la caja.



La implementaci贸n de la animaci贸n es algo detallada. Aqu铆 est谩 el c贸digo Glitch correspondiente . Los conceptos m谩s importantes se describen a continuaci贸n.



Creamos SampledPositionProperty



. Este es un objeto que contiene las posiciones en el tiempo, entre las cuales se realiza la transici贸n:



const positionsOverTime = new Cesium.SampledPositionProperty();
      
      





Repetimos posiciones en cualquier cantidad, y para cada posici贸n creamos un objeto con tiempo, que se llama JulianDate



en CesiumJS, as铆 como la posici贸n en s铆 y los agregamos como muestra:



for (let i = 0; i < totalSeconds; i+= timestepInSeconds) {
  const time = Cesium.JulianDate.addSeconds(start, i, new Cesium.JulianDate());
  //     satellite-js
  const position = Cesium.Cartesian3.fromRadians(p.longitude, p.latitude, p.height * 1000);
  positionsOverTime.addSample(time, position);
}
      
      





Finalmente, pasamos positionsOverTime



a nuestro punto:



const satellitePoint = viewer.entities.add({
  position: positionsOverTime,
  point: { pixelSize: 5, color: Cesium.Color.RED }
});
      
      





El punto se mover谩 con la l铆nea de tiempo. Para conectar la c谩mara a un punto en movimiento, haga lo siguiente:



viewer.trackedEntity = satellitePoint;
      
      





Conclusi贸n



Espero que est茅 interesado en aprender un poco sobre c贸mo se crea el software de rastreo de sat茅lites. Por supuesto, muchas preguntas quedaron sin respuesta, por ejemplo, 驴qu茅 significa cada par谩metro de DNE? 驴Con qu茅 frecuencia se actualizan? 驴C贸mo se actualizan exactamente?



Personalmente, estaba muy interesado en conocer la existencia de dichos datos, c贸mo obtenerlos y usarlos directamente en el navegador usando JavaScript.



Aqu铆 hay un par de ideas sobre qu茅 m谩s puede hacer al respecto:





Aqu铆 hay un prototipo para la segunda idea en Glitch . Manifestaci贸n:.



Tambi茅n eche un vistazo a "Ver un sat茅lite esta noche" de James Darpinian, que utiliza una combinaci贸n de CesiumJS y Google Streets.



Adem谩s, aquellos que entienden / son aficionados al modelado 3D pueden imaginar sat茅lites no en forma de puntos, sino en escala real para demostrar lo cerca que est谩n unos de otros en el espacio.



Aprox. carril: mi versi贸n de la aplicaci贸n se ve as铆:





隆Gracias por su atenci贸n y que tenga un buen d铆a!






Los servidores en la nube de Macleod son r谩pidos y seguros.



Reg铆strese usando el enlace de arriba o haciendo clic en el banner y obtenga un 10% de descuento durante el primer mes de alquiler de un servidor de cualquier configuraci贸n.






All Articles