从栅格数据中提取训练数据并保存到CSV文件(制作遥感场景分类训练集)

import csv
import numpy as np
import rasterio
import pandas as pd

def readTif(fileName):
    try:
        dataset = rasterio.open(fileName)
        return dataset
    except rasterio.errors.RasterioIOError:
        print(f"文件 {fileName} 无法打开")
        return None

orgin_path = r'F:\datasets\ZY1E\不透水面提取\MIMFormer\HRMSI.tif'
sample_path = r'F:\datasets\ZY1E\不透水面提取\labels.tif'
csv_filename = r'F:\datasets\ZY1E\不透水面提取\labels.csv'
num_bands = 8
csv_head_name = [f'Band{i}' for i in range(1, num_bands + 1)] + ['Label', 'LabelName']
labels_name = {1: "Water", 2: "Other"}

ori_dataset = readTif(orgin_path)
label_dataset = readTif(sample_path)

if ori_dataset is not None and label_dataset is not None:
    label_matri = label_dataset.read(1)
    data_matri = ori_dataset.read()
    nonzero_indices = np.nonzero(label_matri)
    count = len(nonzero_indices[0])

    # 准备数据
    data = []
    for i in range(count):
        row, col = nonzero_indices[0][i], nonzero_indices[1][i]
        band_values = data_matri[:, row, col].tolist()
        label = label_matri[row, col]
        label_name = labels_name.get(label, 'Unknown')
        band_values.extend([label, label_name])
        data.append(band_values)

    # 使用 pandas 写入 CSV
    df = pd.DataFrame(data, columns=csv_head_name)
    df.to_csv(csv_filename, index=False)
    print(f"已将数据写入 CSV 文件: {csv_filename}")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用以下步骤将 R 语言的批量物种分布栅格数据转换为面数据,并将其保存到地理数据文件: 1. 首先,您需要加载所需的 R 包,例如 rgdal、raster、sp 等。 2. 然后,您需要将栅格数据读入 R 语言。可以使用 raster 包的 raster() 函数来完成此操作。例如: ```R library(raster) r <- raster("path/to/raster/file.tif") ``` 3. 接下来,您需要使用 extract() 函数从栅格提取物种分布数据。例如: ```R points <- extract(r, points_df) ``` 其,points_df 是一个包含物种分布点位信息的数据框。 4. 然后,您可以使用 as.data.frame() 函数将提取的点位数据转换为数据框。例如: ```R points_df <- as.data.frame(points) ``` 5. 接下来,您需要使用 sp 包的 SpatialPointsDataFrame() 函数将点位数据转换为空间点数据框。例如: ```R library(sp) coordinates(points_df) <- c("x", "y") proj4string(points_df) <- CRS("+proj=longlat +datum=WGS84") ``` 其,x 和 y 分别是点位数据经度和纬度的列名。 6. 最后,您需要将空间点数据保存到地理数据文件。可以使用 rgdal 包的 writeOGR() 函数来完成此操作。例如: ```R library(rgdal) dsn <- "PG:dbname=mydatabase host=myhost user=myuser password=mypassword port=myport" layername <- "mypoints" writeOGR(points_df, dsn, layername, driver="PostgreSQL", overwrite_layer=TRUE) ``` 其,dsn 是您的地理数据库连接信息,layername 是要保存的图层名称。请确保您已经安装并配置了适当的数据库驱动程序。 以上就是将 R 语言的批量物种分布栅格数据转换为面数据,并将其保存到地理数据文件的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python与遥感

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值