换用10.1后,原来9.3的vba就不能再继续探索了,虽然10.1能支持vba,但需要单独安装,而且之前的命令按钮啥的好像都不能再增加减少,干脆转到Python。摸索了几天python,感觉ESRI的战略转移真是有眼光,python开发简洁、直观的特点非常突出,相对于arctoolbox的工具批量出来模块、MODEL,以及原来的vba来说,python集成了他们的所有优点,又能以最小的代价实现类似vba的自定义需求。比如影像的投影转换,如果批量来做,用python写代码,只需要这么一段就行:
import arcpy
import pdb
arcpy.env.workspace="E:\image\hangpan2"
#将工作空间影像栅格列表
fcList = arcpy.ListRasters()
#打印栅格图总数
print len(fcList)
pdb.set_trace()
#遍历每个栅格图
for fc in fcList:
print fc
#outfile =
"J:/YX2007_2000/" + fc[0:fc.rfind(".")] + "_2000" +
fc[fc.rfind("."):len(fc)]
outfile =
"J:/YX2007_2000/" + fc[0:fc.rfind(".")] + "_2000" +
".tif"
outfile
sr=arcpy.SpatialReference("CGCS2000 3 Degree GK Zone
38")
sr.name
try:
arcpy.ProjectRaster_management(fc,\
outfile,\
sr,\
"BILINEAR",\
"#",\
"DG_XA1980_To_CGCS2000","#","#")
print "转换成功"
except:
print arcpy.GetMessages()
需要注意的就是arcpy.ProjectRaster_management这个函数的参数里面,第三个是目标数据的坐标系统,这个不能直接写字符串“CGCS2000
3 Degree GK Zone
38”,而是一个“坐标系统”对象,需要用arcpy.SpatialReference获取。还有一个要点就是str.rfind()内置函数的使用,从字符串后面往前查找,也就是反向查找,这个函数比较实用,也比较少用,很适合获取文件的扩展名,如fc[fc.rfind("."):len(fc)]