4
$\begingroup$

I'm learning basic astrodynamics, and I have a question that I cannot find on the Internet (maybe I'm not looking hard enough).

My question is, is there a way to predict how many periods would a satellite need to pass over a specific point on Earth, if not in the current period, maybe in next n periods? or to calculate if it ever will?

Being more specific, let's say at some point in the current period the satellite will fly-over city A, but not in the city B. Now, we know that after each period, the orbit shifts westwards, meaning that it might not fly-over city A in that period, but it might fly-over city B. How do you calculate the number of periods, or the time, it would take for the satellite's orbit to be aligned with city B, if ever?

Here's a shitty image I drew for visualization purposes .. :)

enter image description here

Thanks! :)

$\endgroup$
9
  • 1
    $\begingroup$ See the paper "A Novel Technique to Compute the Revisit Time of Satellites and Its Application in Remote Sensing Satellite Optimization Design" downloads.hindawi.com/journals/ijae/2017/6469439.pdf $\endgroup$
    – Uwe
    Commented Nov 15, 2020 at 17:56
  • $\begingroup$ Another paper "Theory of satellite ground-track crossovers" geodesy.geology.ohio-state.edu/course/refpapers/… $\endgroup$
    – Uwe
    Commented Nov 15, 2020 at 18:00
  • $\begingroup$ More to read "Development of the Satellite Groundtrack Interactive Display" user.eng.umd.edu/~healy/sgid/paper.pdf $\endgroup$
    – Uwe
    Commented Nov 15, 2020 at 18:07
  • 2
    $\begingroup$ "Pass over" is a somewhat vague term. It could mean directly under the satellite's footprint, ground visible from the satellite, the satellite visible from the ground, or within some arbitrary angle. Can you please clarify the question? $\endgroup$
    – DrSheldon
    Commented Nov 15, 2020 at 18:15
  • $\begingroup$ See this question "Better way to get approximate ground track for a satellite using Skyfield?" space.stackexchange.com/questions/19339/… $\endgroup$
    – Uwe
    Commented Nov 15, 2020 at 18:15

2 Answers 2

4
$\begingroup$

Using Python code How do I determine the ground-track period of ... from uhoh:

and Great Circle Distances in Python from Chris Webb, I wrote a program to plot the distance of the ISS ground track to a given reference point on Earth during 4 days after November 17, 2020.

enter image description here

The minimum distance is 113.81 km, calculated every minute of 4 days. The ISS moves very fast, using a smaller stepsize changes the minimum found.

every 60 seconds of 2 days :  150.12 km
every 30 seconds of 2 days :   71.40 km
every 15 seconds of 2 days :   55.43 km

But a calculation for every 5 seconds of 4 days requires too much memory and time.

The orbit height and period of the ISS is not constant, see ISS Height. So only a prediction for some days is possible but not for longer time and eventual re-boosts.

import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Loader, Topos, EarthSatellite
import greatcircle

TLE = """1 44303U 98067QA  20320.43936697  .00008076  00000-0  12168-3 0  9990
2 44303  51.6405 305.3910 0005107 159.4387 200.6810 15.55769424 83251
"""

L1, L2 = TLE.splitlines()

load    = Loader('~/Documents/fishing/SkyData')  # avoids multiple copies of large files
data    = load('de421.bsp')
earth   = data['earth']
ts      = load.timescale(builtin=True)

minutes = np.arange(60. * 24 * 4)           # four days
time    = ts.utc(2020, 11, 17, 0, minutes)  # start November 17, 2020

ISS     = EarthSatellite(L1, L2)

subpoint = ISS.at(time).subpoint()

lon      = subpoint.longitude.degrees
lat      = subpoint.latitude.degrees

# great circle distance
if True :
    # reference point on Earth for distance calculation
    ref_point_lat = 49.619832
    ref_point_lon = 11.037711

    gc = greatcircle.GreatCircle()
    MEAN_EARTH_RADIUS_KM = 6371

    gc.name1 = "reference point"
    gc.latitude1_degrees = ref_point_lat
    gc.longitude1_degrees = ref_point_lon

    dist_km = np.zeros_like(lat, float)
    hours = np.zeros_like(lat, float)
    
    gc.name2 = "ISS"
    min_dist = 2.0 * np.pi * MEAN_EARTH_RADIUS_KM
    for i in range(len(lat)) :
        gc.latitude2_degrees = lat[i]
        gc.longitude2_degrees = lon[i]
        gc.calculate()
        if gc.valid == True :
            dist_km[i] = MEAN_EARTH_RADIUS_KM * gc.central_angle_radians
        hours[i] = minutes[i] / 60.

        min_dist = min(dist_km[i], min_dist)  # finding minimum distance
        
    print('minimum distance {: 5.2f} km'.format( min_dist))
        
    fig, ax = plt.subplots(figsize=(6, 6))
    plt.plot(hours, dist_km)
    ax.set_title("ISS pass over a specific point on Earth")
    ax.set_xlabel('time hours')
    ax.set_ylabel('distance km')
    plt.show()
$\endgroup$
0
2
$\begingroup$

I found it in the meantime:

Using the length_of function to check an arcminute length, a meridian, the equator and pole diameter:

from skyfield.api import Topos, load
from skyfield.functions import length_of

ts = load.timescale(builtin=True)
t = ts.utc(2021, 1, 1)

b1 = Topos(0., 0., elevation_m=0.0)
b2 = Topos(1. / 60., 0., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b2.at(t).position.km), 5))

b3 = Topos(90., 0., elevation_m=0.0)
b2 = Topos(90.0 - 1. / 60., 0., elevation_m=0.0)
print(round(length_of(b3.at(t).position.km - b2.at(t).position.km), 5))

b2 = Topos(0., 1. / 60., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b2.at(t).position.km), 5))

b4 = Topos(90., 0., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b4.at(t).position.km), 3))

b5 = Topos(0., 180., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b5.at(t).position.km), 3))

b6 = Topos(-90., 0., elevation_m=0.0)
print(round(length_of(b4.at(t).position.km - b6.at(t).position.km), 3))

#Meridianminute of geographic lattitude at the equator 1842.90 m,
#but at the poles 1861.57 m
#arclength of an arcminute at the equator 1855.31 m.
#a meridian from equator up to a pole 10,001.966 km
#equator diameter    12,756.27 km
#pole diameter    12,713.50 km    

The results are very precise:

  • 1.8429 km
  • 1.86157 km
  • 1.85532 km
  • 9004.939 km
  • 12756.273 km
  • 12713.504 km

Of course the meridian is measured thru the ground and not at the surface, therefore 9004.939 instead of 10,001.966 km, straight line, no great circle.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.