<p>I'd like to add a great red spot transit feature to a personal Android app I'm writing and was looking to utilize the IMCEE Great Red Spot API located here: <a href="https://ssp.imcce.fr/webservices/vo-tools/jgrs/" rel="nofollow noreferrer">https://ssp.imcce.fr/webservices/vo-tools/jgrs/</a></p>
<p>Here is the API <a href="https://ssp.imcce.fr/webservices/vo-tools/jgrs/transit/" rel="nofollow noreferrer">https://ssp.imcce.fr/webservices/vo-tools/jgrs/transit/</a></p>
<p>I was expecting to see a set of events that would be separated roughly by Jupiter's rotational period (9.925 hours).</p>
<p>Here is some example Python code (I prototype in a python jupyter notebook before moving to kotlin):</p>
<pre><code>def parse_and_calculate_deltas(api_url):
    try:
        # Fetch the API response
        response = requests.get(api_url)
        response.raise_for_status()
        data = response.json()

        # Extract the list of events
        events = data.get(&quot;data&quot;, [])

        # Check if events exist
        if not events:
            print(&quot;No events found in the API response.&quot;)
            return

        # Parse dates and calculate deltas
        dates = [
            datetime.strptime(event[&quot;Transit date&quot;], &quot;%Y-%m-%dT%H:%M:%S.%f&quot;)
            if &quot;.&quot; in event[&quot;Transit date&quot;] else datetime.strptime(event[&quot;Transit date&quot;], &quot;%Y-%m-%dT%H:%M:%S&quot;)
            for event in events
        ]
        deltas = [dates[i + 1] - dates[i] for i in range(len(dates) - 1)]

        # Convert deltas to hours, minutes, and seconds
        delta_strings = [None] + [
            f&quot;{delta.seconds // 3600}h {delta.seconds % 3600 // 60}m {delta.seconds % 60}s&quot;
            for delta in deltas
        ]

        # Create a DataFrame for better visualization
        df = pd.DataFrame({
            &quot;Transit Date&quot;: dates,
            &quot;Sub-observer Longitude&quot;: [event[&quot;SEP long&quot;] for event in events],
            &quot;Sub-observer Latitude&quot;: [event[&quot;SEP lat&quot;] for event in events],
            &quot;Sub-solar Longitude&quot;: [event[&quot;SSP long&quot;] for event in events],
            &quot;Sub-solar Latitude&quot;: [event[&quot;SSP lat&quot;] for event in events],
            &quot;North Pole Position Angle&quot;: [event[&quot;NP&quot;] for event in events],
            &quot;Angular Distance of Pole (arcsec)&quot;: [event[&quot;dPole&quot;] for event in events],
            &quot;Delta (h:m:s)&quot;: delta_strings  # Add None for the first row since there's no previous event
        })

        return df

    except Exception as e:
        print(f&quot;An error occurred: {e}&quot;)

# Fetching and parsing transit events
api_url = &quot;https://ssp.imcce.fr/webservices/vo-tools/jgrs/transit/&quot;
parse_and_calculate_deltas(api_url)
</code></pre>
<p>Which for today yields the following
<a href="https://i.sstatic.net/VQg0Lrth.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/VQg0Lrth.png" alt="output" /></a></p>
<p>I'm obviously misinterpreting the data, and so was wondering if anyone else had experience with the API or how to interpret the response.  Ultimately I'm looking for how to take this, and determine when the GRS would be visible (so I can haul out my telescope and photograph when it is in view)</p>
<p>Here is the full json response for the output above</p>
<pre><code>{
  &quot;sso&quot;: {
    &quot;num&quot;: &quot;5&quot;,
    &quot;name&quot;: &quot;Jupiter&quot;,
    &quot;type&quot;: &quot;planet&quot;,
    &quot;parameters&quot;: {
      &quot;physical_model&quot;: &quot;IAU 2015 - 2&quot;,
      &quot;diameter&quot;: 139822
    }
  },
  &quot;coosys&quot;: {
    &quot;epoch&quot;: &quot;J2000&quot;,
    &quot;equinox&quot;: &quot;J2000&quot;,
    &quot;system&quot;: &quot;eq_ICRF&quot;
  },
  &quot;ephemeris&quot;: {
    &quot;time_scale&quot;: &quot;UTC&quot;,
    &quot;planetary_theory&quot;: &quot;INPOP19&quot;,
    &quot;coordinates&quot;: &quot;spherical&quot;,
    &quot;reference_frame&quot;: {
      &quot;type&quot;: &quot;apparent (true equator; equinoxe of the date)&quot;,
      &quot;plane&quot;: &quot;equator&quot;,
      &quot;center&quot;: &quot;geocenter&quot;
    }
  },
  &quot;data&quot;: [
    {
      &quot;Transit date&quot;: &quot;2024-12-28T01:32:18.828&quot;,
      &quot;SEP long&quot;: 172.891126612812,
      &quot;SEP lat&quot;: 3.22669298430259,
      &quot;SSP long&quot;: 168.526477854944,
      &quot;SSP lat&quot;: 3.07402609538857,
      &quot;NP&quot;: 353.284099818271,
      &quot;dPole&quot;: 22.1103280863309
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T02:55:05.567&quot;,
      &quot;SEP long&quot;: 222.92364722055,
      &quot;SEP lat&quot;: 3.22651294109229,
      &quot;SSP long&quot;: 218.547372163018,
      &quot;SSP lat&quot;: 3.07386846778455,
      &quot;NP&quot;: 353.28113768721,
      &quot;dPole&quot;: 22.1083002731458
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T07:42:05.605&quot;,
      &quot;SEP long&quot;: 36.3898609730614,
      &quot;SEP lat&quot;: 3.22588720761184,
      &quot;SSP long&quot;: 31.9733286376951,
      &quot;SSP lat&quot;: 3.07332178943842,
      &quot;NP&quot;: 353.270891724712,
      &quot;dPole&quot;: 22.1012335191697
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T09:04:03.361&quot;,
      &quot;SEP long&quot;: 85.9289040138932,
      &quot;SEP lat&quot;: 3.22570807902889,
      &quot;SSP long&quot;: 81.500889732293,
      &quot;SSP lat&quot;: 3.07316561811084,
      &quot;NP&quot;: 353.267972501389,
      &quot;dPole&quot;: 22.0992050839222
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T12:40:51.656&quot;,
      &quot;SEP long&quot;: 216.967958210356,
      &quot;SEP lat&quot;: 3.22523333672039,
      &quot;SSP long&quot;: 212.509604267847,
      &quot;SSP lat&quot;: 3.07275241356128,
      &quot;NP&quot;: 353.26026541801,
      &quot;dPole&quot;: 22.0938175580953
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T15:16:07.976&quot;,
      &quot;SEP long&quot;: 310.815862136265,
      &quot;SEP lat&quot;: 3.22489251841443,
      &quot;SSP long&quot;: 306.33580812772,
      &quot;SSP lat&quot;: 3.07245638973203,
      &quot;NP&quot;: 353.254758945612,
      &quot;dPole&quot;: 22.0899395485325
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T18:27:09.728&quot;,
      &quot;SEP long&quot;: 66.2757074383345,
      &quot;SEP lat&quot;: 3.22447228258625,
      &quot;SSP long&quot;: 61.7689891361384,
      &quot;SSP lat&quot;: 3.07209208802234,
      &quot;NP&quot;: 353.247999600256,
      &quot;dPole&quot;: 22.0851461524752
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T19:25:49.014&quot;,
      &quot;SEP long&quot;: 101.727189573987,
      &quot;SEP lat&quot;: 3.22434304510578,
      &quot;SSP long&quot;: 97.212291444333,
      &quot;SSP lat&quot;: 3.07198020685357,
      &quot;NP&quot;: 353.245927545805,
      &quot;dPole&quot;: 22.0836694255238
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-29T00:33:20.358&quot;,
      &quot;SEP long&quot;: 287.596461967708,
      &quot;SEP lat&quot;: 3.22366388634751,
      &quot;SSP long&quot;: 283.038734374772,
      &quot;SSP lat&quot;: 3.07139343998671,
      &quot;NP&quot;: 353.23509000494,
      &quot;dPole&quot;: 22.075889232837
    },
    {
      &quot;Transit date&quot;: &quot;2024-12-28T23:27:01.425&quot;,
      &quot;SEP long&quot;: 247.514765308859,
      &quot;SEP lat&quot;: 3.22381056686407,
      &quot;SSP long&quot;: 242.966265577382,
      &quot;SSP lat&quot;: 3.07151999904395,
      &quot;NP&quot;: 353.237423348701,
      &quot;dPole&quot;: 22.0775723549387
    }
  ],
  &quot;datacol&quot;: {
    &quot;Transit date&quot;: &quot;Date&quot;,
    &quot;SEP long&quot;: &quot;Sub-observer point longitude&quot;,
    &quot;SEP lat&quot;: &quot;Sub-observer point latitude&quot;,
    &quot;SSP long&quot;: &quot;Sub-solar point longitude&quot;,
    &quot;SSP lat&quot;: &quot;Sub-solar point latitude&quot;,
    &quot;NP&quot;: &quot;North pole position angle&quot;,
    &quot;dPole&quot;: &quot;Angular distance of the pole wrt the center of figure&quot;
  },
  &quot;unit&quot;: {
    &quot;diameter&quot;: &quot;km&quot;,
    &quot;SEP long&quot;: &quot;deg&quot;,
    &quot;SEP lat&quot;: &quot;deg&quot;,
    &quot;SSP long&quot;: &quot;deg&quot;,
    &quot;SSP lat&quot;: &quot;deg&quot;,
    &quot;NP&quot;: &quot;deg&quot;,
    &quot;dPole&quot;: &quot;arcsec&quot;
  }
}
</code></pre>

CC BY-SA 4.0
2024-12-28T00:01:25.693Z
Are you sure you're requesting transit times?  The example links on their website show "Transit Date" rather than just "Date".
Greg Miller
CC BY-SA 4.0
2024-12-28T00:16:15.817Z
See alos https://www.projectpluto.com/grs_form.htm and https://www.projectpluto.com/jeve_grs.htm
James K
CC BY-SA 4.0
2024-12-28T01:14:28.407Z
@GregMiller - you are right.  I went ahead and updated my original post to use the 'transit' API and the response includes "Transit Date". The events are again more frequent than I'd expect, which means I'm not sure how to interpret what is being returned.  Ultimately I'd like to go from this to a set of events as to when the GRS crosses the central meridian (so I know when to haul out my telescope to photograph with the red spot present).
jeffrwatts
CC BY-SA 4.0
2024-12-28T01:15:26.117Z
Thanks @JamesK.  I'll have a look at that approach as well.
jeffrwatts
CC BY-SA 4.0
2024-12-28T05:14:47.703Z
You might also be interested in JUPOS, which is were the data comes from.  It also has software to track the GRS and many other objects. https://jupos.hier-im-netz.de/index.htm
Greg Miller
<jupiter><python><mathematics><software><great-red-spot>
Help with IMCCE Great Red Spot API
jeffrwatts
# Help with IMCCE Great Red Spot API

(Asked by: username_0 on 2024-12-27)

I'd like to add a great red spot transit feature to a personal Android app I'm writing and was looking to utilize the IMCEE Great Red Spot API located here: https://ssp.imcce.fr/webservices/vo-tools/jgrs/
Here is the API https://ssp.imcce.fr/webservices/vo-tools/jgrs/transit/
I was expecting to see a set of events that would be separated roughly by Jupiter's rotational period (9.925 hours).
Here is some example Python code (I prototype in a python jupyter notebook before moving to kotlin):
def parse_and_calculate_deltas(api_url):
    try:
        # Fetch the API response
        response = requests.get(api_url)
        response.raise_for_status()
        data = response.json()

        # Extract the list of events
        events = data.get("data", [])

        # Check if events exist
        if not events:
            print("No events found in the API response.")
            return

        # Parse dates and calculate deltas
        dates = [
            datetime.strptime(event["Transit date"], "%Y-%m-%dT%H:%M:%S.%f")
            if "." in event["Transit date"] else datetime.strptime(event["Transit date"], "%Y-%m-%dT%H:%M:%S")
            for event in events
        ]
        deltas = [dates[i + 1] - dates[i] for i in range(len(dates) - 1)]

        # Convert deltas to hours, minutes, and seconds
        delta_strings = [None] + [
            f"{delta.seconds // 3600}h {delta.seconds % 3600 // 60}m {delta.seconds % 60}s"
            for delta in deltas
        ]

        # Create a DataFrame for better visualization
        df = pd.DataFrame({
            "Transit Date": dates,
            "Sub-observer Longitude": [event["SEP long"] for event in events],
            "Sub-observer Latitude": [event["SEP lat"] for event in events],
            "Sub-solar Longitude": [event["SSP long"] for event in events],
            "Sub-solar Latitude": [event["SSP lat"] for event in events],
            "North Pole Position Angle": [event["NP"] for event in events],
            "Angular Distance of Pole (arcsec)": [event["dPole"] for event in events],
            "Delta (h:m:s)": delta_strings  # Add None for the first row since there's no previous event
        })

        return df

    except Exception as e:
        print(f"An error occurred: {e}")

# Fetching and parsing transit events
api_url = "https://ssp.imcce.fr/webservices/vo-tools/jgrs/transit/"
parse_and_calculate_deltas(api_url)

Which for today yields the following

I'm obviously misinterpreting the data, and so was wondering if anyone else had experience with the API or how to interpret the response.  Ultimately I'm looking for how to take this, and determine when the GRS would be visible (so I can haul out my telescope and photograph when it is in view)
Here is the full json response for the output above
{
  "sso": {
    "num": "5",
    "name": "Jupiter",
    "type": "planet",
    "parameters": {
      "physical_model": "IAU 2015 - 2",
      "diameter": 139822
    }
  },
  "coosys": {
    "epoch": "J2000",
    "equinox": "J2000",
    "system": "eq_ICRF"
  },
  "ephemeris": {
    "time_scale": "UTC",
    "planetary_theory": "INPOP19",
    "coordinates": "spherical",
    "reference_frame": {
      "type": "apparent (true equator; equinoxe of the date)",
      "plane": "equator",
      "center": "geocenter"
    }
  },
  "data": [
    {
      "Transit date": "2024-12-28T01:32:18.828",
      "SEP long": 172.891126612812,
      "SEP lat": 3.22669298430259,
      "SSP long": 168.526477854944,
      "SSP lat": 3.07402609538857,
      "NP": 353.284099818271,
      "dPole": 22.1103280863309
    },
    {
      "Transit date": "2024-12-28T02:55:05.567",
      "SEP long": 222.92364722055,
      "SEP lat": 3.22651294109229,
      "SSP long": 218.547372163018,
      "SSP lat": 3.07386846778455,
      "NP": 353.28113768721,
      "dPole": 22.1083002731458
    },
    {
      "Transit date": "2024-12-28T07:42:05.605",
      "SEP long": 36.3898609730614,
      "SEP lat": 3.22588720761184,
      "SSP long": 31.9733286376951,
      "SSP lat": 3.07332178943842,
      "NP": 353.270891724712,
      "dPole": 22.1012335191697
    },
    {
      "Transit date": "2024-12-28T09:04:03.361",
      "SEP long": 85.9289040138932,
      "SEP lat": 3.22570807902889,
      "SSP long": 81.500889732293,
      "SSP lat": 3.07316561811084,
      "NP": 353.267972501389,
      "dPole": 22.0992050839222
    },
    {
      "Transit date": "2024-12-28T12:40:51.656",
      "SEP long": 216.967958210356,
      "SEP lat": 3.22523333672039,
      "SSP long": 212.509604267847,
      "SSP lat": 3.07275241356128,
      "NP": 353.26026541801,
      "dPole": 22.0938175580953
    },
    {
      "Transit date": "2024-12-28T15:16:07.976",
      "SEP long": 310.815862136265,
      "SEP lat": 3.22489251841443,
      "SSP long": 306.33580812772,
      "SSP lat": 3.07245638973203,
      "NP": 353.254758945612,
      "dPole": 22.0899395485325
    },
    {
      "Transit date": "2024-12-28T18:27:09.728",
      "SEP long": 66.2757074383345,
      "SEP lat": 3.22447228258625,
      "SSP long": 61.7689891361384,
      "SSP lat": 3.07209208802234,
      "NP": 353.247999600256,
      "dPole": 22.0851461524752
    },
    {
      "Transit date": "2024-12-28T19:25:49.014",
      "SEP long": 101.727189573987,
      "SEP lat": 3.22434304510578,
      "SSP long": 97.212291444333,
      "SSP lat": 3.07198020685357,
      "NP": 353.245927545805,
      "dPole": 22.0836694255238
    },
    {
      "Transit date": "2024-12-29T00:33:20.358",
      "SEP long": 287.596461967708,
      "SEP lat": 3.22366388634751,
      "SSP long": 283.038734374772,
      "SSP lat": 3.07139343998671,
      "NP": 353.23509000494,
      "dPole": 22.075889232837
    },
    {
      "Transit date": "2024-12-28T23:27:01.425",
      "SEP long": 247.514765308859,
      "SEP lat": 3.22381056686407,
      "SSP long": 242.966265577382,
      "SSP lat": 3.07151999904395,
      "NP": 353.237423348701,
      "dPole": 22.0775723549387
    }
  ],
  "datacol": {
    "Transit date": "Date",
    "SEP long": "Sub-observer point longitude",
    "SEP lat": "Sub-observer point latitude",
    "SSP long": "Sub-solar point longitude",
    "SSP lat": "Sub-solar point latitude",
    "NP": "North pole position angle",
    "dPole": "Angular distance of the pole wrt the center of figure"
  },
  "unit": {
    "diameter": "km",
    "SEP long": "deg",
    "SEP lat": "deg",
    "SSP long": "deg",
    "SSP lat": "deg",
    "NP": "deg",
    "dPole": "arcsec"
  }
}

**Tags:** jupiter, python, mathematics, software, great-red-spot
> **Comments:**
> **username_1**: Are you sure you're requesting transit times?  The example links on their website show "Transit Date" rather than just "Date".  
> **username_2**: See alos https://www.projectpluto.com/grs_form.htm and https://www.projectpluto.com/jeve_grs.htm  
> **username_0**: @GregMiller - you are right.  I went ahead and updated my original post to use the 'transit' API and the response includes "Transit Date". The events are again more frequent than I'd expect, which means I'm not sure how to interpret what is being returned.  Ultimately I'd like to go from this to a set of events as to when the GRS crosses the central meridian (so I know when to haul out my telescope to photograph with the red spot present).  
> **username_0**: Thanks @JamesK.  I'll have a look at that approach as well.  
> **username_1**: You might also be interested in JUPOS, which is were the data comes from.  It also has software to track the GRS and many other objects. https://jupos.hier-im-netz.de/index.htm  

---

## 0 answers

