|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
今天看到@clare发帖说希望能提取平行四边形内的点,如果用在GrADS的maskout文件,这个用MeteoInfo实现实在很方便,如果有朋友希望自己通过fortran实现这个过程,那可以看看本帖子。
最近在做的项目中也用到点和多边形的关系,于是就顺手转写为fortran的了,具体的算法大家可以查阅相关文献,这里我就不多说了。
附件程序中我是利用这个函数输出了GrADS的maskout文件,并进行了测试,测试中我使用MeteoInfo提取中江苏省的边界(wmp文本格式),然后删掉了开始描述行,最后文件格式如图:
这里贴出生成GrADS的maskout文件的代码,关键子函数的代码请大家下载附件,就不收取贡献值了。
- program GenMaskout
- implicit none
- integer,parameter::polys=1417,x=20,y=20 !定义边界点和格点数量
- real,parameter::interv=0.5,xs=115,ys=30 !定义格点开始经纬度和分辨率
- integer,external::inRegion
- integer i,j
- real pts(polys,2),pt(2),k !数组中1是横坐标 2是纵坐标
- !读入你的边界点,polys是点数量,边界点一行一个点,经度在前,纬度在后,中间用逗号或者空格隔开
- open(1,file='js.txt',status='old')
- do i=1,polys
- read(1,*)pts(i,1:2)
- enddo
- close(1)
- open(1,file='js.grd',form='binary',status='replace')
- pt(1)=xs
- pt(2)=ys
- do i=1,y
- do j=1,x
- k=inRegion(pts,pt,polys) !这里调用判断点和多边形关系的函数
- write(1)k
- pt(1)=pt(1)+interv
- enddo
- pt(2)=pt(2)+interv
- pt(1)=xs
- enddo
- close(1)
- end
最后在GrADS中测试一下吧!
这份代码的功能当然不仅仅是用来输出GrADS的maskout文件,其他用途大家可以尽情自由发挥,比如计算面雨量。。。
=======================
这里下载完整程序:
ptInRegion.f90
(1.99 KB, 下载次数: 134)
|
评分
-
查看全部评分
|