簡體   English   中英

從 python 中給定變量的緯度/經度點數據創建緯度/經度網格?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM