爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3160|回复: 0

[混合编程] IDL编程学习之重复经纬度剔除程序

[复制链接]

新浪微博达人勋

发表于 2018-7-25 14:17:58 | 显示全部楼层 |阅读模式

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

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

x
附件中给出了3个数据文件,lat.txt是一列纬度值,lon.txt是一列经度值,ext是一列消光值;
3列数据一一对应,构成了不同经纬度点的消光分布;
所以,可以画出消光的等值线图。
但操作中,会出现绘图失败的问题。
根据我的实际操作,推测失败原因有2:
失败原因之一是,x、y、z被认为是1列n行的二维数组时会失败,这个问题只需用transpose()函数进行转置,x等就变成了一个向量。
失败原因之二是,x,y所代表的位置有重复的,在我的操作中,一两个位置重复也能画,但重复的多了就出问题,这时就需要把每个位置重复的所有ext进行平均,这个帖子就是给出对这样的3组数据的处理方法,可能我的算法比较笨,或许有更简单有效的工具,但基于目前紧张的工作进度,暂时用着。
附件中的.pro文件给出了对数据的处理方法,最后画出了等值线图。
QQ截图20180725135400.jpg
写完这个案例,我做了一个通用的函数:
lat_lon_ext(lat,lon,ext)
返回值是没有重复位置的3列数组
代码如下:
function lat_lon_ext,lat,lon,ext
  n=n_elements(ext)
  book=[-123,-123,-123,-123]
  for i=0,n-1 do begin
    p=where(lon eq lon and lat eq lat,count)
    book=[[book],[lat,lon,count,mean(ext[p])]]
  endfor
  book=book[*,1:-1]
  sizebook=size(book)
  book2=[-123,-123,-123,-123]
  for i=0,sizebook[2]-1 do begin
    p=where(book2[0,*] eq book[0,i] and book2[1,*] eq book[1,i],count)
    if(count eq 0)then begin
      book2=[[book2],[book[*,i]]]
    endif
    if(count eq 1)then begin
      continue
    endif
    if(count gt 1 or count lt 0)then begin
      warning=DIALOG_MESSAGE('wrong!')
      stop
    endif
  endfor
  book2=book2[*,1:-1]
return,[book2[0:1,*],book2[3,*]]
end

lat_lon_ext.pro

1.23 KB, 下载次数: 0, 下载积分: 金钱 -5

ext.txt

17.43 KB, 下载次数: 0, 下载积分: 金钱 -5

lat.txt

17.43 KB, 下载次数: 0, 下载积分: 金钱 -5

lon.txt

17.43 KB, 下载次数: 0, 下载积分: 金钱 -5

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

本版积分规则

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

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

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