威望0
积分7986
贡献0
在线时间764 小时
UID1
注册时间2021-4-14
最后登录2024-11-25
管理员
- UID
- 1
- 威望
- 0
- 积分
- 7986
- 贡献
- 0
- 注册时间
- 2021-4-14
- 最后登录
- 2024-11-25
- 在线时间
- 764 小时
|
[mw_shl_code=python,true]#coding:utf-8
#基于已有mxd模板,遍历gdb文件里图层,替换第一个图层数据的数据源,修改出图的标题,并导成图片。
#2020年9月1日
import arcpy
import os
import xlwt #操作Excel
import time # 引入time模块
reload(sys)
sys.setdefaultencoding("utf-8")
res = 100 #出图的像素300dpi
mapfile="D:/wjly.mxd" #mxd文件地址
FILEGDB_path="D:/01_刘艳民办公资料/01_水利/15_长江生态环境保护修复智慧决策平台(一期)/03_制图工具包/PLZTCOD20200831/test.gdb"
FILEGDB_pathQY="D:/01_刘艳民办公资料/01_水利/15_长江生态环境保护修复智慧决策平台(一期)/05_长江流域流域确定/长江流域制图/区域图层.gdb"
workspaceGDB_pathQY= r"D:\01_刘艳民办公资料\01_水利\15_长江生态环境保护修复智慧决策平台(一期)\05_长江流域流域确定\长江流域制图\区域图层.gdb"
workspaceGDB_path= r"D:\01_刘艳民办公资料\01_水利\15_长江生态环境保护修复智慧决策平台(一期)\03_制图工具包\PLZTCOD20200831\test.gdb"
RowNum=1#excel行从1开始;excel行和列是从0开始
mapdoc = arcpy.mapping.MapDocument (mapfile)#中文的mxd文件不知道为什么报错
dflist = arcpy.mapping.ListDataFrames (mapdoc) #默认dataFrames
lyr = arcpy.mapping.ListLayers (mapdoc, "", dflist[0])[0] #第一个图层
lyrQY = arcpy.mapping.ListLayers (mapdoc, "", dflist[0])[3] #第四个图层,流域范围
#-------------建立Excel--------------
ExcelFile = xlwt.Workbook(encoding = 'utf-8') #;设置这个不会出现保存时候报错
sheet1 = ExcelFile.add_sheet(u'sheet1',cell_overwrite_ok=True)
sheet1.write(0,0,'序号')
sheet1.write(0,1,'图层名称')
sheet1.write(0,2,'图片名称')
sheet1.write(0,3,'生成时间')
#-------------建立Excel--end--------------
arcpy.env.workspace = workspaceGDB_pathQY
datasetsQY = arcpy.ListDatasets(feature_type='feature')
datasetsQY = [''] + datasetsQY if datasetsQY is not None else []
for dsQY in datasetsQY:
for fcQY in arcpy.ListFeatureClasses(feature_dataset=dsQY):
path = os.path.join(arcpy.env.workspace, dsQY, fcQY)
lyrNameQY=os.path.join(fcQY)
print(lyrNameQY)
lyrQY.replaceDataSource(FILEGDB_pathQY, "FILEGDB_WORKSPACE", lyrNameQY)#替换区域范围图层
dflist[0].panToExtent(lyrQY.getExtent()) #获得新图层区域范围,定位到区域位置
sourceLayer = arcpy.mapping.Layer(r"D:\乌江水系.lyr")#需要在arcgis中把图层及样式导出为lyr
arcpy.mapping.UpdateLayer(dflist[0],lyrQY,sourceLayer,True)#调用UpdateLayer()函数来更新符号系统。
arcpy.env.workspace = workspaceGDB_path
datasets = arcpy.ListDatasets(feature_type='feature')
datasets = [''] + datasets if datasets is not None else []
for ds in datasets:
for fc in arcpy.ListFeatureClasses(feature_dataset=ds):
path = os.path.join(arcpy.env.workspace, ds, fc)
#print(path)
lyrName=os.path.join(fc)
print(lyrName)
lyr.replaceDataSource(FILEGDB_path, "FILEGDB_WORKSPACE", lyrName)#更换数据
title = arcpy.mapping.ListLayoutElements(mapdoc, "TEXT_ELEMENT", "Maptitle")[0] #修改地图的标题,地图标题的element Name填写为Maptitle
title.text=lyrNameQY+lyrName#按照图层的名称修改生成专题图图片的名称
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
arcpy.mapping.ExportToJPEG(mapdoc,"D://MapExpoort20200901//" +lyrNameQY+lyrName+".jpg",resolution = res) #先建立一个文件夹,否则要报错;
sheet1.write(RowNum,0,RowNum)#写第一列序号
sheet1.write(RowNum,1,lyrNameQY+lyrName)#写第二列图层名称
sheet1.write(RowNum,2,lyrName+".jpg")#写第三列图片名称
sheet1.write(RowNum,3,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))#写第三列图片名称
RowNum=RowNum+1
#print lyr.name
ExcelFile.save('D://MapExpoort20200901//test.xls')
del mapdoc
[/mw_shl_code] |
|