场景分析
需要绘制相同格式的植被适宜性分布图(栅格),有上百种,单独从arcmap中出图太费时间
解决思路和方法
材料准备(处理软件和数据)
处理软件用arcmap10.2,需要调用python窗口,如下
需要出图的植被适宜性分布栅格文件,以桉树为例
制作出图模板mxd文件,包括栅格图层的配色、经纬度、指北针、比例尺、图例以及辅助边界数据等,本文章用的mxd文件如下图
出图栅格的名称Excel表(.格式)
第一列为栅格数据文件路径
第二列为树种的中文名称
第三列为树种的拉丁名称
解决思路与步骤
>通过通过arcpy调用命令,代替手动工作,实现批量处理
打开模板mxd文件
打开python窗口
撰写出图代码
代码
//导入包
import os
import arcpy
import xlrd
//设置运行默认环境,输入植被适宜性栅格文件的
arcpy.env.workspace=r"H:\shanshuilintianhu\reclass"
//读取出图名称xls表格
indir=r"G:\shanshuilintianhu\firstpic.xls"
xl=xlrd.open_workbook(indir)
table1 = xl.sheet_by_name("Sheet1")
mxd = arcpy.mapping.MapDocument("CURRENT") #将当前arcmap的模板保存为mxd
for i in range(0,200):
for df in arcpy.mapping.ListDataFrames(mxd):
mxd.activeView = df.name #激活arcmap中的数据框窗口,依次激活Layer和New Data Frame窗口
arcpy.MakeRasterLayer_management(table1.cell(i,0).value,'rasterLayer') #创建特定树种栅格图层的栅格图层
#设置模板图层的配色
a=arcpy.mapping.ListLayoutElements(mxd,"TEXT_ELEMENT") #输出绘制模板中的文本列表
a[7].text=table1.cell(i,1).value #修改树种的中文名称
a[6].text=table1.cell(i,2).value #修改树种的英文名称
outpic="G:\\shanshuilintianhu\\pic\\"+table1.cell(i,1).value #输出图片的文件路径
arcpy.mapping.ExportToPNG(mxd,outpic,resolution=500) #输出图片
注意事项:
(1)文件路径最好用英文
(2)修改树种中文和英文名称中a[7]和a[6]不同模板可能会有区别,这个需要自己去打印出列表a,查看自己需要修改的文本索引
(3)本代码中的图例部分用的统一模板,没有做修改,制作模板的时候需要将制作的图例转化为图片,否则在导入新的树种图层时候图例大小格式会变化。
(4)通过修改最后一行代码,可以输出JPG、PDF格式等。
结果
输出的图片结果如下
补充应用
for i in range(0,2):
... for df in arcpy.mapping.ListDataFrames(mxd):
... mxd.activeView = df.name
... arcpy.MakeRasterLayer_management(table1.cell(i,0).value,table1.cell(i,1).value)
... arcpy.ApplySymbologyFromLayer_management(table1.cell(i,1).value,r"C:\Users\yangjin.BIWMAIL.000\Desktop\qqqq\bio1.tif.lyr")
... lyr = arcpy.mapping.ListLayers(mxd)[0]
... lyr.visible = True
... print(lyr)
... lyr = arcpy.mapping.ListLayers(mxd)[1]
... lyr.visible = False
... print(lyr)
... arcpy.RefreshTOC()
... arcpy.RefreshActiveView()
... a=arcpy.mapping.ListLayoutElements(mxd,"TEXT_ELEMENT")
... a[0].text=table1.cell(i,2).value
... outpic="C:\\Users\\yangjin.BIWMAIL.000\\Desktop\\qqqq\\"+table1.cell(i,1).value
... arcpy.mapping.ExportToPNG(mxd,outpic,resolution=500)
补充知识
将视图中的某一个图层设置为显示或不显示
将第一个图层显示为可见
lyr = arcpy.mapping.ListLayers(mxd)[0]
lyr.visible = True
将第二个图层显示为不可见
lyr = arcpy.mapping.ListLayers(mxd)[1]
… lyr.visible = False