- 积分
- 55957
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 MeteoInfo 于 2016-3-8 08:41 编辑
局地投影文件是对极轨资料原始文件进行辐射订正、投影变换、几何纠正等预处理工作后生成的文件格式。相对于原始文件来说,局地文件具备已完成投影、几何纠正和文件存储空间小等优势,是气象部门常用的存储格式,常见的文件后缀包括LD2和LDF。局地文件由头文件和通道数据2部分组成,其中头文件占128字节,通道数据依照BSQ(band sequential)格式排列,按波段依次存储数据。具体的数据格式可以参考下面的文章:
谭明艳,李程,李辉,2011,基于ENVI/IDL的气象卫星局地投影数据的提取,广东气象,33(2):62-64.
这里给出利用MeteoInfoLab脚本读取某个波段的数据并绘图的例子。首先利用Python读取二进制文件的模块(struct)将数据中的一些参数读取出来,然后利用MeteoInfoLab中的binread()函数读取某个波段的数据至一个二维数组并绘图。binread()函数的第一个参数是数据文件名,第二个参数是数据维的设置,第三个参数是数据类型,此外还有一些可选参数,skip参数指定了读取数据时跳过的字节数,byteorder指定了字节顺序(big_endian或者little_endian,缺省为little_endian)。局地投影数据每个数据是2个字节的整数(即short),数据读取后要除以10。
示例脚本:
- import struct
- fn = 'E:/Temp/jingjing/NOAA16_AVHRR_20050601.MOS.ldf'
- #Read data header parameters
- f = open(fn, 'rb')
- fid, = struct.unpack('2s', f.read(2))
- sid, = struct.unpack('<h', f.read(2))
- f.read(4)
- year, = struct.unpack('<h', f.read(2))
- month, = struct.unpack('<h', f.read(2))
- day, = struct.unpack('<h', f.read(2))
- hour, = struct.unpack('<h', f.read(2))
- minute, = struct.unpack('<h', f.read(2))
- f.read(2)
- channel_n, = struct.unpack('<h', f.read(2))
- proj, = struct.unpack('<h', f.read(2))
- xn, = struct.unpack('<h', f.read(2))
- yn, = struct.unpack('<h', f.read(2))
- xdelta, = struct.unpack('<f', f.read(4))
- ydelta, = struct.unpack('<f', f.read(4))
- lon_1, = struct.unpack('<f', f.read(4))
- lon_2, = struct.unpack('<f', f.read(4))
- raduis, = struct.unpack('<f', f.read(4))
- lat_min, = struct.unpack('<f', f.read(4))
- lat_max, = struct.unpack('<f', f.read(4))
- lon_min, = struct.unpack('<f', f.read(4))
- lon_max, = struct.unpack('<f', f.read(4))
- f.close()
- #Read one channel data
- cn = 3 #4th channel
- skipn = 128 + (xn * yn * 2) * cn
- data = binread(fn, [yn, xn], 'short', skip=skipn)
- data = data[::-1,:]
- data = data.astype('float')
- data[data<=0] = nan
- data = data / 10
- lon = arange1(lon_min, xn, xdelta)
- lat = arange1(lat_min, yn, ydelta)
- #Plot
- axesm()
- lworld = shaperead('D:/Temp/Map/country1.shp')
- lchina = shaperead('D:/Temp/Map/bou2_4p.shp')
- geoshow(lchina, edgecolor='b')
- geoshow(lworld, edgecolor='b')
- cmap = 'MPL_gist_gray'
- levs = arange(2200, 3001, 50)
- layer = imshowm(lon, lat, data, levs, cmap=cmap)
- colorbar(layer)
- t = datetime.datetime(year, month, day, hour, minute)
- title('AVHRR (' + t.strftime('%Y-%m-%d') + ')')
|
|