爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

格点插值为站点数据批量处理

  [复制链接]

新浪微博达人勋

发表于 2016-8-11 16:32:02 | 显示全部楼层
这里似乎没有考虑投影的问题,直接tostation是在假定直接读取的stdata中的投影与model.ctl中描述的投影方式一致,如果二者不是相同投影下的坐标,是不是会出问题?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-8-11 16:48:51 | 显示全部楼层
lovechang1314 发表于 2016-8-11 16:32
这里似乎没有考虑投影的问题,直接tostation是在假定直接读取的stdata中的投影与model.ctl中描述的投影方式 ...

见本帖第29楼
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-12 11:47:20 | 显示全部楼层
王老师,您好!运行的时候遇到了这个错误
TypeError: __len__() should return an int
能够插值出结果,可是结果都是空值~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-12 12:12:38 | 显示全部楼层
Luo丹王道 发表于 2017-1-12 11:47
王老师,您好!运行的时候遇到了这个错误
TypeError: __len__() should return an int
能够插值出结果, ...

你把错误信息贴全,最好把脚本代码也附上,这样能看出是运行到哪一行出的错。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-12 14:50:59 | 显示全部楼层
MeteoInfo 发表于 2017-1-12 12:12
你把错误信息贴全,最好把脚本代码也附上,这样能看出是运行到哪一行出的错。

run script...
Longitude
Latitude
temp
Finish...
TypeError: __len__() should return an int


脚本是:
#Open station file as table data
stdata = readtable('E:/Temp/duan.csv', delimiter=',', format='%s%f%f')
x = stdata['Longitude']
y = stdata['Latitude']
#Add data file
f = addfile('E:/model/cn025_tem.ctl')
#Get data variable
psv = f['temp']
#Get time dimension length
tn = psv.dimlen(0)
#Loop
for i in range(0, tn):
    #Get dimension array
    ps = psv[i,(10,60),(60,140)]
    #Interpolate to stations
    ps_st = ps.tostation(x, y)
    #Add column to table data
    colname = 'temp' + str(i)
    stdata.addcol(colname, '%d', ps_st)
#Save table data to a file
fn = 'E:/Temp/duantem.csv'
stdata.savefile(fn)
print 'Finish...'
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-12 15:26:57 | 显示全部楼层
Luo丹王道 发表于 2017-1-12 14:50
run script...
Longitude
Latitude

看起来程序已经正常运行结束了。你把脚本里用到的相关文件传上来我试试。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-12 17:31:42 | 显示全部楼层
MeteoInfo 发表于 2017-1-12 15:26
看起来程序已经正常运行结束了。你把脚本里用到的相关文件传上来我试试。

王老师,我的那个数据很大,一个就13G多了,没法传上来~~~
dset E:\CN025\temp.nc
dtype netcdf
UNDEF -8999999873090290000000000000000000.00
title temp.nc
options yrev
XDEF   2748 linear    67.832985947439 0.025
YDEF   1575 linear    15.299266720710 0.025
tdef 744 linear jan1951 1mo
ZDEF 1 levels 1
vars 1
temp  0 t,y,x temp(K)         
ENDVARS
这是ctl文件
如果必须要数据才能测试的话,我用百度盘传给您可以吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-12 19:40:41 | 显示全部楼层
Luo丹王道 发表于 2017-1-12 17:31
王老师,我的那个数据很大,一个就13G多了,没法传上来~~~
dset E:\CN025\temp.nc
dtype netcdf

对于netCDF数据MeteoInfoLab可以直接用addfile函数打开,不需要也不支持ctl文件。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-13 08:49:24 | 显示全部楼层
王老师,我改成了
#Open station file as table data
stdata = readtable('E:/Temp/duan.csv', delimiter=',', format='%s%f%f')
x = stdata['Longitude']
y = stdata['Latitude']
#Add data file
f = addfile('E:/CN025/temp.nc')
#Get data variable
psv = f['temp']
#Get time dimension length
tn = psv.dimlen(0)
#Loop
for i in range(0, tn):
    #Get dimension array
    ps = psv[i,(10,60),(60,140)]
    #Interpolate to stations
    ps_st = ps.tostation(x, y)
    #Add column to table data
    colname = 'temp' + str(i)
    stdata.addcol(colname, '%d', ps_st)
#Save table data to a file
fn = 'E:/Temp/duantem.csv'
stdata.savefile(fn)
print 'Finish...'
查了下您发的别的关于打开netCDF数据的帖子,还是不懂怎么读,请您帮帮忙~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-13 08:58:32 | 显示全部楼层
Luo丹王道 发表于 2017-1-13 08:49
王老师,我改成了
#Open station file as table data
stdata = readtable('E:/Temp/duan.csv', delimiter ...

有错误信息吗?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表