I need to know to which time the SMAP Satellite passes over a certain location in the future.

I believe this is called acquisition plan, but I'm not sure. Here for example the sentinel 1 acquisition plan.

I found this web page where you can track the actual position of SMAP and get a 10day prediction but I need a more official source.

  • 1
    $\begingroup$ What about this site? cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi Says that you should stick to about 5 days out max. $\endgroup$
    – mkennedy
    Feb 21, 2020 at 23:09
  • $\begingroup$ THX @mkennedy That's a better site than I found but I still can't believe that they don't have something like an .kml file for the flight paths of SMAP maybe its not public for some reason... $\endgroup$ Feb 22, 2020 at 18:24
  • 1
    $\begingroup$ Can you use even a little Python? I can add a script that will give you something like what you need. It may not be the answer that you want to accept, but it will at least give you something. $\endgroup$
    – uhoh
    Feb 23, 2020 at 7:22
  • 1
    $\begingroup$ @uhoh Yes python is no problem, it would be nice if you can write a little answer ;) $\endgroup$ Feb 23, 2020 at 7:25
  • 1
    $\begingroup$ hang on, doing so now! $\endgroup$
    – uhoh
    Feb 23, 2020 at 7:28

2 Answers 2


As @gerrit pointed out, the Pytroll project has a couple of package which could be useful. To answer your question and get the next overpasses for the next twelve hours above a given location, you can use Pyorbital (https://github.com/pytroll/pyorbital):

from pyorbital.orbital import Orbital
from datetime import datetime
orb = Orbital("SMAP")
orb.get_next_passes(datetime.now(), length=12, lon=16, lat=55, alt=0.05)

with length in hours, lon and lat in degrees, alt in km. And this will display (at the time of writing this):

[(datetime.datetime(2020, 2, 24, 13, 14, 54, 147587),
  datetime.datetime(2020, 2, 24, 13, 23, 23, 955297),
  datetime.datetime(2020, 2, 24, 13, 19, 8, 924860)),
 (datetime.datetime(2020, 2, 24, 14, 48, 41, 249324),
  datetime.datetime(2020, 2, 24, 15, 1, 24, 171709),
  datetime.datetime(2020, 2, 24, 14, 55, 1, 725148)),
 (datetime.datetime(2020, 2, 24, 16, 25, 14, 798347),
  datetime.datetime(2020, 2, 24, 16, 39, 0, 109628),
  datetime.datetime(2020, 2, 24, 16, 32, 5, 434271)),
 (datetime.datetime(2020, 2, 24, 18, 5, 14, 617775),
  datetime.datetime(2020, 2, 24, 18, 15, 43, 280401),
  datetime.datetime(2020, 2, 24, 18, 10, 27, 671621))]

Each tuple is (rise, fall, highest point).

Now we also have the pytroll-schedule package, in case you need to make a full acquisition plan, that will allow you for example to put priorities on satellites: https://github.com/pytroll/pytroll-schedule

  • $\begingroup$ It's great when a new user stops by and introduces us to a new Earth Science tool! Please keep an eye on the site, I plan on posting a follow-up question in a day or two. Thanks! $\endgroup$
    – uhoh
    Feb 25, 2020 at 0:16
  • $\begingroup$ okay, a day or two from now I get behind in my stack exchanging from time to time... $\endgroup$
    – uhoh
    Feb 29, 2020 at 1:39

This is not a satellite acquisition plan, but it may be something to get you started. I've used the Python package Skyfield to get the subsatellite point of SMAP based on the most recent two line element set from Celestrak.

Please feel feel free to leave comments with questions if a tweak is needed!

I'm not an expert on dates and times in Python, the times object has several conversion and formatting methods if you want to make a table.

map of SMAP's subsatellite points on Earth for 24-Feb-2020

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from skyfield.api import Topos, load
import numpy as np
import matplotlib.pyplot as plt

# mostly from https://rhodesmill.org/skyfield/earth-satellites.html
resource_satellites_url = 'https://celestrak.org/NORAD/elements/resource.txt'
resource_satellites = load.tle(resource_satellites_url)
SMAP = resource_satellites['SMAP']
print('epoch of the SMAP TLE found: ', SMAP.epoch.utc_jpl())

ts = load.timescale()

days = ts.now() - SMAP.epoch
print('{:.3f} days away from epoch'.format(days))

# still from that example:
bluffton = Topos('40.8939 N', '83.8917 W')
t0 = ts.utc(2020, 2, 23)
t1 = ts.utc(2020, 2, 24)
t, events = SMAP.find_events(bluffton, t0, t1, altitude_degrees=30.0)
for ti, event in zip(t, events):
    name = ('rise above 30°', 'culminate', 'set below 30°')[event]
    print(ti.utc_jpl(), name)

# WARNING I've hard coded a date here, if you run this later the TLE retrieved
# will be newer and so will be less accurate. You'd like the TLE you use to be within
# a few weeks (if not a few days) of your date for best accuracy.

minutes = range(24*60+1)
times = ts.utc(2020, 2, 24, 0, minutes, 0) # Example; every minute for 24-feb-2020

subsat_pts = SMAP.at(times).subpoint()
lat, lon = subsat_pts.latitude.degrees, subsat_pts.longitude.degrees

subsat_pts_now = SMAP.at(ts.now()).subpoint()
lat_now, lon_now = subsat_pts_now.latitude.degrees, subsat_pts_now.longitude.degrees

# fudging around to keep the plot from wrapping arond the Earth 
breakpoints = lon[1:] - lon[:-1] > 10. # for SMAP this means that longitude has wrapped
lat, lon = lat[:-1], lon[:-1]
lon[breakpoints] = np.nan

if True:
    plt.plot(lon, lat)
    plt.title('SMAP map every minute for 24-feb-2020, dot is for ts.now()')
    plt.xlabel('longitude (degs)')
    plt.ylabel('latitude (degs)')
    plt.plot([lon_now], [lat_now], 'ok') # put a dot for right now
  • 2
    $\begingroup$ Good start, but the sub-satellite point is not enough. SMAP scans at an incidence angle of 40°, so you'd need to simulate where it's actually viewing. Swath width is about 1000 km, so the easiest simulation is to make your lines 1000 km thick. Pytroll may have a package that can help for a more precise answer (pyorbital and pytroll-schedule, perhaps). $\endgroup$
    – gerrit
    Feb 23, 2020 at 9:10
  • $\begingroup$ @gerrit oh this looks very interesting! I'm going to take a long look but hopefully the OP can make use of this directly; I'll add a comment above, thanks! $\endgroup$
    – uhoh
    Feb 23, 2020 at 9:22
  • 2
    $\begingroup$ I've pinged the pytroll-schedule experts in their slack, perhaps one of them can come along to show an example (probably not on Sunday morning, though). $\endgroup$
    – gerrit
    Feb 23, 2020 at 9:49
  • $\begingroup$ @gerrit thanks, that would be super! $\endgroup$
    – uhoh
    Feb 23, 2020 at 10:01

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.