#coding=gbk
#@author lifc,20140806
#批量制作输出专题图
import arcpy,os,time,math
#testpath=raw_input("testpath:")
mainPath = r'C:/Users/yuwhuawang/Desktop/batchExportPNG_lifc' #模板mxd所在目录
mxdTempletName='200mGrid_bj_xicheng.mxd'#mxd模板文件名
tempMxdPath = mainPath+'/tempMxd' #中间过程mxd存储目录
resultPngPath=mainPath+'/resultPng' #png输出结果目录
res = 800 #dpi
#哈希数组arr
arr={'G_A100001':'总人口数',
'G_A100002':'男性人口数',
'G_A100003':'女性人口数',
'G_A100005':'户籍人口数',
'G_A100008':'城镇人口数',
'G_A100009':'非城镇人口数',
'G_A100010':'家庭户总数',
'G_A100011':'属家庭户的人口数 ',
'G_A100013':'家庭户中一人户总数',
'G_A100014':'家庭户中一代户的户数',
'G_A100015':'家庭户中二代户的户数',
'G_A100016':'家庭户中三代户的户数',
'G_A100017':'家庭户中四代及以上户的户数',
'G_A200001':'0岁男性总人数',
'G_A200002':'0岁女性总人数',
'G_A200003':'1-4岁男性总人数',
'G_A200004':'1-4岁女性总人数',
'G_A200005':'5-9岁男性总人数',
'G_A200006':'5-9岁女性总人数',
'G_A200007':'10-14岁男性总人数',
'G_A200008':'10-14岁女性总人数',
'G_A200009':'15-19岁男性总人数',
'G_A200010':'15-19岁女性总人数',
'G_A200011':'20-24岁男性总人数',
'G_A200012':'20-24岁女性总人数',
'G_A200013':'25-29岁男性总人数',
'G_A200014':'25-29岁女性总人数',
'G_A200015':'30-34岁男性总人数',
'G_A200016':'30-34岁女性总人数',
'G_A200017':'35-39岁男性总人数',
'G_A200018':'35-39岁女性总人数',
'G_A200019':'40-44岁男性总人数',
'G_A200020':'40-44岁女性总人数',
'G_A200021':'45-49岁男性总人数',
'G_A200022':'45-49岁女性总人数',
'G_A200023':'50-54岁男性总人数',
'G_A200024':'50-54岁女性总人数',
'G_A200025':'55-59岁男性总人数',
'G_A200026':'55-59岁女性总人数',
'G_A200027':'60-64岁男性总人数',
'G_A200028':'60-64岁女性总人数',
'G_A200029':'65-69岁男性总人数',
'G_A200030':'65-69岁女性总人数',
'G_A200031':'70-74岁男性总人数',
'G_A200032':'70-74岁女性总人数',
'G_A200033':'75-79岁男性总人数',
'G_A200034':'75-79岁女性总人数',
'G_A200035':'80-84岁男性总人数',
'G_A200036':'80-84岁女性总人数',
'G_A300005':'有65岁以上老年人口的户数',
'G_A300006':'有一个65岁以上老年人口的户数',
'G_A300007':'有二个65岁以上老年人口的户数',
'G_A300008':'有三个或以上65岁以上老年人口的户数',
'G_A300012':'从本县(市)及本市市区迁入的人口数',
'G_A300013':'从本省其他县(市)及市区迁入的人口数',
'G_A300014':'从外省迁入的人口数',
'G_A400001':'未上过学的男性人口数',
'G_A400002':'未上过学的女性人口数',
'G_A400003':'小学教育程度的男性人口数',
'G_A400004':'小学教育程度的女性人口数',
'G_A400005':'初中教育程度的男性人口数',
'G_A400006':'初中教育程度的女性人口数',
'G_A400007':'高中教育程度的男性人口数',
'G_A400008':'高中教育程度的女性人口数',
'G_A400009':'大学专科教育程度的男性人口数',
'G_A400010':'大学专科教育程度的女性人口数',
'G_A400011':'大学本科及以上教育程度的男性人口数',
'G_A400012':'大学本科以及上教育程度的女性人口数',
'G_A400016':'15岁及以上文盲人口数',
'G_A400017':'15岁及以上文盲男性人口数',
'G_A400018':'15岁及以上文盲女性人口数'
}
def reverseList(list):
list.reverse()
return list
def resv3(li):
hcnt = int(math.floor(len(li)/2))
tmp = 0
for i in range(hcnt):
tmp = li[i]
li[i] = li[-(i+1)]
li[-(i+1)] = tmp
return li
print '>>Program Start:' + str(time.ctime())
mxd= arcpy.mapping.MapDocument(os.path.join(mainPath,mxdTempletName))
print '>>step1-create temp mxd:' + str(time.ctime())
for lyr in arcpy.mapping.ListLayers(mxd):
if lyr.name=='grid':
for k in arr:
#注:10.2以上才支持GraduatedColorsSymbology
if lyr.symbologyType == "GRADUATED_COLORS":
lyr.symbology.valueField =k
lyr.symbology.numClasses =7
lyr.symbology.classBreakLabels=resv3(lyr.symbology.classBreakLabels)
lyr.symbology.classBreakDescriptions=resv3(lyr.symbology.classBreakLabels)
#lyr.symbology.classBreakValues=resv3(lyr.symbology.classBreakValues)
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
v = arr.get(k)
for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
if elm.text.encode('gbk').startswith('—'):#获取副标题,调整x值&修改名称
elm.elementPositionX=15-len(v)*0.25
elm.text = "—"+v
print k+":"+v
mxd.saveACopy(os.path.join(tempMxdPath, k+'.mxd'))
print '>>step1-completed:' + str(time.ctime())
print '>>step2-export png:' + str(time.ctime())
for afile in os.listdir(tempMxdPath):
if afile[-3:].lower() == 'mxd':
mxd = arcpy.mapping.MapDocument(os.path.join(tempMxdPath,afile))
arcpy.mapping.ExportToPNG(mxd, os.path.join(resultPngPath,afile[:-3] + 'png'), resolution = res)
del mxd
print '>>step2-completed:' + str(time.ctime())
print '>>Program End:' + str(time.ctime())