Hello, Udo
In terms of reading the file, I took a different way around, as I didn't try to convert it...
elevationFile = "/Users/Brad/Documents/Wolfram/Misc/N45E006.hgt";setFileParameters;
elevations = BinaryReadList[elevationFile, "Integer16", ByteOrdering -> 1];(* First partition the whole file into rows and colums *)
elevationsGrid = Partition[elevations, fileRows, fileColumns];
The variables fileRows and fileColumns were set earlier by looking at the file size, as these files always have either 90 or 30 metre resolution for the same square degree. So a fragment of my function setFileParamters[] above does this...
(* If the file is under 3MB, it is 3-arc-second resolution; otherwise \1-arc-second *)If[ FileByteCount < 3000000, { fileColumns = 1201; fileRows = 1201; arcSecondResolution = 3; }, { fileColumns = 3601; fileRows = 3601; arcSecondResolution = 1; } ];
Note the "big-endian" order of the bytes, which is handled by the line above...
BinaryReadList[elevationFile, "Integer16", ByteOrdering -> 1];
Do all of that, and the array "elevations" (for a 1 arc-second file) contains values which are metre elevation points, derived from 16 bit integers, 3601 rows of 3601 columns, each corresponding to an arc-second point within the grid.
You're correct about the altitude of Mont Blanc, but if that one highest point 4810 metres doesn't appear directly under one of the sample points, the maxium value of the whole array will be something slightly less, because the sampling would fall somewhere on the shoulder, and not the peak of the mountain. From memory, I think the highest point was 4806, or something close.
Does this help?
Regards
Brad