爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

MeteoInfoLab脚本示例:MODIS Sinusoidal投影HDF数据

[复制链接]

新浪微博达人勋

 楼主| 发表于 2015-10-30 13:31:31 | 显示全部楼层
837078493 发表于 2015-10-29 22:10
http://pan.baidu.com/s/1o6irQJ4

需要知道你的模式的格点坐标,比如每个格点的经纬度,或者在模式投影坐标系下的坐标信息。

其实就是要将Sinusoida投影的数据投影到模式的格点上。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-30 16:07:37 | 显示全部楼层
MeteoInfo 发表于 2015-10-30 13:31
需要知道你的模式的格点坐标,比如每个格点的经纬度,或者在模式投影坐标系下的坐标信息。

其实就是要 ...

模式的左上角经纬度是103.675,36.308右下角是104.583,35.5731  分辨率是1km
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-11-3 00:06:50 | 显示全部楼层
837078493 发表于 2015-10-30 16:07
模式的左上角经纬度是103.675,36.308右下角是104.583,35.5731  分辨率是1km

根据你提供的格点设置,获取格点在Lambert投影下的坐标(米为单位),用下面的脚本:
  1. fromproj = projinfo(proj='longlat')
  2. toproj = projinfo(proj='lcc', lon_0=104.137, lat_0=35.946, lat_1=30.0, lat_2=60.0)
  3. lon = 104.583
  4. lat = 35.5731
  5. x, y = project(lon, lat, fromproj=fromproj, toproj=toproj)


然后用下面的脚本将Sinusoidal投影数据转为Lambert投影数据。
  1. f = addfile('D:/Temp/Hdf/MOD09A1.A2008217.h26v05.006.2015177090630.hdf')
  2. vname = 'sur_refl_b01'
  3. data = f[vname][:,:]
  4. #Set projection
  5. toproj = projinfo(proj='lcc', lon_0=104.137, lat_0=35.946, lat_1=30.0, lat_2=60.0)
  6. #Set x/y
  7. x = arange(-40586.90607311319, 39626.10751807479, 1000)
  8. y = arange(-40422.11861349553, 39427.31922978533, 1000)
  9. #Project
  10. data = data.project(x, y, toproj)
  11. #Write to a binary file
  12. outfn = 'D:/Temp/test/' + vname + '.bin'
  13. binwrite(outfn, data)
  14. #Plot
  15. axesm(projinfo=toproj, griddx=0.2, griddy=0.2)
  16. mlayer = shaperead('D:/Temp/map/country1.shp')
  17. geoshow(mlayer)
  18. levs = arange(0, 100, 5)
  19. layer = imshowm(x, y, data, 20, proj=toproj)
  20. title(vname)
  21. colorbar(layer)
  22. #axism()

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-3 00:15:46 | 显示全部楼层
不明觉厉呀!   
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-3 10:27:46 | 显示全部楼层
MeteoInfo 发表于 2015-11-3 00:06
根据你提供的格点设置,获取格点在Lambert投影下的坐标(米为单位),用下面的脚本:

谢谢您啊   我有个关于投影的问题想请教一下  对于同一个经纬度坐标 该点对应的数据 如果用不同的投影得到的该点的数据值是一样的吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-11-3 10:29:53 | 显示全部楼层
837078493 发表于 2015-11-3 10:27
谢谢您啊   我有个关于投影的问题想请教一下  对于同一个经纬度坐标 该点对应的数据 如果用不同的投影得 ...

理论上应该是一样的,实际上由于浮点计算误差可能会有一点小的差别。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-3 10:48:42 | 显示全部楼层
MeteoInfo 发表于 2015-11-3 10:29
理论上应该是一样的,实际上由于浮点计算误差可能会有一点小的差别。

哦哦  好的  太感谢您啦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-11-11 20:58:30 | 显示全部楼层
同志你好,我想请问如何将1km的modis影像与30米的landsat影像相匹配?还有在matlab里面如何实现影像的拼接,谢谢了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-4-1 13:00:57 | 显示全部楼层
不错,学习学习!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-29 01:17:40 | 显示全部楼层
本帖最后由 孤蓝et 于 2019-1-29 01:28 编辑
MeteoInfo 发表于 2015-11-3 00:06
根据你提供的格点设置,获取格点在Lambert投影下的坐标(米为单位),用下面的脚本:

王老师,打算将卫星云图的圆盘图(Geostationary Satellite View)转换为其他投影方式进行绘图,
看了您的这个帖子,用您的demo和数据,但是其中有些参数设置不太理解,我怎样配合自己的数据来实现投影转换?


1、基本明白project函数的使用了,我也会输入一个x和y,得到另外一个投影方式下的x和y的数值。也明白demo中x = arange(-40586.90607311319, 39626.10751807479, 1000)的数值是通过这个方法转换而来的。

  1. fromproj = projinfo(proj='longlat')
  2. toproj = projinfo(proj='lcc', lon_0=104.137, lat_0=35.946, lat_1=30.0, lat_2=60.0)
  3. lon = 104.583
  4. lat = 35.5731
  5. x, y = project(lon, lat, fromproj=fromproj, toproj=toproj)
复制代码



2、假如我针对自己手头的FY4数据,里面的参数怎么设置?利用下面的代码,输出data后发现里面都是0.

  1. #Add data file
  2. fn = 'D:/MeteoInfo/MeteoInfo.py/FY/FY4A-_AGRI--_N_REGC_1047E_L1-_FDI-_MULT_NOM_20190123043000_20190123043416_4000M_V0001.HDF'
  3. f = addfile(fn)
  4. print(f)

  5. #Get data
  6. data = f['NOMChannel02'][::-1,:]

  7. #Set projection
  8. #fromproj = projinfo(proj='geos', lon_0=104.74425, h=35781793)
  9. #toproj = projinfo(proj='longlat')
  10. toproj = projinfo() #此处为default,则默认是longlat经纬网格投影

  11. #Set x/y
  12. #x = arange(-40586.90607311319, 39626.10751807479, 1000)
  13. #y = arange(-40422.11861349553, 39427.31922978533, 1000)
  14. x=linspace(-5496000.0,5496000.0,2748)
  15. y=linspace(-5496000.0,5496000.0,2748)

  16. #Project
  17. data = data.project(x, y, toproj)#此处仅包含toproj,那这个函数怎么知道原先这个数据是geos投影呢?

  18. #保存数据至文本文件
  19. f1 = open("out.txt",'w')
  20. for tmp in data:
  21.     f1.write(str(tmp))
  22.     f1.write("\r")
  23. f1.close()

复制代码


另外,我搜索了meteothink.org文档,没有找到data.project(x, y, toproj)的说明啊,不知道这个函数怎么使用?麻烦您指导一下如何将geos投影转换成其他类型投影的绘图方式,万分感谢。



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

本版积分规则

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

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

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