function [ok,R] = combineAscGrids(varargin) %combineAscGrids combine ArcGis ASCII grid files to a new asc file % % The function combines ArcGIS ASCII grids to one grid file with % conditions % 1 - the grid is the same % 2 - when there are values in the same cel the mean is used % 3 - when there are novalue values they are ignored unless all % values are nonvalue % % Syntax: % ok = combineAscGrids(varargin) % % Input: % varargin = input of asc names to be combined, there are two options % 1 - one asc file name is given, various directory names % 2 - the asc file names are given, possibly with a path; no % directory needed % Option 1 % 'asc' the filename of the asc files to be used % 'directory' a cell with directory names % Option 2 % 'asc' a cell with asc file names and its % paths % 'name' the name of the resulting file. % Default there are two options: % 1 - when option 1 is used the 'asc' file name is % used % 2 - when not given at input, the name result.asc % is used % 'store_at' store the resulting file in this directory. % Default = current folder. % % % Output: % ok = "ok" not any problem % "..." any other message, something went wrong % R = the struct with the resulting grid values % % Example % % See also %% Copyright notice % -------------------------------------------------------------------- % Copyright (C) 2011 Deltares % Lou Verhage % % lou.verhage@deltares.nl % % Deltares % P.O. Box 177 % 2600MH Delft % Tel: +31 (0)88 335 8273 % % Visiting adress: % Rotterdamseweg 185 % 2629 HD Delft % Tel: +31 (0)88 335 8276 % % This library is free software: you can redistribute it and/or % modify it under the terms of the GNU Lesser General Public % License as published by the Free Software Foundation, either % version 2.1 of the License, or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library. If not, see . % -------------------------------------------------------------------- % This tool is part of OpenEarthTools. % OpenEarthTools is an online collaboration to share and manage data and % programming tools in an open source, version controlled environment. % Sign up to recieve regular updates of this function, and to contribute % your own tools. %% Version % Created: 06 Jan 2011 % Created with Matlab version: 7.6.0.324 (R2008a) % $Id: $ % $Date: $ % $Author: $ % $Revision: $ % $HeadURL: $ % $Keywords: $ %% Initialize ok = 'yes'; R = []; if nargin > 0 OPT.asc = ''; OPT.directory = ''; OPT.name = ''; OPT.store_at = ''; OPT = setproperty(OPT,varargin{:}); else ok = 'not any input argument'; return end % % for n = 1 : nargin % % v = varargin(n); % % v = v{1}; % % fileName{n} = v{1}; % % cl{n} = v{2}; % % end if iscell(OPT.asc) && isempty(OPT.directory) %just the asc filenames are given for nrSet = 1 : length(OPT.asc) fileName{nrSet} = OPT.asc{nrSet}; end elseif iscell(OPT.directory) && ~iscell(OPT.asc) && ~isempty(OPT.asc) %just one asc filename and a set of directories for nrSet = 1 : length(OPT.directory) fileName{nrSet} = fullfile(OPT.directory{nrSet},OPT.asc); end else ok = 'the combination of keys ASC and DIRECTORY and their values is not correct'; return end if nrSet < 1 ok = 'At least 2 files are needed'; return end if isempty(OPT.name) if iscell(OPT.directory) resultFile = fullfile(OPT.store_at,OPT.asc); else resultFile = fullfile(OPT.store_at,'result.asc'); %% preparation %read the asc files for nrSet = 1 : length(fileName) D{nrSet} = ArcGisRead(fileName(nrSet),'export',0,'mat',0,'plot',0); end %check the asc files, they must have an identical grid for nrSet = 2 : length(fileName) if ~(D{nrSet}.ncols == D{1}.ncols || ... D{nrSet}.nrows == D{1}.nrows || ... D{nrSet}.xllcorner == D{1}.xllcorner || ... D{nrSet}.yllcorner == D{1}.yllcorner ||... D{nrSet}.cellsize == D{1}.cellsize) ok = 'The asc files do not have identical grids'; return end end %% computation %combine all asc files to one new grid R = D{1}; S = ones(D{1}.nrows,D{1}.ncols,1); %set the sum of values to 1 S(isnan(R.val)) = 0; % when NaN no value in a cell X = D{1}.(D{1}.varname); for nrSet = 2 : length(fileName) Y = D{nrSet}.(D{nrSet}.varname); [X,S,ok] = summatrices(X,Y,S); if ~(ok == 'yes') R = []; return end end R.(R.varname) = X ./ S; writestruct2asc (R,resultFile);