python实现基于站点shp数据与文件夹内多个tif栅格批量提取到点,写入到一个EXCEL表
时间: 2023-03-31 19:03:03 浏览: 203
可以使用Python中的geopandas和rasterio库来实现基于站点shp数据与文件夹内多个tif栅格批量提取到点,并将结果写入到一个EXCEL表中。具体实现方法可以参考以下代码:
```python
import geopandas as gpd
import rasterio
from rasterio.features import geometry_mask
import pandas as pd
# 读取站点shp数据
points = gpd.read_file('points.shp')
# 定义一个函数,用于提取单个tif栅格中站点的值
def extract_value(point, tif_path):
with rasterio.open(tif_path) as src:
# 获取栅格中站点所在像素的行列号
row, col = src.index(point.geometry.x, point.geometry.y)
# 读取该像素的值
value = src.read(1, window=((row, row+1), (col, col+1)))
# 如果值为栅格中的nodata值,则返回None
if value == src.nodata:
return None
else:
return value[]
# 遍历文件夹内的所有tif栅格,提取站点的值
values = []
for tif_path in tif_paths:
with rasterio.open(tif_path) as src:
# 获取栅格的范围
bounds = src.bounds
# 筛选出站点所在范围内的栅格像素
mask = geometry_mask(points.geometry, out_shape=src.shape, transform=src.transform, invert=True)
# 读取栅格中站点的值
for point in points[mask].itertuples():
value = extract_value(point, tif_path)
values.append(value)
# 将结果写入到一个EXCEL表中
df = pd.DataFrame({'value': values})
df.to_excel('result.xlsx', index=False)
```
以上代码中,`points.shp`是站点shp数据的文件路径,`tif_paths`是包含多个tif栅格的文件夹路径。`extract_value`函数用于提取单个tif栅格中站点的值,`values`列表用于存储所有站点的值。遍历文件夹内的所有tif栅格,筛选出站点所在范围内的栅格像素,并调用`extract_value`函数提取站点的值。最后,将结果写入到一个名为`result.xlsx`的EXCEL表中。
阅读全文