时宇梵 2024-01-22 14:16 采纳率: 100%
浏览 44
已结题

R语言进行,波段反演,输出栅格数据

请问如何将clay_svm输出为栅格数据?
输出的栅格数据应只有一个波段即layer或band,其值应该为clay_svm的值


rm(list = ls())  # 清除所有数据

# 加载包
library(terra)
library(raster)
library(sp)
library(tidyr)
library(tidyverse)
library(zoo)
library(ncdf4)
library(e1071)#SVM函数
# 读取遥感影像
raster_img_4 <- stack("D:/2 given R/raster/2023_10m_6_1.TIF")
raster_img_6 <- stack("D:/2 given R/raster/2023_10m_8_1.TIF")
#block_size <- 10000000  # 设定每次读取的块大小
ncell(raster_img_6)

df <- as.data.frame(xyFromCell(raster_img_4, 1:ncell(raster_img_4)), stringsAsFactors = FALSE)
names(df) <- c("Longitude", "Latitude")

# 创建足够的列并初始化为NA
for (i in 1:10) {
  df[paste0("Band_", i)] <- rep(NA, nrow(df))
}

#读取反射率
for (i in 1:4) {
  df[paste0("Band_", i)] <- extract(raster_img_4[[i]], 1:ncell(raster_img_4))
}

df[paste0("Band_", 5)] <- extract(raster_img_6[[2]], 1:ncell(raster_img_6))
df[paste0("Band_", 6)] <- extract(raster_img_6[[3]], 1:ncell(raster_img_6))
df[paste0("Band_", 7)] <- extract(raster_img_6[[4]], 1:ncell(raster_img_6))
df[paste0("Band_", 8)] <- extract(raster_img_6[[5]], 1:ncell(raster_img_6))
df[paste0("Band_", 9)] <- extract(raster_img_6[[7]], 1:ncell(raster_img_6))
df[paste0("Band_", 10)] <- extract(raster_img_6[[8]], 1:ncell(raster_img_6))

#开始反演#
bb<-read.csv("G:/操作/data_clay_log_1.csv",header = TRUE,sep = ",")
library(e1071)#SVM函数
model = svm(Clay~.,data=bb,knernel = "radial")
clay_svm_pred <- predict(model,df,decision.values = TRUE)
clay_svm <- 10^(-clay_svm_pred)#结果处理

#准备输出
  • 写回答

10条回答 默认 最新

  • GISer Liu 2024-01-22 14:18
    关注

    该回答引用自GPT-4,由博主GIS_Liu编写:

    您的问题是关于如何将使用R语言进行的SVM波段反演的结果输出为栅格数据。以下是解决方案的详细步骤:

    问题分析

    • 您已经通过SVM方法对遥感影像数据进行了反演,生成了clay_svm_pred变量。
    • 您需要将这些预测结果转换为栅格数据格式,以便进行空间分析和可视化。

    解决方案

    1. 创建与原始栅格数据相同维度的栅格模板:利用terra包中的raster函数,创建一个新的空白栅格对象,其维度和分辨率与原始影像相同。

    2. 填充栅格数据:将SVM反演的结果填充到新创建的栅格对象中。

    3. 保存栅格数据:将填充后的栅格数据保存为常用的栅格数据格式,例如GeoTIFF。

    代码大纲

    # 加载所需的库
    library(terra)
    library(e1071) # SVM函数
    
    # ... [您之前的代码,包括SVM模型的训练和预测] ...
    
    # 创建与原始栅格数据相同维度的栅格模板
    template <- rast(raster_img_4)  # 假设raster_img_4与预测数据维度一致
    
    # 将SVM预测结果填充到栅格中
    clay_svm_raster <- setValues(template, clay_svm_pred)
    
    # 保存栅格数据
    writeRaster(clay_svm_raster, "path/to/save/clay_svm.tif", format="GTiff")
    

    注意事项

    • 确保clay_svm_pred的长度与原始栅格数据的像素数量相同。
    • 检查保存路径是否正确,确保有相应的写入权限。
    • 如果原始数据有多个波段,确保使用正确的波段来创建栅格模板。

    这个解决方案应该可以满足您将SVM反演结果输出为栅格数据的需求。如果在实施过程中遇到任何问题,请随时提出,我会继续提供帮助。

    如果该回答解决了您的问题,请采纳!如果没有,请详述问题所在!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

问题事件

  • 系统已结题 1月31日
  • 已采纳回答 1月23日
  • 修改了问题 1月22日
  • 创建了问题 1月22日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见