2
$\begingroup$

I see this kind of projection of the celestial sphere into 2D frequently, usually with an image of the milky way galaxy or cosmic microwave background. This particular image shows the path of visible transits of the inner solar system planets across the sun as seen from locations outside of the solar system from the Motherboard article At Least 9 Exoplanets Could See Earth With Present-Day Human Technology which links to: R. Wells, K. Poppenhaeger, C. A. Watson, R. Heller; Transit Visibility Zones of the Solar System Planets, Monthly Notices of the Royal Astronomical Society, stx2077, https://doi.org/10.1093/mnras/stx2077

Question: What is the 2D elliptical projection of the Celestial Sphere called, and how can I make one? Is there a python-friendly package, but more importantly, is there a mathematical expression for this transform?

enter image description here

$\endgroup$
  • 1
    $\begingroup$ I believe this is the Mollweide projection (en.wikipedia.org/wiki/Mollweide_projection). I've always called it the elliptical projection, which is a valid alternate name. $\endgroup$ – barrycarter Sep 10 '17 at 3:42
  • $\begingroup$ @barrycarter bingo! $\endgroup$ – uhoh Sep 10 '17 at 3:45
3
$\begingroup$

I want to say that's a Mollweide projection. I know that they're pretty common in astronomy; many images of the CMB use them. I was actually working with one recently. Given latitude $\varphi$ and longitude $\lambda$, the $x$ and $y$ coordinates of an object are $$x=R\frac{2\sqrt{2}}{\pi}(\lambda-\lambda_0)\cos\theta,\quad y=R\sqrt{2}\sin\theta$$ for projecting from a sphere of radius $R$. $\theta$ is the solution to $$2\theta+\sin2\theta=\pi\sin\varphi$$ Similar images can be found here (labeled as Mollweide projections), which are of the same shape and proportions:

enter image description here

Matplotlib will let you do Mollweide projections; a nice tutorial can be found here. Basemap is a possibility, although I haven't used it before. It has quite a few different built-in projections. There are some interesting features available in the different matplotlib implementations, and using the ephem package, you can use astronomical data. That said, I've found that the transformations aren't that hard to implement by hand; I was able to get some basic projections done from scratch.

$\endgroup$
  • 1
    $\begingroup$ Excellent answer, thank you! It looks like solving for $\theta$ is the fun step, and a good exercise for those of us whose basic numerical techniques are a bit rusty ;-) But I'm thinking that the correct way to warp images is the inverse problem. For each pixel coordinate in the destination image you find the contributing pixels in the source image to interpolate, and in this direction $(x, y)\rightarrow(\lambda, \varphi)$ there's no need for Newton's method. But adding nice looking anti-aliased fixed width curves would still require solving for $\theta$. $\endgroup$ – uhoh Sep 10 '17 at 4:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.