爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 53987|回复: 90

[分享资料] 自制grads地图

  [复制链接]

新浪微博达人勋

发表于 2013-6-5 15:05:55 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
第一步:准备地图边界数据,格式如下,其中6、2表示后续经纬度数据个数
6
119.908859252930, 29.101516723633
119.910301208496, 29.100149154663
119.909950256348, 29.098592758179
119.907882690430, 29.098100662231
119.907005310059, 29.096168518066
119.907432556152, 29.096067428589
2
119.903472900391, 29.094945907593
119.902725219727, 29.095489501953

第二步:做分段处理(生成grad地图,每段经纬度个数不能超过255个)
可用fortran程序处理
例:
c   处理段落超过255,分段      
  parameter(m=10000,mm=250)
real lat(m),lon(m)
integer aa,bb
integer k,k1
open(1,file="d:\map\map.txt")
open(2,file="d:\map\map.tmp")
do 10 j=1,m
read(1,*,end=100)aa
    do i=1,aa
    read(1,*)lon(i),lat(i)
    enddo
    if(aa<255) then
    k=1
       write(2,222)aa,"0"
       do l=1,aa
         write(2,111)lon(l),lat(l)
     enddo
    else
    k=aa/250
    k1=mod(aa,250)
      do l=1,k
      write(2,222)mm,"0"
       do n=1,250
      write(2,111)lon(250*(l-1)+n),lat(250*(l-1)+n)
   enddo
      enddo
       write(2,222)k1,"0"
       do ll=1,k1
       write(2,111)lon(250*k+ll),lat(250*k+ll)
    enddo
    endif
111   format(f11.7,",",f10.7)
222   format(i4,2x,a1)
10 enddo
100   write(*,*)"read over,"
end
第三步:生成地图文件
fortran程序处理
integer*1  ihead(3),ilon(4),ilat(4)
       integer lon,lat,npairs
       equivalence (lon,ilon),(lat,ilat)
       real alat,alon
       character(len=30) flname
       flname="map.tmp"
       open(1,file=flname,status='old')
       flname="map"
      open(3,file=flname, form='binary')
      ihead(1)=1
      ihead(2)=1
      nsegs=0
   99 read(1,*,end=100) npairs
      nsegs=nsegs+1
      if(npairs.gt.255) then
      print *,'Number of pairs in segment no.',nsegs,'exceeds 255 !'
      stop 'job aborted'
      endif
      ihead(3)=npairs
      irec=irec+1
      write(3)ihead
      write(6,*)(ihead(k),k=1,3),npairs
      do 10 i=1,npairs
       read(1,*) alon,alat
      lon=int(alon*10000.)+0.5
      lat=int((alat+90.)*10000.)+0.5
      write(3)(ilon(k),k=3,1,-1)
      write(3)(ilat(k),k=3,1,-1)
   10 continue
      go to 99
  100 print *,'Total number of segments processed= ',nsegs
      print *,irec
      close(1)
      close(2)
      close(3)
      stop ' Normal termination'
      end
第四步:绘制地图
将生成的map考到grads根目录下的dat文件夹中
gs文件中加入
'set mpdset map'
'draw map'
即可显示地图

关于去掉边界外的等值线处理,还需配合province-basemap.gs,该文件可在论坛里下
同时要制作map_out.txt文件
map_out.txt格式为:经度范围、纬度范围、draw、边界经纬度序列、经纬度范围左下角坐标、右下角坐标、右上角坐标、左上角坐标、左下角坐标。注意:边界经纬度序列必须是一连续闭合的。
map_out例:
119.0999985  120.9000015   28.3999996   29.7999992  draw  119.9088593  29.1015167  119.9103012  29.1001492………… 119.0999985  28.3999996  120.9000015  28.3999996  120.9000015  29.7999992  119.0999985  29.7999992  119.0999985  28.3999996

如有问题,可邮件联系
bekaku@163.com




点评

挺不错,用MeteoInfo会更方便哈  发表于 2013-6-6 08:59

评分

参与人数 5金钱 +79 贡献 +11 收起 理由
半头砖 + 2 赞一个!
qxtlyf + 20 + 2
wlzhongouc + 20 + 2
mofangbao + 15 + 5
善人/jw + 22 + 2

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2013-6-5 15:11:41 | 显示全部楼层
自制的带乡镇边界底图,绘制的温度分布图效果
wyt.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-5 15:19:03 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-5 15:26:59 | 显示全部楼层
楼主辛苦了,给予诚挚的祝福!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-5 17:10:33 | 显示全部楼层
顶楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-5 18:20:08 | 显示全部楼层
很有用,谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-5 21:18:54 | 显示全部楼层
感谢!!!!!!!!!!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-6-6 08:58:17 | 显示全部楼层
谢谢 这个是楼主自己写的还是网上的那个经典版本?这个程序应该是支持最基础的地图格式吧,想支持开关的那种楼主有没有试着尝试一下呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-6 11:05:15 | 显示全部楼层
很有用,谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-6-6 11:29:32 | 显示全部楼层
mofangbao 发表于 2013-6-6 08:58
谢谢 这个是楼主自己写的还是网上的那个经典版本?这个程序应该是支持最基础的地图格式吧,想支持开关的那种楼 ...

支持开关的能否介绍一下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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