「細密数値情報(10mメッシュ土地利用)」データを読んで表示させる

注意点

  • そのまま全てのデータを読むとたいていの環境ではメモリ不足に陥るため,解像度を荒くして表示させることが前提(matlabのメモリ不足エラーは解消できないことがほとんどなので無駄な抵抗はしない.)
  • プログラムが雑なのは仕様です(勢いだけで作成)
  • 使用は自己責任で.

プログラムの順序

  • データを読む
  • 解像度を荒くする
  • データのない部分をNaNとする

使い方

  • データをPCにいれておく
  • 最初の【変更必要】部分さえ設定すれば動きます
    • placeの部分をLUDATAフォルダにフルパスで記入
    • わかる人は相対パスでも可
  • meshsizeは解像度の設定です
    • デフォルトは1km x 1km

中身(mファイルは下にあります)

% 「細密数値情報(10mメッシュ土地利用)」データを読む
clear
%%【変更必要】%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
place = 'C:/Program Files/landuse2000/tiriin_landuse/LUDATA/';
% データのあるフォルダの名前(CからLUDATAまで全て書く)
meshsize = [100 100]; %NS,WE[10m] 300と400の公約数推奨
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 以下,変更不要
files = ls([place,'/NK*']);
[file_num,n] = size(files);
ns = 300;
we = 400;
x  = fix(300/meshsize(1));
y  = fix(400/meshsize(2));
tic 
output = zeros(x*34,y*25);
for i = 1:file_num
    fid = fopen([place,'/',files(i,:)]);
    for j = 1:300
        head = fscanf(fid,'%4d%3d',[2 1]);
        numdata(j,:) = fscanf(fid,'%2d',[400 1]);
    end
    fclose(fid);
    for j = 1:x
        for k = 1:y
            for l = 1:18
                a = find(numdata(meshsize(1)*(j-1)+1:meshsize(1)*j,...
                         meshsize(2)*(k-1)+1:meshsize(2)*k) == l);
                a(1) = 0;
                b(l) = a(end);
                clear a
            end
            clas(j,k) = find(b == max(b));
        end
    end
    pla = [str2double(files(i,5:6))+1,str2double(files(i,7:8))-4];
    output(x*(pla(1)-1)+1:x*pla(1),y*(pla(2)-1)+1:y*pla(2)) = clas;
    i/398
end
toc
save('landuse','output')
a = 1;
for i = 1:x*34
    for j = 1:y*25
        a = find(output(i,j) == 0);
        if a == 1
            output(i,j) = NaN;
        end
    end
end
pcolor(output)
axis ij equal tight
title([num2str(meshsize(1)/100),'km x ',num2str(meshsize(2)/100),'km'])



添付ファイル