tif转ascii或者ascii转tif

1 ArcGIS操作

1)基于Raster to ASCII,同一遥感影像图.tif转换为.asc文件后,再将.asc文件加载到Arcmap,其字段值为什么发生了变化?

11.tif转ascii或者ascii转tif - 图1
11.tif转ascii或者ascii转tif - 图2

2)转换方法

(1)栅格转 ASCII

摘要

将栅格数据集转换为可表示栅格数据的 ASCII 文本文件。

用法

  • 输入栅格数据集可以是任意有效的栅格数据集。
  • ASCII 文件的结构由包含一系列关键字的文件头信息组成,后跟以行优先顺序排列的像元值。

文件的格式一般为:
NCOLS xxx
NROWS xxx
XLLCORNER xxx
YLLCORNER xxx
CELLSIZE xxx
NODATA_VALUE xxx
row 1
row 2
.
.
row n
关键字的定义如下:

  • NCOLSNROWS 是由 ASCII 文件所定义的栅格的列数和行数。
  • XLLCORNERYLLCORNER 是左下角栅格像元的左下角坐标。
  • CELLSIZE 是栅格像元的大小。
  • NODATA_VALUE 是用于表示 NoData 像元的值。
  • 在像元值数据流中,数据的第一行在栅格顶部,第二行在第一行下边,依此类推。

    • 以下是 ASCII 栅格文件的一个示例:
    • NCOLS 480
    • NROWS 450
    • XLLCORNER 378922
    • YLLCORNER 4072345
    • CELLSIZE 30
    • NODATA_VALUE -32768
    • 43 2 45 7 3 56 2 5 23 65 34 6 32 54 57 34

    35 45 65 34 2 6 78 4 2 6 89 3 2 7 45 23 5 …

  • NODATA_VALUE 是 ASCII 文件中表示输入栅格中 NoData 像元的值。此值通常留给那些“真”值未知的像元专用。
  • 在该文件中,每行栅格数据的末尾均以回车符号结尾。
  • 整型和浮点型栅格均可转换为 ASCII 栅格文件。
  • 此工具只将左下角像元的左下角作为原点写入。ASCII 转栅格工具也支持将左下角像元的中心作为原点。

    语法

    RasterToASCII_conversion (in_raster, out_ascii_file)
参数 说明 数据类型
in_raster 输入栅格数据集。
栅格数据可为整型或浮点型。
Raster Layer
out_ascii_file 输出 ASCII 栅格文件。 File

代码实例

RasterToASCII 示例(Python 窗口)

将栅格数据集转换为可表示栅格数据的 ASCII 文件。
import arcpy
from arcpy import env
env.workspace = “c:/data”
arcpy.RasterToASCII_conversion(“elevation”, “c:/output/sa500.asc”)

RasterToASCII 示例(独立脚本)

将栅格数据集转换为可表示栅格数据的 ASCII 文件。
# Name: RasterToASCII_Ex_02.py
# Description: Converts a raster dataset to an ASCII file representing
# raster data.
# Requirements: None
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = “C:/data”
# Set local variables
inRaster = “elevation”
outASCII = “c:/output/elevation.asc”
# Execute RasterToASCII
arcpy.RasterToASCII_conversion(inRaster, outASCII)

环境

11.tif转ascii或者ascii转tif - 图3

3)问题

(1)Arcmap中栅格数据转ASCII的问题


Arcmap中将栅格数据转为ASCII文件可通过工具包中Conversion Tools-Raster to ASCII,会自动把栅格数据中NODATA值转为-9999,在使用txt文件时,直接忽略即可。

2 gdal

1)如何将TIFF格式的DEM数据转换成ASCII格式的数据

在linux下操作如下:
安装GDAL,使用gdal_translate,方法如下:
gdal_translate -of AAIGrid ASTGTM_N22E103_dem.tif test.asc
其中-of为指定输出格式,gdal_translate支持多种格式互转,AAIGrid为Arc/Info ASCII Grid数据,ASTGTM_N22E103_dem.tif为tiff格式的dem数据文件,test.asc为输出文件。
test.asc为文本文件,可以打开查看,其中包含有5~6行的头信息,主要内容如下:
ncols 3601 —-》行数
nrows 3601 —-》列数
xllcorner 102.999861111111 —-》x轴起点坐标,单位°
yllcorner 21.999861111111 —-》y轴起点坐标,单位°
cellsize 0.000277777778 —-》采样间隔,单位°,精度大概30m
之后是按行存储的数据,每一行即是相同经度不同纬度并以空格分隔的高程数值,行与行之间用回车分开。

3 Python处理

1)Python 对ASCII文件(及TIF文件)进行批量掩模裁剪

第一步:ASCII转TIF文件

