The Astronomy SE side of things is clear: The next Venus transit is in 2117. Good things they come in pairs, the 2004 had too many clouds for me, but 2012 was excellent.

That means I will not see a second one.
But this is Space SE, and we have rockets!

Quite obviously, a spacecraft would allow you to observe a Venus transit long before that. Just go to Venus! (Or Mars, there's a Venus transit there in 2030).

However, even a gravity assisted return flyby of Venus means living a year in space and significant delta-v costs. Is there anywhere closer to home that also works?

A high apogee orbit of say, two lunar distances, is a trip lasting only a month. Those 770,000km should give me a wiggle room of 17' in all directions, which is significant when compared to the angular diameter of the Sun at 32', and the inclination of Venus at 3°24'. Is that wiggle room enough?

  • 1
    $\begingroup$ I think you can get a good approximate answer by looking up the times that Venus (projected onto the Earth's orbital plane) is between Earth and Sol, and then looking up Venus' "altitude" at that time, and using trig to figure out how far off our orbital plane you'd need to be. $\endgroup$ Commented Jun 10, 2021 at 14:25
  • $\begingroup$ oops, I added a tag incorrectly. $\endgroup$
    – uhoh
    Commented Jun 11, 2021 at 9:29

2 Answers 2


tl;dr: For a spacecraft orbiting the Earth within the 1.5 million kilometer Hill sphere, there will be plenty of opportunities to view a transit of Venus. Below I've done the calculation for central transits but it's not exhaustive; from the edge of the Hill sphere there will be even more transits across the edges of the Sun.

If I get time in the next few days I will add that to the search.

However: in the mean time if someone would like to implement that and post it as a new answer as an exercise, please feel free!

Next chance: June 1, 2028 at 850,000 km from Earth

2012, 2020, 2028, 2036 are all inferior conjunctions that will be central transits from Earth's Hill sphere. We missed 2020 but there's plenty of time to get a solar telescope into some fancy three-body orbit around Earth for an unprecedented view of a transit of Venus across the Sun in 2028.

@BrendanLuke15's answer is excellent and makes great use of JPL's Horizons interface. It's an incredibly powerful tool and once one learns to use the SPICE that powers it, the sky's the limit!

For a subset of the features available from Horizons there is the python package Skyfield which accesses the same JPL development ephemerides (and pronounciation) that Horizons & SPICE use.

Below I started with the prediction for the 2012 transit and looked 150 years in the future using the synodic period +/- 2 days, and that gave every inferior conjunction nicely.

$$T_{Syn} = 1 \ / \ ( \ 1 \ / \ T_{Venus} - 1 \ / \ T_{Earth}) = \frac{T_{Venus} \ T_{Earth}}{T_{Earth} - T_{Venus}}.$$

Because the solar system's planets interact with each other gravitationally and even more because the Earth's and Venus' orbits are slightly eccentric, there's some oscillations of the epoch of inferior conjunction relative to the synodic period of a day or so.

note: you can see that the December group is shifted by one day from the June group, likely due to eccentricities.

In the first two plots I've used Skyfield's .separation_from() method to get the angular separation between Venus and either the Sun's center or edge in degrees.

In the last plot I drew a line from the Sun through Venus and calculated the closest distance that it passed Earth, so we could understand what an Earth-orbiting spacecraft might have a chance of seeing.

I limited the distance to 1.5 million kilometers, the Earth's Hill sphere within which we can talk about orbits that are somewhat stable to perturbations by the Sun. In reality one will still have to pay attention to station keeping out near the Hill sphere, but there are many, many kinds of three-body orbits possible besides the familliar halo orbits associated with Sun-Earth L1 and L2.

Here are the times when a line drawn through the centers of the Sun and Venus will pass through the Hill sphere.

I will leave it as an exercise for the reader to add to it the times when a ray from anywhere around the limb of the Sun does so, there will likely be some more, but they will be of shorter duration than a central transit.

Since the orbital planes of Earth and Venus intersect along the "June/December line" (which probably has a better name than that) we see that there are families of cis-lunar accessible transits clustered at eight year intervals in either June-ish or December-ish:

 date (UTC)   million km

 2012-06-06     0.163
 2020-06-03     0.508
 2028-06-01     0.853
 2036-05-30     1.196

 2093-12-17     1.334
 2101-12-16     0.954
 2109-12-13     0.571
 2117-12-11     0.189
 2125-12-08     0.194
 2133-12-06     0.576
 2141-12-03     0.958
 2149-12-01     1.338

transits of Venus from Earth's Hill sphere (central)

Inelegant, non PEP-8 quickie script:

import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Loader
from skyfield.timelib import Time

loaddata = Loader('~/Documents/fishing/SkyData')  # avoids multiple copies of large files

ts = loaddata.timescale() # include builtin=True if you want to use older files (you may miss some leap-seconds)
eph = loaddata('de405.bsp')

# https://rhodesmill.org/skyfield/api-position.html#skyfield.positionlib.ICRF.separation_from
# https://space.stackexchange.com/questions/53643/can-i-observe-a-venus-transit-before-2117-from-a-spacecraft-in-the-earth-moon-ne

# transit of June 05/06 2012
t0 = ts.utc(2012, 6, 6, 1, 29, 36.3) # https://eclipse.gsfc.nasa.gov/OH/transit12.html

# synodic period of Earth
Te = 365.2564 # days
Tv = 224.701 # days
Tsyn = 1/(1/Tv - 1/Te)

R_sun = 695700. # km

# approximate epochs of  inferior conjunctions +/- 150 years
n = int(150 / (Tsyn/Te))
print('n: ', n)

epoch_JDs = t0.tt + np.arange(0, n+1) * Tsyn

sun, venus, earth = [eph[x] for x in ('sun', 'venus', 'earth')]

span = np.linspace(-1.5, 1, 100) # 
separations, distances, earth_distances, minima, dates = [], [], [], [], []
for i, JD in enumerate(epoch_JDs):
    times = ts.tt_jd(JD + span)
    e = earth.at(times)
    s, v = e.observe(sun), e.observe(venus)
    sep = s.separation_from(v)
    distance = s.distance().km
    vs = venus - sun
    vs_vector = vs.at(times).position.km
    vs_normal = vs_vector / np.sqrt((vs_vector**2).sum(axis=0))
    vpos = venus.at(times).position.km
    epos = e.position.km
    earth_vector = np.cross(vpos - epos, vs_normal, axis=0)
    earth_distance = np.sqrt((earth_vector**2).sum(axis=0))
    minimum = np.argmax(-earth_distance)
    date = Time.utc_strftime(times[minimum], format='%Y-%m-%d')

separations = np.vstack(separations)
distances = np.vstack(distances)
earth_distances = np.vstack(earth_distances)
half_angles = np.degrees(np.arctan2(R_sun, distances))

print('separations.shape: ', separations.shape)

if True:
    titles = ('center of Sun', 'solar limb', 'approx Earth distance (central)')
    fig, axes = plt.subplots(3, 1)
    ax1, ax2, ax3 = axes
    goodies = zip(separations, half_angles, earth_distances, minima, dates)
    for sep, ha, ed, mi, da in goodies:
        ed_mkm = ed / 1E+06 # millions of kilometers
        ax1.plot(span, sep)
        ax2.plot(span, sep-ha)
        ax3.plot(span, ed_mkm)
        if ed_mkm[mi] < 1.5:
            print('    ', da, '   ', round(ed_mkm[mi], 3))
            if int(da[:4]) > 2117:
                ax3.text(span[mi], ed_mkm[mi], da, horizontalalignment='right')
                ax3.text(span[mi], ed_mkm[mi], da, horizontalalignment='left')                
    for ax, title in zip(axes, titles):
    ax1.set_ylim(0, 2)
    ax2.set_ylim(0, 2)
    ax3.set_ylim(0, 1.5)
    ax3.set_ylabel('millions of km')
    ax3.set_xlabel('offset from synodic estimate (days)')

Using JPL's Solar System Dynamics HORIZONS Web-Interface (DE-441 ephemeris) to find the positions (w.r.t. the solar system barycenter, SSB*) of the Earth, Venus, and the Sun from today (10-June-2021) until 12-Dec-2117 (the next transit is 11-Dec-2117, 1 day time steps):

*(future me realizes it's probably easier to configure the planet's positions w.r.t. the Sun, not the SSB in HORIZONS)

Earth & Venus Separation Angles

Interestingly there are considerably more superior conjunctions than inferior conjunctions: Conjunctions

Inferior conjunctions are where transits occur and the prominent one closest to the perfect (0°,180°) corner is the 2117 one (unsurprisingly). The inferior conjunction plot also shows us that this is a more dynamic process than a superior conjunction (less data points captured in the axis window with a 1 day timestep), so a shorter timestep is needed to find a close conjunction.

I interpolated 3 hour segments over the closest time periods:

Mid 2028 Min = 0.81°

Late 2109 Min = 0.61°

The vertical error bars represent the angular diameter of the sun (i.e., if the error bar crosses zero, then a transit occurs). For reference, here is the 2117 actual transit (notice the error bars extending below zero):

2117 Actual

The added wiggle room of the double lunar distance orbit is 0.58° so it may be possible (with some helpful positional uncertainties) to catch a small transit during the 2109 opportunity.

Semi-unrelated but still cool to look at:

Venus Position wrt Earth


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.