在Python中插入纬度、经度和数据(圆内的结构化网格)

在Python中插入纬度、经度和数据(圆内的结构化网格),python,scipy,gis,interpolation,estimation,Python,Scipy,Gis,Interpolation,Estimation,我有一组纬度、经度点和一个数据变量,例如来自地址的驾驶时间。这些点是通过采样一个结构化的网格,然后切出一个圆来创建的 因此,我认为我不能拥有一个数据矩阵,因为某些列的零/缺失比其他列多(圆圈的顶部和底部),这可能会混淆算法 理想情况下,我想用更多的点填充圆圈;e、 g.在小数点后5位,我用51.54540、51.54541……代替51.5454和51.5455,51.54550 我的数据如下所示: 我想填补以下空白: 我试过使用: from scipy.interpolate import

我有一组纬度、经度点和一个数据变量,例如来自地址的驾驶时间。这些点是通过采样一个结构化的网格,然后切出一个圆来创建的

因此,我认为我不能拥有一个数据矩阵,因为某些列的零/缺失比其他列多(圆圈的顶部和底部),这可能会混淆算法

理想情况下,我想用更多的点填充圆圈;e、 g.在小数点后5位,我用51.54540、51.54541……代替51.5454和51.5455,51.54550

我的数据如下所示:

我想填补以下空白:

我试过使用:

from scipy.interpolate import RectSphereBivariateSpline
以下面的方式-(测试用例),但是我不确定这通常是否是正确的方法

def geointerp(lats, lons, data, grid_size_deg, mesh=False):
    deg2rad = np.pi/180.
    new_lats = np.linspace(50, 51, 180/grid_size_deg)
    new_lons = np.linspace(-1, 1, 360/grid_size_deg)
    new_lats, new_lons = np.meshgrid(new_lats*deg2rad, new_lons*deg2rad)
    #We need to set up the interpolator object

    lut = RectSphereBivariateSpline(lons*deg2rad, lats*deg2rad, data)

    new_lats = new_lats.ravel()
    new_lons = new_lons.ravel()
    data_interp = lut.ev(new_lats,new_lons)

    if mesh == True:
        data_interp = data_interp.reshape((360/grid_size_deg, 180/grid_size_deg)).T

    return new_lats/deg2rad, new_lons/deg2rad, data_interp

# Read in-data
lats_in = []
lons_in = []
data_in = []
with open('interpolation_test.csv') as f:
    for x in csv.reader(f):
        lats_in.append(float(x[0]))
        lons_in.append(float(x[1]))
        data_in.append(float(x[2]))

# Interpolate:
lats_in = np.asarray(lats_in)
lons_in = np.asarray(lons_in)
data_in = np.asarray(data_in)
output_list = geointerp(lats_in, lons_in, data_in, 0.01)

#  Output
f = open('interpolation_test_out.csv', 'w', newline='')
w = csv.writer(f)
for out in output_list:
    w.writerow([out])
f.close()
更不用说错误了,比如:

"if not v.size == r.shape[1]:
IndexError: tuple index out of range"

“将数据插入到3D.p.”。。。什么是“3 d.p.”?我很确定他指的是3个小数点,但我仍然对整个问题感到困惑。实际上,我认为“3 dp”指的是三维数据,因为他的每个点都是三维的,即时间、局域网、lat。对于混淆,我深表歉意;我的意思是小数点后3位->我想在我现有的数据上创建一个精细的(r)网格,也许可以尝试使用以下命令——“将数据插值到3 d.p.”。。。什么是“3 d.p.”?我很确定他指的是3个小数点,但我仍然对整个问题感到困惑。实际上,我认为“3 dp”指的是三维数据,因为他的每个点都是三维的,即时间、局域网、lat。对于混淆,我深表歉意;我的意思是小数点后3位->我想在现有数据上创建一个精细的(r)网格,可以尝试使用以下方法-