fortran编程处理Arcgis导出的栅格文件data.asc

 时间:2024-10-13 20:38:23

1、关于codeblocks IDE的极速安装请参考百度经验<<Windows下极速搭建fortran开发环境>>

fortran编程处理Arcgis导出的栅格文件data.asc

2、关于栅格数据文件读者可用自己的作者在百度云网盘分享了一个dataDEM.aschttp://pan.baidu.com/s/1o61C7W2

fortran编程处理Arcgis导出的栅格文件data.asc
fortran编程处理Arcgis导出的栅格文件data.asc

3、从下图可以看到Arcgis导出来的栅格数据的格式一般为:文件头+内容其中文件头内容类似下面:--------------------------------------------ncols 273nrows 517xllcorner 406575.15962767yllcorner 2797618.1216856cellsize 88.667294085553NODATA_value -9999--------------------------------------------这种文件的头2行包含了很重要的信息1)这个文件有多少列:ncols2)这个文件有多少行:nrows接下来的4行说明了公里网、单元格大小、无效值

fortran编程处理Arcgis导出的栅格文件data.asc

4、接下来介绍fortran编程中怎么处理【定义文件头类型】先定义一种类型 !================================ ! 数据文件头类型 !================================ TYPE GridFileHead INTEGER::ncols INTEGER::nrows REAL*8::xllcorner REAL*8::yllcorner REAL*8::cellsize END TYPE

fortran编程处理Arcgis导出的栅格文件data.asc

5、【读文件头信息】编写子程序解释出栅坼黉赞楞格数据文件的文件头 !================================ ! 解释栅格数据的文件头 !==============租涫疼迟================== SUBROUTINE ReadGridFileHead(FilePath) IMPLICIT NONE CHARACTER(Len=*), INTENT(IN) :: FilePath CHARACTER,TARGET::buffer(10)*64 !10个元素,每个长度64 INTEGER::ncol !读文件头 OPEN(FileTmp,FILE=FilePath,STATUS='OLD') READ(FileTmp,*), buffer CLOSE(FileTmp) !字符串转数字 READ(buffer(2),*)GridHead%ncols READ(buffer(4),*)GridHead%nrows READ(buffer(6),*)GridHead%xllcorner READ(buffer(8),*)GridHead%yllcorner READ(buffer(10),*)GridHead%cellsize END SUBROUTINE ReadGridFileHead

fortran编程处理Arcgis导出的栅格文件data.asc

6、【读文件】编写子程序读取栅格数据到二维浮点双精度数组 !================================ ! 读取网格数据到二维浮点双精度数组 !================================ SUBROUTINE readGridFileToDoubleArray2D(FilePath, arrDouble2D) IMPLICIT NONE CHARACTER(Len=*), INTENT(IN) :: FilePath INTEGER,TARGET,INTENT(OUT) :: arrDouble2D(:,:) INTEGER::i OPEN(FileTmp,FILE=FilePath,STATUS='OLD') !跳过开头6行 DO i=1,6 READ(FileTmp,*) END DO DO i=1,GridHead%nrows READ(FileTmp,*), arrDouble2D(i,1:GridHead%ncols) END DO CLOSE(FileTmp) END SUBROUTINE readGridFileToDoubleArray2D

fortran编程处理Arcgis导出的栅格文件data.asc

7、【写文件】编写子程序将二维浮点双精俣觊鄄幼度数组写到栅格数据文件 !================================ ! 写二维浮点双精度数组到文件 !===租涫疼迟============================= SUBROUTINE writeDoubleArray2DtoGridFile(FilePath, arrDouble2D) IMPLICIT NONE CHARACTER(LEN=32)::buffer INTEGER::i,j CHARACTER(Len=*), INTENT(IN) :: FilePath INTEGER,TARGET,INTENT(IN) :: arrDouble2D(:,:) OPEN(FileTmp,FILE=FilePath) WRITE(FileTmp,'(A,$)'), "ncols " buffer="" WRITE(buffer,*), GridHead%ncols WRITE(FileTmp,'(A)'),trim(adjustl(buffer)) WRITE(FileTmp,'(A,$)'), "nrows " buffer="" WRITE(buffer,*), GridHead%nrows WRITE(FileTmp,'(A)'),trim(adjustl(buffer)) WRITE(FileTmp,'(A,$)'), "xllcorner " buffer="" WRITE(buffer,*), GridHead%xllcorner WRITE(FileTmp,'(A)'),trim(adjustl(buffer)) WRITE(FileTmp,'(A,$)'), "yllcorner " buffer="" WRITE(buffer,*), GridHead%yllcorner WRITE(FileTmp,'(A)'),trim(adjustl(buffer)) WRITE(FileTmp,'(A,$)'), "cellsize " buffer="" WRITE(buffer,*), GridHead%cellsize WRITE(FileTmp,'(A)'),trim(adjustl(buffer)) WRITE(FileTmp,'(A)'), "NODATA_value -9999" DO i=1, GridHead%nrows DO j=1, GridHead%ncols-1 buffer="" WRITE(buffer,*), arrDouble2D(i,j) WRITE(FileTmp,'(A,$)'),trim(adjustl(buffer))//" " END DO buffer="" WRITE(buffer,*), arrDouble2D(i,GridHead%ncols) WRITE(FileTmp,'(A)'),trim(adjustl(buffer)) END DO CLOSE(FileTmp) END SUBROUTINE writeDoubleArray2DtoGridFile

fortran编程处理Arcgis导出的栅格文件data.asc
fortran编程处理Arcgis导出的栅格文件data.asc

8、【主程序】 IMPLICIT N蚪嬷吃败ONE !================================ ! 数据文件头类型 !==========租涫疼迟====================== TYPE GridFileHead INTEGER::ncols INTEGER::nrows REAL*8::xllcorner REAL*8::yllcorner REAL*8::cellsize END TYPE !================================ INTEGER::FileTmp=168 !临时读取文件时使用的设备号 TYPE(GridFileHead)GridHead !模型数据文件头 CHARACTER(len=255)::strInFileName !要处理的文件名 CHARACTER(len=255)::strOutFileName !输出的文件名 INTEGER,ALLOCATABLE::arrDouble2D(:,:) !================================ !命令行输入参数处理 Call GETARG(1,strInFileName) !连接字符串,将其设置为要输出的文件名 strOutFileName=trim(strInFileName)//"_out.asc" !================================ !读取文件头 CALL ReadGridFileHead(strInFileName) !分配数组内存 ALLOCATE(arrDouble2D(GridHead%nrows,GridHead%ncols)) !读取文件到2维双精度数组 CALL readGridFileToDoubleArray2D(strInFileName,arrDouble2D) !数组运算,处理 !写2维数组到文件 CALL writeDoubleArray2DtoGridFile(strOutFileName,arrDouble2D) !释放内存 DEALLOCATE(arrDouble2D)

fortran编程处理Arcgis导出的栅格文件data.asc
fortran编程处理Arcgis导出的栅格文件data.asc

9、运行、测试结果:

fortran编程处理Arcgis导出的栅格文件data.asc
  • 管理地理空间数据库并在ArcMap中编辑属性数据
  • 图解ArcGIS10.0常见操作
  • Skyline TerraExplorer V6.6安装步骤
  • 图解Skyline之创建TerraBuilder工程
  • ArcSDE10.x安装教程(for Windows)
  • 热门搜索
    历史手抄报花边 关于爱读书的手抄报 感恩父母手抄报花边 书的手抄报 数学手抄报资料大全 关于写字的手抄报 文明礼仪手抄报模板 关于春天的手抄报花边 创卫手抄报设计图 关于爱国卫生的手抄报