Two-Point Equidistant Projection

Distances from the two specified points to any other point are to scale. Drag either point to adjust the projection!

The world is clipped against a thin rectangle going between the antipodes of the two points.

Upon adjusting one of the two points, the projection is smoothly animated by linear interpolation along a spiral path (r, \theta), where r is the distance from the unadjusted point, and \theta is the bearing relative to the geodesic between the two original points.

Thanks to Mike Bostock for suggesting the “North is up” constraint; this ensures that the meridian through the point midway between the two points is vertical, using an additional screen space rotation. To avoid non-linear rotation during the animation, the constraint only applies to the beginning and end state of each animation, and the rotation is interpolated linearly between the two states.