<p>This is not a satellite acquisition plan, but it may be something to get you started. I've used the Python package <a href="https://rhodesmill.org/skyfield/" rel="nofollow noreferrer">Skyfield</a> to get the subsatellite point of SMAP based on the most recent <a href="https://en.wikipedia.org/wiki/Two-line_element_set" rel="nofollow noreferrer">two line element set</a> from <a href="https://celestrak.org/NORAD/elements/" rel="nofollow noreferrer">Celestrak</a>.</p>
<p><em>Please feel feel free to leave comments with questions if a tweak is needed!</em></p>
<p>I'm not an expert on dates and times in Python, the <code>times</code> object has several conversion and formatting methods if you want to make a table.</p>
<p><a href="https://i.sstatic.net/NWC8t.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/NWC8t.png" alt="map of SMAP's subsatellite points on Earth for 24-Feb-2020" /></a></p>
<pre><code>#!/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(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] &gt; 10. # for SMAP this means that longitude has wrapped
lat, lon = lat[:-1], lon[:-1]
lon[breakpoints] = np.nan

if True:
    plt.figure()
    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
    plt.show()
</code></pre>

CC BY-SA 4.0
2020-02-23T09:10:21.217Z
Good start, but the sub-satellite point is not enough.  SMAP [scans at an incidence angle of 40°](https://www.wmo-sat.info/oscar/instruments/view/521), 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](https://pytroll.github.io) may have a package that can help for a more precise answer (pyorbital and pytroll-schedule, perhaps).
gerrit
CC BY-SA 4.0
2020-02-23T09:22:30.160Z
@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!
uhoh
CC BY-SA 4.0
2020-02-23T09:49:03.573Z
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).
gerrit
CC BY-SA 4.0
2020-02-23T10:01:17.437Z
@gerrit thanks, that would be super!
uhoh
CC BY-SA 4.0
2020-02-23T07:55:51.897Z
2020-02-23T07:55:51.897Z
2022-09-27T22:28:57.327Z
uhoh
<p>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 (<a href="https://github.com/pytroll/pyorbital" rel="noreferrer">https://github.com/pytroll/pyorbital</a>):</p>



<pre><code>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)
</code></pre>

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

<pre><code>[(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))]
</code></pre>

<p>Each tuple is <code>(rise, fall, highest point)</code>.</p>

<p>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:
<a href="https://github.com/pytroll/pytroll-schedule" rel="noreferrer">https://github.com/pytroll/pytroll-schedule</a></p>

CC BY-SA 4.0
2020-02-25T00:16:04.303Z
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!*
uhoh
CC BY-SA 4.0
2020-02-29T01:39:54.710Z
okay, a day or two *from now* I get behind in my stack exchanging from time to time...
uhoh
CC BY-SA 4.0
2020-02-24T08:18:55.977Z
2020-02-24T08:18:55.977Z
Martin Raspaud
<p>I need to know to which time the <a href="https://smap.jpl.nasa.gov/mission/description/" rel="nofollow noreferrer">SMAP</a> Satellite passes over a certain location in the future.</p>

<p>I believe this is called acquisition plan, but I'm not sure. Here for example the sentinel 1 <a href="https://sentinels.copernicus.eu/web/sentinel/missions/sentinel-1/observation-scenario/archive" rel="nofollow noreferrer">acquisition plan</a>. </p>

<p>I found this <a href="https://www.n2yo.com/satellite/?s=40376" rel="nofollow noreferrer">web page</a> where you can track the actual position of SMAP and get a 10day prediction but I need a more official source. </p>

CC BY-SA 4.0
2020-02-21T23:09:07.480Z
What about this site? https://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi Says that you should stick to about 5 days out max.
mkennedy
CC BY-SA 4.0
2020-02-22T18:24:24.237Z
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...
till Kadabra
CC BY-SA 4.0
2020-02-23T07:22:02.717Z
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*.
uhoh
CC BY-SA 4.0
2020-02-23T07:25:39.817Z
@uhoh Yes python is no problem, it would be nice if you can write a little answer ;)
till Kadabra
CC BY-SA 4.0
2020-02-23T07:28:13.727Z
hang on, doing so now!
uhoh
CC BY-SA 4.0
2020-02-23T09:23:10.570Z
have a look at the comment below my answer, there may be a much better answer out there!
uhoh
<satellites><nasa>
How to find SMAP Satellite acquisiton plan?
till Kadabra
# How to find SMAP Satellite acquisiton plan?

(Asked by: username_0 on 2020-02-21)

I need to know to which time the [SMAP](https://smap.jpl.nasa.gov/mission/description/) 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](https://sentinels.copernicus.eu/web/sentinel/missions/sentinel-1/observation-scenario/archive).

I found this [web page](https://www.n2yo.com/satellite/?s=40376) where you can track the actual position of SMAP and get a 10day prediction but I need a more official source.

**Tags:** satellites, nasa

> **Comments:**
> **username_1**: What about this site? https://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi Says that you should stick to about 5 days out max.  
> **username_0**: THX @username_1 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...  
> **username_2**: 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*.  
> **username_0**: @username_2 Yes python is no problem, it would be nice if you can write a little answer ;)  
> **username_2**: hang on, doing so now!  
> **username_2**: have a look at the comment below my answer, there may be a much better answer out there!  

---

## 2 answers

### Answer by username_4 on 2020-02-24. Score: 6 | Accepted answer

As @username_3 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

> **Comments:**
> **username_2**: 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!*  
> **username_2**: okay, a day or two *from now* I get behind in my stack exchanging from time to time...  

---

### Answer by username_2 on 2020-02-23. Score: 3

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.

#!/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(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.figure()
    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
    plt.show()

> **Comments:**
> **username_3**: Good start, but the sub-satellite point is not enough.  SMAP [scans at an incidence angle of 40°](https://www.wmo-sat.info/oscar/instruments/view/521), 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](https://pytroll.github.io) may have a package that can help for a more precise answer (pyorbital and pytroll-schedule, perhaps).  
> **username_2**: @username_3 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!  
> **username_3**: 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).  
> **username_2**: @username_3 thanks, that would be super!  

---

