ENVI_IDL: 读取文本文件并输出为Geotiff格式+简单均值插值

简介: ENVI_IDL: 读取文本文件并输出为Geotiff格式+简单均值插值

1.  内容

这里主要没有用到什么新的知识点,就是先获取数据,然后找到经纬度的最大值最小值,以此得到行列数去构建装数据的数组,然后数据按顺序放入到数组中。另外,如果你的数据源明确说明数据的分辨率是准确的而不是近似,那么你可以不进行均值插值,当然为了确保你可以先出图看看缺失值是否存在再来判断是否需要均值插值。做好均值插值后最后输出即可。


2. 编程

pro geo_out_tiff, lon, lat, geo_data, resolution, geo_data_out, geo_info
  ; 本程序用于将经纬度、xx数据集转化为可输出为tiff的数据
  ; 确定最大最小的经纬度
  lon_min = min(lon)
  lon_max = max(lon)
  lat_min = min(lat)
  lat_max = max(lat)
  ; 获取转化为tiff数据所需要的行列数
  column = ceil((lon_max - lon_min) / resolution)  ; ceil()函数表示向上取整
  row = ceil((lat_max - lat_min) / resolution)
  ; 得到每一个点的行列位置
  column_array = floor((lon - lon_min) / resolution)  ; 向下取整
  row_array = floor((lat_max - lat) / resolution)
  ; 创建装数据的box
  data_box = fltarr(column, row)
  ; 将数据转入到box里面
  data_box[column_array, row_array] = geo_data
  ; 用来装填充之后的值的box
  geo_data_out = fltarr(column, row)
  ; 但是这个样子还是不行,由于我们这个txt文件的数据源表明了这个分辨率只是大致的分辨率,所以有一些像元位置的data是没有的,所以需要插值
; 下面这种方法没有处理最外边的行列
;  for column_i = 1, column - 2 do begin
;    for row_i = 1, row - 2 do begin
;      if data_box[column_i, row_i] eq 0.0 then begin
;        ; 创建九宫格移动窗口
;        temp_windows = data_box[column_i - 1:column_i + 1, row_i - 1:row_i + 1]
;        temp_windows = (temp_windows gt 0.0) * temp_windows
;        if total(temp_windows gt 0.0) gt 3 then begin  ; 阈值设定
;          geo_data_out[column_i, row_i] = total(temp_windows) / total(temp_windows gt 0.0)
;        endif
;      endif else begin
;        geo_data_out[column_i, row_i] = data_box[column_i, row_i]
;      endelse
;    endfor
;  endfor
  ; 现在写的方法会处理最外边的行列
  geo_data_out_copy = fltarr(column + 2, row + 2)
  geo_data_out_copy[1:column, 1:row] = data_box
  for column_i = 1, column do begin
    for row_i = 1, row do begin
      if geo_data_out_copy[column_i, row_i] eq 0.0 then begin
        ; 创建九宫格移动窗口
        temp_windows = geo_data_out_copy[column_i - 1: column_i + 1, row_i - 1:row_i + 1]
        temp_windows = (temp_windows gt 0.0) * temp_windows
        if total(temp_windows gt 0.0) gt 3 then begin
          geo_data_out[column_i - 1, row_i - 1] = total(temp_windows) / total(temp_windows gt 0.0)
        endif
      endif else begin
        geo_data_out[column_i - 1, row_i - 1] = geo_data_out_copy[column_i, row_i]
      endelse
    endfor
  endfor
  ; 编写地理信息geotiff
  geo_info={$
    MODELPIXELSCALETAG:[resolution,resolution,0.0],$  ; 这里需要填分辨率
    MODELTIEPOINTTAG:[0.0,0.0,0.0,lon_min,lat_max,0.0],$  ; 这里需要填写左上角点的经纬度,然后下面的都是默认不用修改
    GTMODELTYPEGEOKEY:2,$
    GTRASTERTYPEGEOKEY:1,$
    GEOGRAPHICTYPEGEOKEY:4326,$
    GEOGCITATIONGEOKEY:'GCS_WGS_1984',$
    GEOGANGULARUNITSGEOKEY:9102,$
    GEOGSEMIMAJORAXISGEOKEY:6378137.0,$
    GEOGINVFLATTENINGGEOKEY:298.25722}
end
pro week_six_study2
  ; 本程序(主程序)是将txt文本数据转化为geotiff图像输出,并且由于有一些缺失值所以需要插值
  ; 路径
  in_path = 'D:/IDL_program/experiment_data/chapter_4/2013_year_aop.txt'
  out_path = 'D:/IDL_program/experiment_data/chapter_4/'
  ; 打开txt文本文件
  openr, 1, in_path
  ; 创建存储数组
  geo_data = fltarr(5, 56304)  ; 行列数通过记事本查看得到
  ; 初始化值
  geo_data[*, *] = -9999.0
  ; 获取第一行的索引数据
  index = ''
  readf, 1, index
  index = strsplit(index, /extract)
  index_num = n_elements(index)
  ; 获取txt文件的数据
  readf, 1, geo_data
  ; 已经将txt文件的数据全部放在了变量geo_data里面,所以txt文件可以关闭了
  free_lun, 1
  ; 获取经度数据
  lon = geo_data[0, *]
  ; 获取纬度数据
  lat = geo_data[1, *]
  ; 已知该txt文本数据的分辨率是0.18
  resolution = 0.18
  ; 获取后面的数据
  for data_i = 2, index_num - 1 do begin
    ; 输出
    geo_out_tiff, lon, lat, geo_data[data_i, *], resolution, geo_data_out, geo_info
    write_tiff, out_path + index[data_i] + '.tiff', geo_data_out, geotiff=geo_info, /float
  endfor
end  


运行结果:



部分输出结果展示:

这是未经过均值插值的结果:



这是经过了均值插值的结果:


目录
相关文章
|
3月前
|
Python
从bag包中提取图片和点云数据为pcd格式点云文件
从bag包中提取图片和点云数据为pcd格式点云文件
202 0
|
索引
ENVI_IDL:批量拼接Modis Swath的逐日数据并输出为Geotiff格式
ENVI_IDL:批量拼接Modis Swath的逐日数据并输出为Geotiff格式
145 0
ENVI_IDL:如何读取HDF4文件和HDF5文件的数据集和属性?
参考Documentation Center (l3harrisgeospatial.com) 由于时间和精力,这里并没有对其中的函数进行详细的说明,只是介绍了函数作用以及用法。
232 0
|
索引
ENVI_IDL:如何读取HDF4数据?
ENVI_IDL:如何读取HDF4数据?
196 0
|
存储 C语言 索引
ENVI IDL:熟悉IDL语法+输出多幅TIFF影像的MAX文件和MEAN文件
ENVI IDL:熟悉IDL语法+输出多幅TIFF影像的MAX文件和MEAN文件
306 0
|
6月前
|
存储 定位技术
ASD光谱仪.asd格式光谱曲线文件转换为.txt格式的方法
ASD光谱仪.asd格式光谱曲线文件转换为.txt格式的方法
|
6月前
|
存储 定位技术 Python
Python中ArcPy实现栅格图像文件由HDF格式批量转换为TIFF格式
Python中ArcPy实现栅格图像文件由HDF格式批量转换为TIFF格式
|
存储
ENVI_IDL:批量获取影像文件各个波段的中值并输出为csv文件
ENVI_IDL:批量获取影像文件各个波段的中值并输出为csv文件
338 0
|
存储 编解码
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
412 1
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
182 0