目录
背景
使用ArcGIS制作一个时序GIF图。具体地说就是使用ArcGIS制作一天(24个时段)的降雨量变化图。
使用常规方法流程
1.计算一天的降雨量数据。
2.在ArcGIS中制作24个图层,每层代表一个时段,按照一定的规则排版制图。
3.逐个时段排版生成jpg图。
4.使用PS等软件将jpg图制作成GIF图。
常规流程中重复性的工作
1 24个时段排版,含标题的修改
2 各个时段生成jpg图
使用Python代码完成重复性工作
1 24个时段排版,含标题的修改-代码
# -*-coding:utf-8-*-
## 每次显示一个图层(默认全关闭)
## 时间逐时增加
## 另存多个MXD工程
import sys
reload(sys)
sys.setdefaultencoding('utf8')
sys.path.append(r'D:\SoftwareHome\ESRI\ArcGIS\Desktop10.2\bin')
sys.path.append(r'D:\SoftwareHome\ESRI\ArcGIS\Server\arcpy')
import arcpy
## 模板mxd 如:F:\Data\HNData\hsll\hdcz.mxd
mxdName = arcpy.GetParameterAsText(0)
## 保存路径 savePath = r'F:\Data\HNData\hdcz'
savePath = arcpy.GetParameterAsText(1)
## 待替换的标题 oldText = "6月4日0时-1时"
oldText = arcpy.GetParameterAsText(2)
## 图层个数
layerNum = int(arcpy.GetParameter(3))
arcpy.AddMessage("Name is: {0}".format(layerNum))
for i in range(1,layerNum):
mxd = arcpy.mapping.MapDocument(mxdName)
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] #获取全部图层组
lyr= arcpy.mapping.ListLayers(mxd,"",df) #获取图层组全部图层
##lyr[22].visible = False
lyr[layerNum-i].visible = True
##arcpy.AddMessage("Name is: {0}".format(lyr[layerNum-i].visible))
newText = "6月4日"+str(i)+"时-" +str(i+1)+"时" # 新的标题
arcpy.AddMessage("Name is: {0}".format(newText))
for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
if oldText == elm.text:
elmText = elm.text.replace(oldText, newText)
elm.text = elmText
mxd.saveACopy(savePath+ r"\hsczaa"+str(i)+".mxd")
del mxd
2 各个时段生成jpg图-代码
import sys
sys.path.append(r'D:\SoftwareHome\ESRI\ArcGIS\Desktop10.2\bin')
sys.path.append(r'D:\\SoftwareHome\\ESRI\\ArcGIS\\Server\\arcpy')
import arcpy, os, time
## path = r'F:\Data\HNData\hdcz'
path = arcpy.GetParameterAsText(0)
print path
res = 100
print '程序开始:' + str(time.ctime())
for afile in os.listdir(path):
if afile[-3:].lower() == 'mxd':
mxd = arcpy.mapping.MapDocument(os.path.join(path,afile))
arcpy.mapping.ExportToJPEG(mxd, os.path.join(path,afile[:-3] + 'jpg'), resolution = res)
del mxd
print '程序结束:' + str(time.ctime())
原文链接:https://blog.csdn.net/huapenguag/article/details/106496002