Source: https://www.youtube.com/watch?v=lc47jlrg9tQ
This is something I'd been intending to do for a while, and the PR043 case was a great motivator. We had the rough location, but to get an accurate recreation, a more exact camera position, heading, and field of view were needed.
What it does is conceptually relatively straightforward. You pick several distinct points on the image and the corresponding points in the 3D world. Here I pick bends in the river and points on the ground. There are two very different algorithms. One is the full 3D fit: it uses each landmark at its real position on the terrain, elevation included, and is generally the more accurate. Kind of like triangulation in reverse. It requires a minimum of three points. It's the default.
The other is a plane homography. It assumes the landmarks all lie on one flat plane, solves the projective map from that plane to the image, and then runs through all the possible fields of view (i.e., focal length, or zoom) looking for the one that makes the geometry self-consistent - where the rotation it implies actually comes out as a valid rotation. That's the classical method, and will give similar results when the points ARE roughly on a flat plane, as they are (barely) in this example. It needs at least four points.
So far I've only tested it on this case, so there will be things to iron out. Feedback welcome!