Извлечение значения двумерного сеточного поля по точкам рассеяния в Python - PullRequest
0 голосов
/ 10 октября 2018

У меня есть двумерные файлы в сетке, которые представляют каталоги землепользования для интересующей достопримечательности.
У меня также есть некоторые точки на основе широты / долготы, распределенные в этой области.

from netCDF4 import Dataset

## 2-d gridded files
nc_file = "./geo_em.d02.nc"
geo = Dataset(nc_file, 'r')
lu = geo.variables["LU_INDEX"][0,:,:]
lat = geo.variables["XLAT_M"][0,:]  
lon = geo.variables["XLONG_M"][0,:] 

## point files
point = pd.read_csv("./point_data.csv")
plt.pcolormesh(lon,lat,lu)
plt.scatter(point_data.lon,cf_fire_data.lat, color ='r')   

enter image description here

Я хочу извлечь значения 2-го координатного поля, которому принадлежат эти точки, но я обнаружил, что определить его сложнопростая функция, чтобы решить это.

Есть ли эффективный способ добиться этого?

Буду признателен за любые советы.

PS

Я загрузил здесь свои файлы

1.nc_file
2.point_file

1 Ответ

0 голосов
/ 10 октября 2018

Я могу предложить решение, подобное этому, где я просто зацикливаюсь на точках и выбираю данные на основе расстояния от точки.

#/usr/bin/env ipython
import numpy as np
from netCDF4 import Dataset
import matplotlib.pylab as plt
import pandas as pd
# --------------------------------------
## 2-d gridded files
nc_file = "./geo_em.d02.nc"
geo = Dataset(nc_file, 'r')
lu = geo.variables["LU_INDEX"][0,:,:]
lat = geo.variables["XLAT_M"][0,:]  
lon = geo.variables["XLONG_M"][0,:] 

## point files
point = pd.read_csv("./point_data.csv")
plt.pcolormesh(lon,lat,lu)
#plt.scatter(point_data.lon,cf_fire_data.lat, color ='r') 
# --------------------------------------------
# get data for points:
dataout=[];
lon_ratio=np.cos(np.mean(lat)*np.pi/180.0)
for ii in range(len(point)):
    plon,plat = point.lon[ii],point.lat[ii]
    distmat=np.sqrt(1./lon_ratio*(lon-plon)**2+(lat-plat)**2)
    kk=np.where(distmat==np.min(distmat));
    dataout.append([float(lon[kk]),float(lat[kk]),float(lu[kk])]);
# ---------------------------------------------
...