function [DEM, DEM_nan, COLS, ROWS, xllcorner,.. yllcorner, cellsize, nodata] = read_dem(filename, dlm) % read_dem(filename, dlm) outputs a DEM and a DEM with NaN values from an % ASCII file exported from ArcGIS % filename = 'filename.txt' % dlm = 'delimiter', ' ' = space (default if none set), '\t' = tab % Test case % filename = 'fake_dem.txt'; % Enter in the file to be read if nargin < 2, dlm = ['']; end % Format of text files % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % ncols m % nrows n % xllcorner 502035 % yllcorner 6622425 % cellsize 30 % NODATA_value -9999 % row 1 col1 [space] col2 [space]... colm [space-return] % row 2 data [space-return] % ... % ... % ... % row n data [space-return] % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Find the text values fid = fopen(filename); header = textscan(fid, '%s %f'); fclose(fid); % header{1} are the text labels % header{2} are the values - reassigned to their own variables below % Clear everything but the real header values header{1}(7:end) = []; header{2}(7:end) = []; % Set variables COLS = header{2}(1); ROWS = header{2}(2); xllcorner = header{2}(3); yllcorner = header{2}(4); cellsize = header{2}(5); nodata = header{2}(6); DEM = dlmread(filename, dlm, 6, 0); % This adds a row of zeros at the end now, so I need to fix that % Not so elegant fix if length(DEM(1,:)) > ROWS DEM(:, end) = []; end % For easy plotting in matlab % Need to flipud because of how ARC exports DEM = flipud(DEM); % Make a version with NaN DEM_nan = DEM; DEM_nan(DEM == nodata) = NaN; % Rachel Headley - 6 April 2007 % write_dem does the reverse of this