在裁剪时我们要用到Toolbox中的工具Extract By Mask,而这个工具在python的程序语言中体现出来就是
out_extract = arcpy.sa.ExtractByMask(ras, mask) #执行按掩模提取操作
官方对于 ExtractByMask工具 的描述请看 按掩膜提取
对于ExtractByMask工具,要求输入的被裁减的文件和掩膜文件都是raster格式

需要做的第一步就是将asc文件转化为raster格式的文件,下边是经本人修改调试过的程序,一并附上最初参考的链接: ArcGIS 10 影像、栅格数据格式批量转换(https://blog.csdn.net/mygisforum/article/details/8262450?utm_source=blogxgwz9

# Import system modules
import sys, string, os #加载工具包

dir = ‘C:/Users/DELL/Documents/ArcGIS/Budyko_ds/MODIS_asc’ #工作环境

# Import arcpy module
import arcpy

files = os.listdir(dir)
for f in files: #遍历文件
if os.path.splitext(f)[1] == ‘.asc’:
# Script arguments…
Input_raster_file = dir + os.sep + f

# Local variables…
Output_data_type = “DOUBLE”
Raster_Format = “TIFF”
Output_Workspace = “C:/Users/DELL/Documents/ArcGIS/Budyko_ds/Conversion”

# =============== file name process ======================
basename = os.path.splitext(f)[0];
Output_raster = Output_Workspace + os.sep + basename + “.tif”;

if os.path.exists(Output_raster) == False:
print Input_raster_file
# Process: Raster To Other Format (multiple)…
arcpy.RasterToOtherFormat_conversion(Input_raster_file,
Output_Workspace, Raster_Format)

print Output_raster
print(“ALL DONE”)
所以只需要对上边程序进行修改,就将asc文件批量转为Tif文件(转为Tif是方便进行掩模裁剪, 有效的栅格类型包含TIF ——栅格数据集的标记图像文件,但不非得转成TIF,其他栅格文件也行官方对于ListRasters的定义和描述)

第二步:TIF文件的裁减

接下来就是裁减了,目前我亲测成功是以下三个链接中的第三个,现将修改后的代码附上:

利用ArcGIS Python批量拼接裁剪遥感影像(arcpy batch processing)- https://blog.csdn.net/gisboygogogo/article/details/75195760

ArcGIS Python使用及批量裁剪示例-https://blog.csdn.net/dou3516/article/details/82762789

利用python在gis中实现批量化影像裁剪(https://jingyan.baidu.com/article/22fe7ceddc632b3002617f3a.html

import arcpy
arcpy.CheckOutExtension(“spatial”) #检查有没有授权ArcGIS Spatial Analyst 扩展模块,没有则授权
arcpy.gp.overwriteOutput=1
arcpy.env.workspace = “C:/Users/DELL/Documents/ArcGIS/Budykods/Conversion”
rasters = arcpy.ListRasters(“*”, “tif”)
mask= “C:/Users/DELL/Documents/ArcGIS/Budyko_ds/Conversion/c630_Australia_614006_Bounda5.shp”
for raster in rasters:
print(raster)
out= “C:/Users/DELL\Documents/ArcGIS/Budyko_ds/Extraction/“+”clip
“+raster
arcpy.gp.ExtractByMasksa(raster, mask, out)
print(“clip
“+raster+” has done”)
print(“All done”)

需要注意的是:
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
[经验总结] 栅格数据批量裁剪–Python脚本
原因是:如果在不同文件夹,就得切换程序的工作环境,很麻烦

另外还需注意的是自己的边界文件(掩膜文件)是个线文件还是面文件,如果只是一条线,得到的就是下图中的那条彩色栅格环,但如果想要裁下来一个面的话就要将线用Arcgis中 Feature To Polygon 工具将之转换为面的shp文件~,可以参考
Python 批量将线元素转化为面元素
11.tif转ascii或者ascii转tif - 图4

4.这样我们就完成了对于上百个asc文件的掩膜裁减任务:

11.tif转ascii或者ascii转tif - 图5
最后得到的结果图(只展示一个流域):
11.tif转ascii或者ascii转tif - 图6

Over

10.lidar转换

1)TIFF转换为ASCII

功能概述

转换TIFF为ASCII工具可用于将TIFF格式的栅格图像转换为ASCII格式。

用法

点击数据管理 > 格式转换 > TIFF转换为ASCII
11.tif转ascii或者ascii转tif - 图7

参数设置

  • 输入Tiff文件:用户可以从下拉列表中选择需要处理的文件到待处理列表中。
  • :用户可以从外部添加待转换的文件数据。
  • :用户可以选中列表中的某一个文件数据,点击该按钮将该文件从列表中移除。
  • :点击该按钮可清空全部列表中的数据。
  • 输出路径:输出文件夹路径,功能执行后生成转换后的新文件。