任务:现有一个工程文件,见下图,需要对每个市级行政区划进行出图。
解决方法,通过游标对该数据集进行遍历,进行自动出图,
脚本:其实保险起见,这里的游标应使用with语句,这里就不改了。
# coding:utf-8
import arcpy
from arcpy import env
import os
def ExportToJPGFile(lyt, mapframe, lyr,fidIdx, outputDir, filename, imgWidth=600,imgHeight=500):
query = "FID={0}".format(fidIdx)
arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query)
mapframe.zoomToAllLayers(True)
# df.panToExtent(lyr.getSelectedExtent())
mapframe.camera.scale = mapframe.camera.scale * 1.2 # 比例尺
arcpy.SelectLayerByAttribute_management(lyr, "CLEAR_SELECTION") #清除所选要素
lyt.listElements('TEXT_ELEMENT')[0].text = str(filename) + "行政区划图" #更新标题
outFile = "{0}\\{1}.jpg".format(outputDir, filename)
lyt.exportToJPEG(outFile, resolution=100)
return outFile
if __name__=="__main__":
aprx = arcpy.mp.ArcGISProject(r"D:\ArcGIS 10.4.1\MyProject\MyProject.aprx") # 获取地图文档
map = aprx.listMaps("Layers2")[0] # 可以通过名称进行筛选
lyt = aprx.listLayouts("Untitled")[0]
mapframe = lyt.listElements("MAPFRAME_ELEMENT")[0]
# 加载图层
lyr = map.listLayers()[2]
#print(lyr.name)
#mapframe.camera.scale # 比例尺
rows = arcpy.da.SearchCursor(lyr, [u"FID", u"市"])
ii = 0
for row in rows:
if ii < 27:
filename = rows[0]
cityname = rows[1]
print(cityname)
ExportToJPGFile(lyt,mapframe,lyr,ii,"D:\\Desktop\\outputPics",cityname)
ii += 1
# arcpy.RefreshActiveView()
# arcpy.RefreshTOC()
del aprx
运行结果: