ENVI+IDL实现多值提取至点

前言

最近在用IDL编程,用的比较多,这里主要讲解批量处理的实现过程

案例实践

基础函数讲解

envi_proj_create([name=string][/geographic][/utm][zone=integer]
[/south][type=integer][arbitrary][datum=value][units=integer])

其中,关键字name用于设置投影的名称;关键字geographic用于设置投影为地理坐标(即经纬度坐标系);关键字utm用于设置投影为UTM投影(通用横轴墨卡托投影);关键字zone用于设置UTM投影的分带带号;关键字south用于设置UTM投影为南半球投影;关键字type用于设置投影类型,为整型变量;关键字arbitrary 用于设置创
建一个自定义的投影;关键字params用于设置投影参数,包含了除name和datum之外的所有信息,如果关键字arbitrary、 geographic 或者UTM已经设置的话,不需要设置params关键字;关键字datum用于设置基准面,为字符串变量,ENVI支持的基准面名称可查阅ENVI安装路径下1map_ proj文件夹中的datum.txt 文件,最常用的基准面为’WGS-84’; 关键字units用于设置投影的单位,为整型变量,可通过envi_ translate_ projection_ units 函数将字符串格式的单位转换为整型变量,对于地理坐标;系,默认单位为度,对于其他投影,默认单位为米。
在这里插入图片描述
其中,关键字fid 为ENVI文件的fid号;关键字o proj 用于设置转换为哪种投影;关键字dims用于设置待转换数据的空间范围;关键字pos用于设置待转换数据的波段位置;关键字out name用于设置转换后文件的文件名;关键字r_ fid返回转换后文件的fid号;关键字background 用于设置输出文件的背景值,默认值为0;关键字o_ pixel size用于设置x和y方向的像元分辨率,为两个元素的数组;关键字grid 用于设置x和y方向提取出多少控制点,为两个元素的数组,默认值为x和y方向每10个点取一个点;关键字warp_ method 用于设置投影转换方法,0为RST方法,1为多项式方法,2为三角网方法,3为逐像元严格数学模型方法,如果该关键字未设置则默认为RST方法;关键字degree用于设置多项式的阶数,该关键字仅仅在投影转换方法为多项式方法时才有效,默认值为1;关键字zero_ edge用于设置将所有三角网以外的像元值都设为背景值,该关键字仅仅在投影转换方法为三角网时才有效;关键字resampling用于设置重采样方法,0为最邻近法,1为双线性插值,2为立方卷积,默认值为最邻近法;关键字out bname用于设置输出文件各波段的名称。
在这里插入图片描述

pro extract_point
  fn='C:\Users\asus\Desktop\point_IDL_extract_data.csv';
  data=READ_CSV(fn,count=nsta,header=header);
  point_fid=data.(0);
  Lat=data.(8);站点纬度
  Lon=data.(9);站点经度
  image_fname='E:\pyrice_data\pysgevi_new4\0309sgevi.img';文件路径
  ENVI_OPEN_FILE,image_fname,r_fid=fid
  map_info=ENVI_GET_MAP_INFO(fid=fid)
  i_proj=ENVI_PROJ_CREATE(/geographic,datum='WGS-84')
  o_proj=map_info.proj
  envi_convert_projection_coordinates,lon,lat,i_proj,$
    xmap,ymap,o_proj
  ;将站点的地图坐标转换为文件坐标
  envi_convert_file_coordinates,fid,xf,yf,xmap,ymap
  xf=floor(xf) & yf=floor(yf)
  ;循环读取各个站点高程
  value=fltarr(nsta)
  for i=0, nsta-1 do begin
    dims1=[-1, xf[i], xf[i], yf[i], yf[i]]  ;构建空间范围数组DIMS
    value[i]=envi_get_data(fid=fid,dims=dims1,pos=0)
  endfor

;***********保存结果*********
  o_fn='C:\Users\asus\Desktop\point_IDL_extract_data1.csv';指定存储结果路径
  header=[header,strmid(image_fname,28,4)]
  data=create_struct(data,'Field11',value);在data中增加一个value域
  write_csv,o_fn,data,header=header;写入csv
end

参考链接

遥感二次开发语言IDL

你可能感兴趣的:(遥感图像处理)