{ "cells": [ { "cell_type": "markdown", "id": "8031f1f2-8967-49aa-a17e-5dfcc3886372", "metadata": {}, "source": [ "# Collect Orbit and Ground Track\n", "\n", "This example demonstrates how to use direct function calls of the low-level TAT-C library to collect satellite orbit and ground tracks." ] }, { "cell_type": "markdown", "id": "0fa6372b-9767-4766-9a05-481987546084", "metadata": {}, "source": [ "Similar to the _Collect Observations_ example, the first steps are to define the satellites for the mission. This example again uses the NOAA-20 satellite with a two-line elements model from July 2022 and a VIIRS instrument with field of regard computed based on a 834km altitude and 3000km swath width. This example also adds an operational requirement that targets must be sunlit for valid observations." ] }, { "cell_type": "code", "execution_count": 1, "id": "0c1d2907-718f-4f5e-b4f4-7155a3592f29", "metadata": {}, "outputs": [], "source": [ "from tatc import utils\n", "from tatc.schemas import Instrument, Satellite, TwoLineElements\n", "\n", "viirs = Instrument(\n", " name=\"VIIRS\",\n", " field_of_regard=utils.swath_width_to_field_of_regard(834000, 3000000),\n", " req_target_sunlit=True,\n", ")\n", "noaa20 = Satellite(\n", " name=\"NOAA 20\",\n", " orbit=TwoLineElements(\n", " tle=[\n", " \"1 43013U 17073A 22195.78278435 .00000038 00000+0 38919-4 0 9996\",\n", " \"2 43013 98.7169 133.9110 0001202 63.8768 296.2532 14.19561306241107\",\n", " ]\n", " ),\n", " instruments=[viirs],\n", ")" ] }, { "cell_type": "markdown", "id": "e015eea4-88aa-45da-904c-0d39eba4cb6b", "metadata": {}, "source": [ "Next, we can identify the starting and ending times and sampling interval of a sample mission period. The starting time is noon UTC on July 14, 2022 and the ending time is 2 hours later (noon UTC on July 16, 2022). The sampling frequency is set to 2 minutes." ] }, { "cell_type": "code", "execution_count": 2, "id": "86a78faf-dae9-469e-b2c7-89526de6b929", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2022-07-14 12:00:00+00:00', '2022-07-14 12:02:00+00:00',\n", " '2022-07-14 12:04:00+00:00', '2022-07-14 12:06:00+00:00',\n", " '2022-07-14 12:08:00+00:00', '2022-07-14 12:10:00+00:00',\n", " '2022-07-14 12:12:00+00:00', '2022-07-14 12:14:00+00:00',\n", " '2022-07-14 12:16:00+00:00', '2022-07-14 12:18:00+00:00',\n", " '2022-07-14 12:20:00+00:00', '2022-07-14 12:22:00+00:00',\n", " '2022-07-14 12:24:00+00:00', '2022-07-14 12:26:00+00:00',\n", " '2022-07-14 12:28:00+00:00', '2022-07-14 12:30:00+00:00',\n", " '2022-07-14 12:32:00+00:00', '2022-07-14 12:34:00+00:00',\n", " '2022-07-14 12:36:00+00:00', '2022-07-14 12:38:00+00:00',\n", " '2022-07-14 12:40:00+00:00', '2022-07-14 12:42:00+00:00',\n", " '2022-07-14 12:44:00+00:00', '2022-07-14 12:46:00+00:00',\n", " '2022-07-14 12:48:00+00:00', '2022-07-14 12:50:00+00:00',\n", " '2022-07-14 12:52:00+00:00', '2022-07-14 12:54:00+00:00',\n", " '2022-07-14 12:56:00+00:00', '2022-07-14 12:58:00+00:00',\n", " '2022-07-14 13:00:00+00:00', '2022-07-14 13:02:00+00:00',\n", " '2022-07-14 13:04:00+00:00', '2022-07-14 13:06:00+00:00',\n", " '2022-07-14 13:08:00+00:00', '2022-07-14 13:10:00+00:00',\n", " '2022-07-14 13:12:00+00:00', '2022-07-14 13:14:00+00:00',\n", " '2022-07-14 13:16:00+00:00', '2022-07-14 13:18:00+00:00',\n", " '2022-07-14 13:20:00+00:00', '2022-07-14 13:22:00+00:00',\n", " '2022-07-14 13:24:00+00:00', '2022-07-14 13:26:00+00:00',\n", " '2022-07-14 13:28:00+00:00', '2022-07-14 13:30:00+00:00',\n", " '2022-07-14 13:32:00+00:00', '2022-07-14 13:34:00+00:00',\n", " '2022-07-14 13:36:00+00:00', '2022-07-14 13:38:00+00:00',\n", " '2022-07-14 13:40:00+00:00', '2022-07-14 13:42:00+00:00',\n", " '2022-07-14 13:44:00+00:00', '2022-07-14 13:46:00+00:00',\n", " '2022-07-14 13:48:00+00:00', '2022-07-14 13:50:00+00:00',\n", " '2022-07-14 13:52:00+00:00', '2022-07-14 13:54:00+00:00',\n", " '2022-07-14 13:56:00+00:00', '2022-07-14 13:58:00+00:00',\n", " '2022-07-14 14:00:00+00:00'],\n", " dtype='datetime64[ns, UTC]', freq='2min')" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from datetime import datetime, timedelta, timezone\n", "import pandas as pd\n", "\n", "start = datetime(year=2022, month=7, day=14, hour=12, tzinfo=timezone.utc)\n", "end = start + timedelta(hours=2)\n", "delta = timedelta(minutes=2)\n", "times = pd.date_range(start, end, freq=delta)\n", "display(times)" ] }, { "cell_type": "markdown", "id": "8181aa79-faf6-4cfb-8084-f4d4cbbd1f17", "metadata": {}, "source": [ "The `collect_orbit_track` method can be called generates points representing the orbital motion of the satellite during the mission. Results are formatted as a flat GeoDataFrame which is similar to a regular pandas DataFrame with a geospatial column labeled `geometry`. Other columns:\n", " * `time`: sample time\n", " * `swath_width`: projected instrument swath width (m) based on the specified field of regard\n", " * `valid_obs`: boolean whether the observation is \"valid\" given instrument operational requirements (e.g., sunlit target)" ] }, { "cell_type": "code", "execution_count": 3, "id": "c45520b9-15b8-40cd-96a6-62d5b0c0041f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | time | \n", "satellite | \n", "instrument | \n", "swath_width | \n", "valid_obs | \n", "geometry | \n", "
|---|---|---|---|---|---|---|
| 0 | \n", "2022-07-14 12:00:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.979477e+06 | \n", "True | \n", "POINT Z (37.6979 -4.30588 829604.57272) | \n", "
| 1 | \n", "2022-07-14 12:02:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.974766e+06 | \n", "True | \n", "POINT Z (36.12013 2.75031 828593.05309) | \n", "
| 2 | \n", "2022-07-14 12:04:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.972688e+06 | \n", "True | \n", "POINT Z (34.52934 9.80636 828146.68837) | \n", "
| 3 | \n", "2022-07-14 12:06:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.973169e+06 | \n", "True | \n", "POINT Z (32.89116 16.85703 828250.04018) | \n", "
| 4 | \n", "2022-07-14 12:08:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.975986e+06 | \n", "True | \n", "POINT Z (31.16516 23.89678 828855.11416) | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 56 | \n", "2022-07-14 13:52:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.982254e+06 | \n", "True | \n", "POINT Z (3.4244 32.68312 830200.45961) | \n", "
| 57 | \n", "2022-07-14 13:54:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.988873e+06 | \n", "True | \n", "POINT Z (1.27216 39.67388 831619.33214) | \n", "
| 58 | \n", "2022-07-14 13:56:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.996330e+06 | \n", "True | \n", "POINT Z (-1.25039 46.62707 833215.3123) | \n", "
| 59 | \n", "2022-07-14 13:58:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "3.004037e+06 | \n", "True | \n", "POINT Z (-4.366 53.525 834862.31502) | \n", "
| 60 | \n", "2022-07-14 14:00:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "3.011412e+06 | \n", "True | \n", "POINT Z (-8.49191 60.33504 836435.88815) | \n", "
61 rows × 6 columns
\n", "| \n", " | time | \n", "satellite | \n", "instrument | \n", "swath_width | \n", "valid_obs | \n", "geometry | \n", "
|---|---|---|---|---|---|---|
| 0 | \n", "2022-07-14 12:00:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.979477e+06 | \n", "True | \n", "POLYGON Z ((51.08044 -4.30588 0, 51.016 -5.617... | \n", "
| 1 | \n", "2022-07-14 12:02:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.974766e+06 | \n", "True | \n", "POLYGON Z ((49.48151 2.75031 0, 49.41718 1.440... | \n", "
| 2 | \n", "2022-07-14 12:04:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.972688e+06 | \n", "True | \n", "POLYGON Z ((47.88139 9.80636 0, 47.8171 8.4976... | \n", "
| 3 | \n", "2022-07-14 12:06:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.973169e+06 | \n", "True | \n", "POLYGON Z ((46.24537 16.85703 0, 46.18107 15.5... | \n", "
| 4 | \n", "2022-07-14 12:08:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.975986e+06 | \n", "True | \n", "POLYGON Z ((44.53202 23.89678 0, 44.46766 22.5... | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 56 | \n", "2022-07-14 13:52:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.982254e+06 | \n", "True | \n", "POLYGON Z ((16.81942 32.68312 0, 16.75492 31.3... | \n", "
| 57 | \n", "2022-07-14 13:54:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.988873e+06 | \n", "True | \n", "POLYGON Z ((14.69691 39.67388 0, 14.63227 38.3... | \n", "
| 58 | \n", "2022-07-14 13:56:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "2.996330e+06 | \n", "True | \n", "POLYGON Z ((12.20786 46.62707 0, 12.14305 45.3... | \n", "
| 59 | \n", "2022-07-14 13:58:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "3.004037e+06 | \n", "True | \n", "POLYGON Z ((9.12686 53.525 0, 9.06189 52.20247... | \n", "
| 60 | \n", "2022-07-14 14:00:00+00:00 | \n", "NOAA 20 | \n", "VIIRS | \n", "3.011412e+06 | \n", "True | \n", "POLYGON Z ((5.03408 60.33504 0, 4.96895 59.009... | \n", "
61 rows × 6 columns
\n", "