<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](https://rhodesmill.org/skyfield/) to get the subsatellite point of SMAP based on the most recent [two line element set](https://en.wikipedia.org/wiki/Two-line_element_set) from [Celestrak](https://celestrak.org/NORAD/elements/).

*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](https://i.sstatic.net/NWC8t.png)](https://i.sstatic.net/NWC8t.png)

```
#!/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!  

---

