PondTools

LiDAR

Guessing the bottom of a lake nobody has measured

Most ponds and lakes have never had their depth measured. The shoreline is easy, because a satellite photo shows it. The land around it is easy too, because the USGS has flown LiDAR over most of the country and publishes the bare ground at one-metre resolution. The bottom is the problem. LiDAR bounces off water, and for any lake of two acres or more the USGS deliberately flattens the water to one level surface. So the survey gives you a perfect flat lid and nothing under it.

I wanted PondTools to draw depth contours anyway, straight from that data, so a farm pond or a small lake could get a starting basin without a boat or sonar. This is how that went, including the part where I didn't believe the first version.

The first version looked fake

The first build found the flat water in the LiDAR, looked at how steep the banks were, and let the bed drop away from the shore at roughly that slope before levelling off. I tested it on a farm reservoir in Northern California, about 420 metres long. It gave me five rings stacked tight against the shore, then a flat floor at 300 inches under almost the whole lake.

It looked wrong to me, so I asked for cross-sections. The first ones had the vertical scale stretched, which made everything look dramatic and told me nothing. I asked for true scale instead, one metre across equal to one metre down, with every LiDAR sample drawn as a dot for 150 feet past each shore. At true scale a lake 135 metres wide and 9 metres deep is a thin sliver. That view is honest, and it's the only one I trust now.

Then it turned out the pictures I was looking at weren't what the product had actually drawn. Some came from a made-up test pond, and some from newer code than I had run. So I exported my project and had the exact contours in that file drawn over the photo, with nothing recomputed. Only then were we talking about the same thing. That also turned up a real bug. The photo water tracer was reshaping the LiDAR rings into evenly stepped copies of its own shoreline and keeping only their depth numbers.

The published method

There is a real, published way to do this. Jeffrey Hollister, Bryan Milstead and Andrea Urrutia at the EPA described it in 2011 in Predicting Maximum Lake Depth from Surrounding Topography, and Hollister's R package lakemorpho implements it. The idea is that a lake bed usually carries on the shape of the land around it.

It works in two steps. First, take the median slope of the land in a band around the lake. The band is as wide as the farthest any point in the lake gets from shore, or 100 metres, whichever is more. Multiply that slope by the same farthest distance, and you have the maximum depth. Second, make every point's depth proportional to its distance from shore, so the deepest spot is the one farthest from any bank.

On my reservoir the farthest point is 65 metres from shore, and the median slope around the lake is about 8 degrees. That works out to 351 inches, close to where my first version had landed. The shape was the difference. The published method gives a cone, with evenly spaced rings all the way in and a single deepest spot in the middle of the wide southern bowl. The narrow northern arm never gets deeper than five to ten feet, because nothing up there is far from a bank.

Two copies of the same satellite photo of a long farm reservoir. On the left, depth rings crowd the shore around a wide flat floor. On the right, evenly spaced rings close in on one deep spot in the southern bowl.
Left, the first version: rings at 60, 120, 180, 240 and 300 inches packed against the shore. Right, the published method inside the same waterline: rings at the same depths, evenly spaced, deepest in the southern bowl at 351 inches. Yellow is 60 inches, purple is 300.
A true-scale cross-section of the reservoir with LiDAR samples on both banks, an orange flat-floored profile and a blue V-shaped profile.
True-scale cross-section, west to east through the deepest point. Brown dots are LiDAR samples on land, and hollow dots are LiDAR samples on the water. Orange is the first version, blue is the published method.

The paper is upfront about accuracy. Across about 28,000 lakes in the Northeast, its predictions of maximum depth had a typical error of 5 to 6 metres. So it's still an estimate, but it's one worked out from measured ground by a method other people have tested, which my first curve was not.

Two shorelines, both right

The cross-section showed something I first took for an error. On the east side the photo's waterline sits about 15 metres beyond where the LiDAR's flat water ends, and the survey shows the ground rising gently in between. The contours on the photo looked dead on to me, so the photo wasn't wrong.

Both are right. The LiDAR for this spot blends surveys flown between 2013 and 2024, and the satellite photo was taken on a different day. A farm reservoir rises and falls a few metres between seasons. If the survey was flown during a drawdown, that band is lake bed the LiDAR actually measured. It also means the water in the photo stood roughly two to three metres higher than the survey's water surface.

Why I picked the cone

Agricultural ponds really do have flat floors. They're dug or dammed, with steep sides and a level bottom, and the first version's shape is closer to how many of them are built. For that kind of pond I may end up preferring it.

I picked the published cone anyway, for a practical reason. Turning a cone into a flat-bottomed pond is easy: delete the inner rings that sit far apart and set the floor where you want it. Going the other way, building a believable cone out of a flat floor, means drawing every ring by hand. So the tool starts from the method that has a paper behind it, and you cut it down to fit your pond.

That's live now. In Measure a pond, capture a satellite photo with Import LiDAR ticked and trace the water. PondTools builds the bed inside your waterline with the published method, as round, evenly spaced rings you can edit or delete.

Sources