Hengefinder: Finding When the Sun Aligns with Your Street

evakhoury1 pts0 comments

Hengefinder: Finding When the Sun Aligns With Your Street<br>Next week in Manhattan, the sunset will align perfectly with the east-west streets of the city grid. It’s beautiful, and people know it. Twice a year, crowds gather to see the brief moment when the sun sits perfectly on the horizon, framed by skyscrapers on either side. It’s called Manhattanhenge, after Stonehenge.

I wanted to know how astronomers figure out when Manhattanhenge happens. And if I could figure that out, why limit it to Manhattan?

A shot of crowds taking photos of Manhattanhenge at 42nd St in NYC.

This was one of my first projects at the Recurse Center: Hengefinder , a tool that lets you find a henge pretty much anywhere the sun sets.

Source code

Hengefinder website

Hengefinder mobile app (A follow up to the website, created by fellow Recurser John Pribyl)

The basic steps (and some terminology I would soon learn):

find the angle of a road (its bearing , relative to true north)

find the angle of the sun at sunset each day (its azimuth )

find the dates when those angles match.

It was appealing to me that this was mostly made up of many sub problems I could either think through thoroughly, or choose to mostly skip (by handing off to a library, a brute-force solution, an approximation, etc.). It’s like a bunch of closed boxes. I left plenty of those boxes closed — I didn’t build my own astronomical model, for instance. Other boxes I opened. And then I found many things I thought would be straightforward that turned out to be somewhat less trivial in practice as my assumptions broke; Like, in reality, you can’t treat roads like flat lines, latitude and longitude don’t behave like a Cartesian grid, and the word “sunset” is more ambiguous than I initially thought. I’ve enjoyed closing the gap between my assumptions and reality.

So, rather than just talking about the project as a whole, I’m going to walk through a couple challenges I ran into in building this, and how I went about solving them. One challenge for each of those supposedly “simple” steps above.

Challenge #1: Finding the road bearing (and rediscovering the Earth is not flat)

The first challenge was calculating the bearing of a street (its angle relative to true north). If you take the latitude and longitude of one address, and the latitude and longitude of another address down the street, you end up with the coordinates of two points on Earth. We can then use some trig to get the angle. My initial (incorrect) guess for getting the road bearing was to take the difference in latitude and the difference in longitude, then just get the angle with atan2 (the inverse tangent).

The problem is, that would only work if the Earth were flat.

A schematic of the orientation of latitude and longitude. Degrees of longitude represent smaller distances as you move away from the equator.

Latitude and longitude lines aren’t arranged the same way on the Earth. Latitude lines (which run east-west) are evenly spaced: one degree of latitude is basically the same distance everywhere on Earth. Longitude lines (which run north-south) aren’t. They converge as you move toward the poles. For example, one degree of longitude spans roughly 52 miles (84 km) in New York City, but way less at higher latitudes (about 33 miles / 53 km in Anchorage).

How do you manage that?

TL;DR, if you just want the practical takeaway

Scale longitude by cos(latitude), which puts longitude and latitude in the same “units.” Only then do atan2.

”Ok, but why?”

(And if you don’t really care about the math, feel free to skip to the “corrected approach” section below.)

When you do tan = opposite / adjacent, you’re assuming the dimensions of the triangle are in consistent units. They aren’t here. Like I said, degrees of longitude shrink as you move toward the poles, while latitude stays consistent. That means the horizontal and vertical sides of the triangle are in different units.

The same east-west distance maps on to different changes in longitude depending on latitude.

To fix this, we need a little spherical geometry.

Imagine the Earth as a unit sphere (radius = 1), and take a vertical cross-section through it. A point at latitude φ forms a right triangle:

the hypotenuse is the Earth’s radius (1)

the vertical leg is sin(φ)

the horizontal leg is cos(φ)

At latitude φ, east-west movement traces a smaller circle with radius cos(φ).

That horizontal leg is the distance from the Earth’s axis to the point of our “observer.” It’s also the radius of the circle you trace when you move east-west at latitude φ.

This means that at the equator (φ = 0°), the radius is cos(0) = 1, and at the poles (φ = 90°), the radius is effectively cos(90°) = 0 .

So, east-west distances shrink as you move away from the equator. You’re walking around smaller and smaller circles. To compare longitude meaningfully with latitude, you have to scale it by the radius of that circle, which is cos(latitude).

Once longitude is scaled this way,...

latitude longitude earth radius east west

Related Articles