爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: 斥鷃

[程序设计] matlab中地图边界与掩膜(去掉边界外区域)的实现(基于shape文件)

  [复制链接]

新浪微博达人勋

发表于 2013-9-21 18:46:39 | 显示全部楼层
找了好久的方法,顶一个
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-24 18:18:44 | 显示全部楼层
在直白一点就好了,我还是看不明白撒
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-24 23:19:42 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-25 08:53:40 | 显示全部楼层
斥鷃 发表于 2013-10-24 23:19
哪里不明白可以留言~

谢谢可能问题比较多,我以前用IDL来画气溶胶数据,不过发现不能只画中国的一些标注也不是很好字体等等都不能改,现在要用MATLAB,问题是你写的可能还是有一点不明白如何可以帮我回到下,谢谢了
[lon lat]=meshgrid([97:0.1:107],[21:0.1:30]); 没什么说的
Z=griddata(gy_locat(:,2),gy_locat(:,3),EOF_used(:,1),lon,lat,'v4');
这个里面的V4是?你这个EOF_used(:,1)算是一维的,如果我有一个二维的如何写?EOF[360,180]
yunnan=shaperead('D:\myitem\arcgis\yunnan.shp');
这个的问题,我在其他文件下了中国的shp应该就可以了吧
R=makerefmat('RasterSize',size(Z),'Lonlim',[97 107],'Latlim',[21 30]);
MASK=vec2mtx(yunnan.Y,yunnan.X,Z,R,'filled');
MASK(find(MASK>1))=nan;
MASK(find(MASK==1))=0;
contourf(lon,lat,Z+MASK,30);
shading flat
colorbar
hold on
plot(yunnan.X,yunnan.Y,'-k','linewidth',3)
hold off
如上这些和你写的一样是不是就可以了出图了?
PS如果用M_MAP可能会比较简单么
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-25 09:27:43 | 显示全部楼层
  1. %中国地图附加南海地图
  2. clc;clear

  3. s='F:\studyData\MODIS\Terra\L3MonthyAerosol\2004\001\MOD08_M3.A2004001.051.2010284170915.hdf';
  4. l333=hdfread(s,'Optical_Depth_Land_And_Ocean_Mean_Mean');
  5.   [alon,alat]=meshgrid(72:1:137,16:1:55);

  6. l1=double(l333(72:137,16:55))';

  7. [lon lat]=meshgrid([72:1:137],[16:1:55]);
  8. %Z=griddata(l1);
  9. yunnan=shaperead('bou1_4l.shp');

  10. R=makerefmat('RasterSize',size(l1),'Lonlim',[72 137],'Latlim',[16 55]);
  11. MASK=vec2mtx(yunnan(:).Y,yunnan(:).X,l1,R,'filled');
  12. MASK(find(MASK>1))=nan;
  13. MASK(find(MASK==1))=0;

  14. contourf(lon,lat,l1+MASK,30);
  15. shading flat
  16. colorbar
  17. hold on
  18. plot(yunnan.X,yunnan.Y,'-k','linewidth',3)
  19. hold off
复制代码
Error using vec2mtx (line 89)
Too many input arguments.

Error in ff (line 17)
MASK=vec2mtx(yunnan(:).Y,yunnan(:).X,l1,R,'filled');这个错误哎,不明白了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-25 23:24:33 | 显示全部楼层
小寶 发表于 2013-10-25 08:53
谢谢可能问题比较多,我以前用IDL来画气溶胶数据,不过发现不能只画中国的一些标注也不是很好字体等等都不 ...

griddata是一个二维插值函数,'v4'是插值算法名,因为我的数据是格点数据,所以需要先插值到平面以后才能使用,如果你的直接是网格数据就不影响了。MASK=vec2mtx(yunnan(:).Y,yunnan(:).X,l1,R,'filled');中yunnan后面不需要加(:)表示引用,这里yunnan是个结构数组,.x是它的属性,去掉这部分你试试吧。另外问一下你的matlab是哪个版本的,版本问题可能也有影响。还有就是m_map没有怎么用过,但是工具箱挺强大的样子,所以也没有什么发言权,会不会简单些就不清楚了。希望能帮到你。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-25 23:40:50 | 显示全部楼层
斥鷃 发表于 2013-10-25 23:24
griddata是一个二维插值函数,'v4'是插值算法名,因为我的数据是格点数据,所以需要先插值到平面以后才能 ...

我的是R2011b

是不是上面我写的代码没什么问题?

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

新浪微博达人勋

发表于 2013-10-25 23:45:29 | 显示全部楼层
  1. %中国地图附加南海地图
  2. clc;clear

  3. s='F:\studyData\MODIS\Terra\L3MonthyAerosol\2004\001\MOD08_M3.A2004001.051.2010284170915.hdf';
  4. l333=hdfread(s,'Optical_Depth_Land_And_Ocean_Mean_Mean');
  5.   [alon,alat]=meshgrid(72:1:137,16:1:55);

  6. l1=double(l333(72:137,16:55))';

  7. [lon lat]=meshgrid([72:1:137],[16:1:55]);
  8. %Z=griddata(l1);
  9. yunnan=shaperead('bou1_4l.shp');

  10. R=makerefmat('RasterSize',size(l1),'Lonlim',[72 137],'Latlim',[16 55]);
  11. MASK=vec2mtx(yunnan.Y,yunnan.X,l1,R,'filled');
  12. MASK(find(MASK>1))=nan;
  13. MASK(find(MASK==1))=0;
  14. inpolygon
  15. contourf(lon,lat,l1+MASK,30);
  16. shading flat
  17. colorbar
  18. hold on
  19. plot(yunnan.X,yunnan.Y,'-k','linewidth',3)
  20. hold off
复制代码
Error using vec2mtx (line 89)
Too many input arguments.

Error in ff (line 15)
MASK=vec2mtx(yunnan.Y,yunnan.X,l1,R,'filled'); QQ截图20131025234352.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-1-2 15:54:53 | 显示全部楼层
学好matlab出图是不是就可以不用学习surfer出图了呢~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-1-2 20:33:03 | 显示全部楼层
太棒了,一直苦于纠结于用matlab画shp图
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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