Upgrade to Pro — share decks privately, control downloads, hide ads and more …

衛星の軌道をWeb地図上に表示する

 衛星の軌道をWeb地図上に表示する

FOSS4G LT会 #002 資料

イベント詳細: https://osgeojp.connpass.com/event/350766/
リポジトリ: https://github.com/sankichi92/react-sat-map

Avatar for Takahiro Miyoshi

Takahiro Miyoshi

May 27, 2025
Tweet

More Decks by Takahiro Miyoshi

Other Decks in Programming

Transcript

  1. يಓදࣔW TBUFMMJUFKTʹΑΔيಓ఻೻ import { degreesLat, degreesLong, eciToGeodetic, gstime, propagate, SatRec

    } from "satellite.js"; export function getLineCoordinates(satrec: SatRec, date: Date) { const orbitDuration = ((2 * Math.PI) / satrec.no) * 60; // 1पճ෼ʹ͔͔Δ࣌ؒ const step = orbitDuration / 360 // يಓΛे෼׈Β͔ʹදࣔͰ͖Δεςοϓ਺ (360) Ͱ෼ׂ // ֤࣌఺Ͱͷ࠲ඪΛܭࢉ const coordinates: [number, number][] = []; for (let elapsed = 0; elapsed < orbitDuration; elapsed += step) { const stepDate = new Date(date.getTime() + elapsed * 1000); const location = getSatelliteLocation(satrec, stepDate); if (!location) break; coordinates.push(location); } return coordinates; } function getSatelliteLocation(satrec: SatRec, date: Date) { const result = propagate(satrec, date); if (!result) return null; const { longitude, latitude } = eciToGeodetic(result.position, gstime(date)); return [degreesLong(longitude), degreesLat(latitude)] as [number, number]; } 
  2. NBQMJCSFPSHNBQMJCSFHMKTEPDTFYBNQMFTMJOF BDSPTTUINFSJEJBO w TBUFMMJUFKTͰܭࢉ͞ΕΔ࠲ඪ͸ ஍ٿத৺׳ੑ࠲ඪܥ &$*  w Ң౓ܦ౓ʹม׵͢Δͱܦ౓ͷ ൣғ͸

    ౰વ < >ʹͳΔ w  Z ͱ  Z ͷ఺Λ ੢͔Β౦ʹ݁Ϳʹ͸ˠ ౦͔Β੢ʹ݁Ϳʹ͸ˠ ͷॱʹ͢Δඞཁ͕͋Δ ౓ܦઢΛ·͙ͨ 
  3. يಓදࣔW ౓ܦઢΛ·͍ͨͰيಓΛ݁Ϳ function adjustLongitude(longitude: number, prevLongitude: number) { if (longitude

    - prevLongitude > 180) { // ੢͔Β౦΁180౓ܦઢΛ·͙ͨ৔߹ return longitude - 360; } else if (longitude - prevLongitude < -180) { // ౦͔Β੢΁180౓ܦઢΛ·͙ͨ৔߹ return longitude + 360; } else { return longitude; } } 
  4. يಓදࣔW ౓ܦઢΛճҎ্·ͨ͛ΔΑ͏ʹ͢Δ function adjustLongitude(longitude: number, prevLongitude: number) { // prevLongitude

    ͕ -360/360 Λ௒͍͑ͯΔ৔߹͸पճΛ߹ΘͤΔ let adjusted = longitude + Math.trunc(prevLongitude / 360) * 360; if (adjusted - prevLongitude > 180) { return adjusted - 360; } else if (adjusted - prevLongitude < -180) { return adjusted + 360; } else { return adjusted; } } 
  5. يಓͷܭࢉ݁ՌΛΩϟογϡ͢Δ w ͢Ͱʹܭࢉͨ͠يಓΛը໘ඳը͝ͱ ʹ࠶ܭࢉ͢Δͷ͸ແବ w يಓͷܭࢉ݁ՌΛΩϟογϡ W  w ͢Δͱલճͷঢ়ଶ͕࢒͍ͬͯΔͷͰ

    ܦ౓͕ݮΓ૿͑ଓ͚Δ w .BQ-JCSF(-+4ͷܦ౓ͷ Լݶ্ݶΛ௒͑ͯيಓ͕ফ͑Δ w ि͝ͱʹՃݮࢉͯ͠मਖ਼ W يಓදࣔW W