![](/img/trans.png)
[英]grid point interpolation of wrf data to lat lon in python with numpy and scipy
[英]Creating a lat/lon grid from lat/lon point data of a given variable in python?
我有一個很大的 dataframe,df,它是我從多個分散的、不規則的數據文件創建的。
df 很長 (8131596) 並且包含以下列:日期、緯度、經度、var1、var2。
理想情況下,我想創建一個特定緯度/經度邊界框的 2D 網格/地圖,並應用我的 df,以便包含屬於該緯度/經度的任何數據。 或者,根據我的數據創建 2D 緯度/經度網格,我可以稍后對其進行切割(即,以 2D“圖像”/矩陣結束)。
然后我將在這些不規則點之間進行插值,最終得到 df 中每個變量的基本數據字段。
但是,關於此問題,我對 go 的最佳方式有點困惑。 我認為可能會涉及網格,但我似乎找不到與這種情況相關的任何先前問題/幫助。
非常感謝任何建議!
這是針對 var1 的,您必須對 var2 重復此操作
import numpy as np
import pandas as pd
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
import rasterio
from rasterio.crs import CRS
# define interpolation inputs
points = list(zip(df.longitude,df.latitude))
values = df.var1.values # change to var2 for second grid
# define raster resolution
rRes = 50
# create coord ranges over the desired raster extension
xRange = np.arange(df.longitude.min(),df.longitude.max()+rRes,rRes)
yRange = np.arange(df.latitude.min(),df.latitude.max()+rRes,rRes)
# create arrays of x,y over the raster extension
gridX,gridY = np.meshgrid(xRange, yRange)
# interpolate over the grid
gridPh = griddata(points, values, (gridX,gridY), method='linear')
# show interpolated values
plt.imshow(gridPh)
plt.colorbar()
# definition of the raster transform array
from rasterio.transform import Affine
transform = Affine.translation(gridX[0][0]-rRes/2, gridY[0][0]-rRes/2)*Affine.scale(rRes,rRes)
transform
# get crs as wkt
# use your crs here
rasterCrs = CRS.from_epsg('32718')
rasterCrs.data
#definition, register and close of interpolated raster
interpRaster = rasterio.open('./interpRaster3.tif',
'w',
driver='GTiff',
height=gridPh.shape[0],
width=gridPh.shape[1],
count=1,
dtype=gridPh.dtype,
crs=rasterCrs,
transform=transform,
)
interpRaster.write(gridPh,1)
interpRaster.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.