问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样将Esri ASCII Grid转bin文件

发布网友 发布时间:2023-06-11 02:20

我来回答

1个回答

热心网友 时间:2023-10-09 04:43

ArcGIS 9.2提供了脚本功能,可以方便地实现批处理功能。可用脚本包括JS, VBS和Python。以下示例利用Python实现批处理ASCII grid文件到ESRI Binary grid转换的功能。
问题

ASCII grid由matlab代码生成,存储于 LDAS.data 目录。ASCII grid内容如下:

ncols 32
nrows 32
xllcorner -88
yllcorner 37.75
cellsize 0.125
NODATA_value -9999
0.000000 0.000000 ...

各ASCII grids命名有以下规律:

nbwi3.[yyyy].[mm].[dd].[hh]h.txt

其中[yyyy]是4位年份,[mm]是月份,[dd]是2位日期,[hh]是24制的小时。比如,nbwi3.2001.07.08.15h.txt等。

生成的ESRI Binary grid有以下命名规律:n[yy][mm][dd][hh],其中[yy]是2位年份,[mm]是月份,[dd]是2位日期,[hh]是24制的小时。如n01070814。注意,ESRI grid的命名和长度是有一定要求*的,所以我们必须要选择合适的,并能区别数据的命名方式。

我们需要做的是将数百个ASCII grids转换成对应的ESRI binary grids。
实现

脚本编写环境我们这里采用免费的PyDev/Eclipse。Python脚本存储在与LDAS.data并列的src目录下。事实上,可以使用任何文本编辑软件来用脚本,但Eclipse提供很多编程增强功能,如智能提示等。

import arcgisscripting
import os

datadir=os.path.abspath(os.path.join(os.getcwd(),"../LDAS.data"))
#print datadir
children=os.listdir(datadir)

#only ".txt" files
txtfiles=[]
grdnames=[]
for child in children:
root,ext=os.path.splitext(child)
if (ext=='.txt'):
txtfiles.append(child);
grdname='n'+root[8:19]
grdname=grdname.replace('.','')
grdnames.append(grdname)
# grid names now ready

gp=arcgisscripting.create()
gp.workspace=datadir

# begin iteration
for i in range(len(grdnames)):
gp.ASCIIToRaster(txtfiles[i], grdnames[i], "FLOAT")
print txtfiles[i]

首先,需要通过import arcgisscripting,将arcgisscripting导入Python。arcgisscripting事实上是位于C:\Program Files\arcgis\bin目录下的arcgisscripting.dll。如果在运行时,提示找不到arcgisscripting库,则需要配置Python库路径。

库导入成功后,gp=arcgisscripting.create() 创建script对象,此后通过“gp.命令”的方式调用script支持的命令。一般来讲,可以在arcgis command window里使用的命令,都会有对象的script调用方式。比如,

ASCIIToRaster的命令语法是 ASCIIToRaster_conversion <in_ascii_file> <out_raster> {INTEGER | FLOAT},对应的脚本语法是ASCIIToRaster_conversion (in_ascii_file, out_raster, data_type)。我们可以在ArcGIS Desktop帮助文档里找到。

此外,gp还有一些专用的script命令,比如ListRasters、GetMessage等,大家可以在ArcGIS Desktop帮助文档查询Geoprocessor object。这些命令对于进行批处理迭代时十分有用。

在以上代码中,与geoprocessor有关的代码有,

gp=arcgisscripting.create()
gp.workspace=datadir
gp.ASCIIToRaster(txtfiles[i], grdnames[i], "FLOAT")

workspace设置了当前的工作目录,相当于在command window里执行 “workspace 目录”。

ASCIIToRaster执行实质的转换工作。如果此处我们需要执行位于ArcGIS扩展模块的命令,则需要在调用命令前,先对扩展模块(如spatial analysis)进行checkout。使用以下命令:

gp.CheckOutExtension("Spatial")
gp.CellStatistics_sa(...)

否则CellStatistic_sa会抱怨说没有License可用。

代码其余部分是常规Python代码。以下取得指定目录下的txt扩展名的全部文件名,并生成对应的grid文件名。

children=os.listdir(datadir)

#only ".txt" files
txtfiles=[]
grdnames=[]
for child in children:
root,ext=os.path.splitext(child)
if (ext=='.txt'):
txtfiles.append(child);
grdname='n'+root[8:19]
grdname=grdname.replace('.','')
grdnames.append(grdname)

Python 十分有趣,如果有其它语言基础,学习起来并不难。对我们写ArcGIS脚本,有一般的Python知识就足够了。尽管效率不如传统的arcinfo AML高,但在功能上则不逊色。如果需要实现十分复杂的GIS功能,则建议使用c++, vb或.net语言操作ArcObjects。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 arcgis 中怎么把shp转成grid? 记忆游戏的介绍 记忆力小游戏属于什么领域 记忆游戏的内容描述 记忆力游戏的现实中记忆力游戏 丙肝治疗旅行团丙肝治疗课程 恐龙可以下蛋吗 蛋仔岛的恐龙蛋是干嘛的 一罐饮料两大传奇!一个87岁想娶19岁秘书,一个800亿无人继承? 红牛功能饮料的的起源是怎么创造的? 怎么才能让哥哥更疼爱我,有什么心里话都能和我说,我是他认的妹 没有亲哥哥,我认了一个哥哥,我想让他把我当亲妹妹一样对待,我该怎么委婉的说 想认个女孩当妹妹,怎么样说才她才比较容易答应? 我想认一个女生当妹妹,应该怎么说? 如果哥哥突然不认妹妹了,妹妹怎样做才能取得哥哥的信任? 想认她做我妹妹,可以怎么和她说?然后她答应和再来怎么说? 人生如梦 朋友如雾,这句话是什么意思 我想认她做妹妹!怎么说? 如果要认个干妹妹要怎么跟他说 怎么样才能让哥哥叫我一声妹妹呢 【隔房】的意思是什么?【隔房】是什么意思? 【隔碍】的意思是什么?【隔碍】是什么意思? 下雨隔是什么意思? 适合孕妇温补的食物有哪些? 铝箔和锡纸有何区别 阳康后还会二次感染XBB吗? 荞面的营养价值 JK罗琳对《哈利波特》故事中的二战期间设定是怎样的 J.K.罗琳构建的魔法世界已经席卷了20年,她至今为止赚了多少钱? 【1190】亲子阅读儿童文学系列之《哈利·波特与死亡圣器》(下) acd一体阀门磁性锁是什么意思 梦见朋友被狗追抱树 泸州浓香第一酒庄树清酒庄老板是不是刘永贵先生呀 连wifi可以看到别人在看什么内容吗 输卵管肿大怎么办 ff14世传御敌外套怎么获得 ff14元素御敌套装好搞吗 流金岁月潘老师扮演者名字 杨柯潘老师是真爱吗 水一旦流深,就会发不出声音。人的感情一旦深厚,就会看似淡薄。这句话什么意思?