1、数据预处理
1.1读取TIF数据,并将其整合为mat格式
folder_path = 'C:\Users\y8143\Desktop\rs投稿\CCY_fx\';
% 获取文件夹下所有的 .tif 文件
tif_files = dir(fullfile(folder_path, '*.tif'));
% 读取第一个文件的经纬度信息
info = geotiffinfo(fullfile(folder_path, tif_files(1).name));
pop1990 = imread(fullfile(folder_path, tif_files(1).name));
% 获取各格点经纬度
lat = zeros(size(pop1990, 1), size(pop1990, 2));
lon = zeros(size(pop1990, 1), size(pop1990, 2));
x = lat;
y = lon;
for i = 1 : size(pop1990, 1)
for j = 1 : size(pop1990, 2)
[x(i, j), y(i, j)] = pix2map(info.RefMatrix, i, j);
end
end
[lat, lon] = projinv(info, x, y);
% 将经纬度转换为一列
lat_col = lat(:);
lon_col = lon(:);
% 初始化结果数组
result = [lat_col, lon_col];
% 遍历所有 .tif 文件并读取数据
for k = 1:length(tif_files)
% 读取当前文件的图像数据
tif_path = fullfile(folder_path, tif_files(k).name);
tif_data = imread(tif_path);
% 将不在 -1 到 1 范围内的数据设置为 0
tif_data(tif_data < -1 | tif_data > 1) = 0;
% 将图像数据转换为一列
tif_data_col = double(tif_data(:)); % 确保为 double 类型
% 将数据添加到结果数组中
result = [result, tif_data_col];
end
% 保存结果到文件
% 将结果保存为 .mat 文件
save(fullfile(folder_path, 'result.mat'), 'result');
1.2 将mat数据再保存为R语言中的data数据框格式
# 安装 R.matlab 包(如果尚未安装)
# install.packages("R.matlab")
# 加载 R.matlab 包
library(R.matlab)
# 读取 MAT 文件
mat_data <- readMat("C:/Users/y8143/Desktop/rs投稿/CCY_fx/result.mat")
# 查看读取的数据结构
str(mat_data)
# 提取数据
result <- mat_data$result
# 确保 result 是一个矩阵或数据框,并且有 23 列
if (ncol(result) != 23) {
stop("The result matrix does not have 23 columns as expected.")
}
# 创建列名向量
col_names <- c("lat", "lon", as.character(2000:2019), "land")
# 将 result 转换为数据框并设置列名
df <- as.data.frame(result)
names(df) <- col_names
# 查看数据框的前几行
head(df)
1.3