在Python中处理栅格数据,可以使用ArcGIS Pro的Python模块`arcpy`,以及`rasterio`和`rasterstats`等第三方库。以下是一些基本步骤和示例代码,展示如何使用Python处理栅格数据:
1. 定义栅格投影
```python
import os
import arcpy
设置工作空间
arcpy.env.workspace = "TIF" 栅格数据文件夹路径
遍历文件夹中所有后缀名为 .tif 的文件
for fileName in os.listdir("TIF"):
if fileName[-4:] == ".tif":
读取栅格数据文件路径
raster = os.path.join("TIF", fileName)
定义栅格投影为 WGS 1984
sr = arcpy.SpatialReference("WGS 1984")
arcpy.DefineProjection_management(raster, sr)
print(f"{fileName[:-4]} conversion successful!")
2. 栅格计算及数据统计
```python
import os
import arcpy
from arcpy import sa
from tqdm import tqdm
设置工作空间
arcpy.env.workspace = "Pre_Jilin.gdb"
if "Pre_Jilin1.gdb" not in os.listdir("."):
print("即将为您创建用于保存结果栅格的文件地理数据库(Pre_Jilin1.gdb)……")
arcpy.CreateFileGDB_management(".", "Pre_Jilin1")
print("数据库创建完成!")
遍历工作空间内所有栅格数据
for raster in tqdm(arcpy.ListRasters()):
通过栅格计算器将栅格值单位转换为 mm,并保存到结果数据库
sa.RasterCalculator([raster], [raster], f"{raster} * 0.1").save(f"Pre_Jilin1.gdb/{raster}")
print("计算完成!")
3. 使用`rasterstats`库进行统计
```python
import geopandas as gpd
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import rasterio
import rasterstats
from rasterio.plot import show
导入数据
gdf = gpd.read_file("path_to_vector_file.shp") 矢量数据路径
rasters = ["path_to_raster1.tif", "path_to_raster2.tif"] 栅格数据路径列表
使用rasterstats计算统计值
stats = rasterstats.stats(rasters, gdf, attribute="column_name_in_gdf")
输出统计结果
print(stats)
4. 数据重采样
```python
from osgeo import gdal
打开栅格数据
in_ds = gdal.Open("p047r027_7t_z10_nn10.tif")
in_band = in_ds.GetRasterBand(1)
设置输出缓冲区大小
out_columns, out_rows = in_band.XSize, in_band.YSize
buf_xsize = out_columns * 2
buf_ysize = out_rows * 2
创建输出缓冲区数组
data = np.zeros((out_rows, out_columns), dtype=in_band.DataType)
读取数据并写入输出缓冲区数组
in_band.ReadAsArray(buf_xsize=buf_xsize, buf_ysize=buf_ysize, buf_x=0, buf_y=0, data=data)
设置输出栅格
out_ds = gdal.GetDriverByName("GTiff").Create("output_file.tif", out_columns, out_rows, 1, in_band.DataType)
out_ds.SetGeoTransform(in_ds.GetGeoTransform())
out_ds.GetRasterBand(1).WriteRaster(0, 0, out_columns, out_rows, data)
以上示例展示了如何使用Python处理栅格数据的基本步骤,包括定义投影、栅格计算、数据统计以及数据重采样。你可以根据具体需求调整代码中的参数和路径。