readFromFile static method
HgtFile
readFromFile(
- File file, {
- required int baseLat,
- required int baseLon,
- required int tileWidth,
- required int tileHeight,
- required int rows,
})
Implementation
static HgtFile readFromFile(File file, {required int baseLat, required int baseLon, required int tileWidth, required int tileHeight, required int rows}) {
if (!file.existsSync()) {
_log.warning("HGT file not found: ${file.path}");
return HgtFile._noFile(baseLat: baseLat, baseLon: baseLon, lonWidth: tileWidth, latHeight: tileHeight);
}
final Uint8List bytes = file.readAsBytesSync();
if (bytes.lengthInBytes % 2 != 0) {
throw StateError('Invalid .hgt length: ${bytes.lengthInBytes}');
}
int columns = bytes.lengthInBytes ~/ 2 ~/ rows;
// HGT stores signed 16-bit big-endian.
final ByteData bd = ByteData.sublistView(bytes);
final elevations = Int16List(rows * columns);
for (int i = 0; i < rows * columns; i++) {
elevations[i] = bd.getInt16(i * 2, Endian.little);
}
return HgtFile._(baseLat: baseLat, baseLon: baseLon, lonWidth: tileWidth, latHeight: tileHeight, rows: rows, columns: columns, elevations: elevations);
}