Melacak dan memvisualisasikan posisi ISS dengan 30 baris kode JavaScript





Saya menyampaikan kepada Anda terjemahan dari artikel yang luar biasa ini .



Dalam tutorial ini, kami akan membuat aplikasi web yang memvisualisasikan posisi satelit apa pun, misalnya, Stasiun Luar Angkasa Internasional (selanjutnya - ISS), secara real time (yah, hampir).



Kami akan membangun aplikasi dari awal dan mencoba peran sebagai ilmuwan roket sejati.



  • Kami akan mencari tahu di mana menemukan data untuk masing-masing satelit, yang dikenal sebagai set elemen dua baris (TLE ).
  • Kami menggunakan perpustakaan "satellite-js" untuk memprediksi orbit satelit dari DNE (bagian ini terkait langsung dengan ilmu roket)
  • Kami menggunakan pustaka "CesiumJS" untuk memberikan hasil, namun, Anda dapat menggunakan pustaka / mesin apa pun yang dapat bekerja dengan bujur, lintang dan ketinggian.


Pratinjau hasil akhir:





Di sini kita melihat pergerakan ISS di orbit dengan kecepatan meningkat 40 kali lipat. Untuk melihat posisi ISS saat ini, klik ikon jam di sudut kiri atas panel kontrol.



1. Memperoleh DNE



DNE adalah format data yang menggambarkan pergerakan suatu benda yang mengorbit bumi. Itu dibuat oleh Komando Pertahanan Dirgantara Amerika Utara (NORAD). Anda dapat membaca lebih lanjut tentang sejarah pembuatannya di sini .



Memiliki gambaran tentang orbit, kita dapat memprediksi lokasi di mana satelit akan berada setiap saat (lihat di bawah).



Ini berarti bahwa sebagian besar alat pelacak satelit tidak melakukannya dalam waktu nyata. Alih-alih menerima data yang terus diperbarui, seperti saat melacak pergerakan mobil, mereka menggunakan DNE terbaru yang tersedia untuk memprediksi posisi objek pada titik waktu tertentu.



Di mana kami bisa mendapatkan DNE? Tidak ada registri global dengan data seperti itu. Untuk publikasi dan pemutakhiran data ini untuk komunitas luar angkasa, orang yang memiliki satelit ini atau itu yang bertanggung jawab (tentu saja, jika kita tidak berbicara tentang satelit mata-mata).



Kami dapat menemukan DNE di situs web Space Track , yang merupakan registri United States Space Command.



Sumber lain adalah daftar CeleStrak ini , dikelola oleh Dr. TS Kelso.



Kami akan menggunakan yang terakhir karena tidak memerlukan registrasi. Untuk menemukan DNE untuk ISS, klik tautan Stasiun Luar Angkasa .



Yang pertama dalam daftar adalah 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

      
      





Arti dari angka-angka ini dapat ditemukan di tabel ini . Kebanyakan dari mereka adalah pengidentifikasi dan metadata satelit, misalnya, saat diluncurkan.



Pada sumber daya yang ditentukan, Anda dapat menemukan DNE untuk satelit meteorologi, satelit GPS, dan bahkan untuk sistem satelit global Starlink , yang digunakan oleh SpaceX.



2. Memprediksi orbit satelit



Langkah kita selanjutnya adalah mengubah DNE menjadi posisi waktu tertentu.



Kami akan menggunakan satellite-js untuk ini .



Kami menghubungkan perpustakaan dari CDN:



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

      
      





Lalu kami memberinya DNE dan waktu:



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); //  

      
      





Kami sekarang memiliki posisi satelit saat ini ( new Date()



).



Posisi ini adalah hasil dari pembuatan model gerakan satelit tertentu. Model ini disebut SGP4 / SDP4. Semua DNE mengikuti pola ini.



Jika Anda bertanya-tanya seberapa akurat model ini, jawaban singkatnya adalah: ini bergantung pada beberapa faktor .



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



3.



Sekarang kami memiliki kemampuan untuk mendapatkan posisi satelit pada saat tertentu. Kita dapat menggunakan ini untuk menganimasikan jalur satelit.



Tapi pertama-tama, mari kita lihat cara menganimasikan satu titik dalam ruang menggunakan CesiumJS .



Kami menghubungkan perpustakaan bersama dengan gaya:



<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">
      
      





Kami membuat wadah:



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

      
      





Selanjutnya, kita perlu menginisialisasi apa yang disebut viewer. Kami memberikan beberapa pengaturan tambahan untuk menonaktifkan fungsionalitas yang membutuhkan token akses:



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;
      
      





Terakhir, kita dapat memvisualisasikan posisi satelit sebagai titik merah di luar angkasa:



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

      
      





Berikut adalah kode lengkap untuk langkah ini di Glitch .



4. Membuat animasi jalur



Untuk menganimasikan jalur, kita hanya perlu mendapatkan beberapa posisi satelit masa depan. CesiumJS mendukung interpolasi (transisi) antara posisi dari waktu ke waktu.



Implementasi animasinya agak bertele-tele. Berikut adalah kode Glitch yang sesuai . Konsep terpenting dijelaskan di bawah ini.



Kami menciptakan SampledPositionProperty



. Ini adalah objek yang berisi posisi dalam waktu, di mana transisi dilakukan:



const positionsOverTime = new Cesium.SampledPositionProperty();
      
      





Kami mengulangi posisi dalam jumlah berapa pun, dan untuk setiap posisi kami membuat objek dengan waktu, yang disebut JulianDate



dalam CesiumJS, serta posisi itu sendiri dan menambahkannya sebagai sampel:



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);
}
      
      





Akhirnya, kami meneruskan positionsOverTime



ke poin kami:



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





Intinya akan bergerak mengikuti garis waktu. Untuk memasang kamera ke titik bergerak, lakukan hal berikut:



viewer.trackedEntity = satellitePoint;
      
      





Kesimpulan



Saya harap Anda tertarik untuk mempelajari sedikit tentang bagaimana perangkat lunak pelacakan satelit dibuat. Tentu saja, banyak pertanyaan tetap tidak terjawab, misalnya, apa arti setiap parameter DNE? Seberapa sering mereka diperbarui? Bagaimana tepatnya mereka diperbarui?



Secara pribadi saya sangat tertarik untuk mempelajari tentang keberadaan data tersebut, cara mendapatkan dan menggunakannya langsung di browser menggunakan JavaScript.



Berikut adalah beberapa ide tentang hal lain yang dapat Anda lakukan:





Ini prototipe untuk ide kedua di Glitch . Demo :.



Lihat juga "See a satellite tonight" oleh James Darpinian, yang menggunakan kombinasi CesiumJS dan Google Streets.



Selain itu, mereka yang memahami / menyukai pemodelan 3D dapat membayangkan satelit tidak dalam bentuk titik, tetapi dalam skala nyata untuk menunjukkan seberapa dekat satu sama lain di luar angkasa.



Approx. jalur: versi aplikasi saya terlihat seperti ini:





Terima kasih atas perhatian Anda dan semoga hari Anda menyenangkan!






Server cloud dari Macleod cepat dan aman.



Daftar menggunakan tautan di atas atau dengan mengklik spanduk dan dapatkan diskon 10% untuk bulan pertama menyewa server dengan konfigurasi apa pun!






All Articles