I have a 10m DEM covering part of a state, a 20m DEM covering the whole state, and a 90m DEM covering the whole country. How can I merge them together, getting the best quality available in each area?

The 10m and 20m are provided in ADF format, but I've converted them to .tif using ogr2ogr.

Using gdal_merge doesn't work, because the boundaries of each area are irregular. This is the result:

enter image description here

(The northeastern edge of the state is irregular, but there obviously shouldn't be the gap in the middle.)

UPDATE If it's useful, I also have a shapefile for each 10m DEM, marking its extent.


Ok, here's what the whole state looks like with the 20m DEM.

enter image description here

The process I'm going through so far is this:

for f in dtm20m dtm10m_nw dtm10m_e; do
export GDAL_CACHEMAX=1000
echo -n "Re-projecting: "
gdalwarp  -s_srs EPSG:3111 -t_srs EPSG:3785 -r bilinear ./vmelev_${f}/${f} ${f}-3785.tif 

echo -n "Generating hill shading: "
gdaldem hillshade -z 5 $f-3785.tif $f-3785-hs.tif
echo and overviews:
gdaladdo -r average $f-3785-hs.tif 2 4 8 16

  • Well doesn't it depend on what the coverage of each input is in the first place? What does that look like when you plot them together?
    – mdsumner
    Nov 9 '13 at 5:00
  • The coverage of the 20m DEM (visible in the bottom left, and the tiny fragment in the middle) is the entire state. I'm not sure what you're asking exactly? Nov 9 '13 at 5:23
  • I have no idea where this is, I wonder what this would look like if you just plot them all together, rather than the merged result. Then you could desribe better what you expect, I think. I would also provide the gdal_merge command you use, and btw no need to convert to tif since GDAL will do that anyway right? Probably you want gdalwarp to do a non-simple merge.
    – mdsumner
    Nov 9 '13 at 5:32
  • Ok, see the extra info. @mdsumner Nov 9 '13 at 5:57

I've done this using the workflow I explain below. I'll make the explanation for only two DEMs, with three you just have to repeat the process twice, the first time to merge the coarse and medium DEMs, and the second time to merge the resulting one with the finer DEM. For step 1 I use Global Mapper and for the following steps, Matlab, but the workflow would be the same using other software.

Let's say DEM "C" is the coarser and DEM "F" is the finer

  1. Export both DEMs to geotiff using the same boundaries and the pixel size of the finer DEM. For that coarse DEMs will be interpolated. So both GeoTiff files will have the same size.
  2. Create a DEM "D" corresponding to the difference C-F
  3. Make void (Null, NaN, -9999 or whatever correspond to no data) all the pixels of D that are not in the edge of the patch of valid data. In this way D will only have a ring of valid values that correspond to the pixels on the edge of F.
  4. Interpolate D to fill the void we just create (use Natural interpolation or some other weighted distance method, otherwise you might get sharp ridges that will mess the data).
  5. Make F = D + F. In this way we have transform F so that it perfectly matches C on the edges but preserve the details of the relief of the original F.
  6. Replace the void values of the adjusted F with the corresponding values of C.

That's it.

Might look complicated, but in Matlab is not many lines of code and the result is very good. If you are keen to use Matlab let me know and I can post some code.

This is a 3D visualization I've made of a DEM I patched this way and compared with SRTM v3. The annotations show some SRTM errors and the same areas in the fixed DEM.

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.