import arcpy
indexLayer=arcpy.GetParameterAsText(0)
outWorkSpace=arcpy.GetParameterAsText(1)
lyr=arcpy.mapping.Layer(indexLayer)
outpath=outWorkSpace+"\\"
mxd=arcpy.mapping.MapDocument("CURRENT")
df=arcpy.mapping.ListDataFrames(mxd)[0]
#计算形状指数,添加字段LSI计算形状指数
#添加字段scaleTime,计算比例尺放大倍数
dataFeature=lyr.dataSource
arcpy.AddField_management(dataFeature,"LSI","DOUBLE")
arcpy.CalculateField_management(dataFeature,"LSI","!Shape.length@METERS!/(2*math.sqrt(math.pi*!Shape.area@SQUAREMETERS!))","PYTHON_9.3")
arcpy.AddField_management(dataFeature,"scaleTime","DOUBLE")
expression = "getClass( !LSI! )"
codeblock="""
def getClass(Nordhaus):
if Nordhaus <= 2:
return 1.5
if Nordhaus > 2 and Nordhaus <= 3:
return 1.25
else:
return 1"""
arcpy.CalculateField_management(dataFeature,"scaleTime",expression,"PYTHON_9.3",codeblock)
for pageNum in range(1,mxd.dataDrivenPages.pageCount+1):
mxd.dataDrivenPages.currentPageID=pageNum
mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)
fullpath=outpath+mapName+".jpg"
query="NAME='"+mapName+"'"
lyr.definitionQuery=query
df.extent=lyr.getExtent()
df.scale = int(round(df.scale * mxd.dataDrivenPages.pageRow.getValue("scaleTime") / 500)) * 500
arcpy.mapping.ExportToJPEG(mxd,fullpath,resolution=300)
arcpy.AddMessage("第"+str(pageNum)+"张")
arcpy.AddMessage("出图结束!,共完成"+str(pageNum)+"张")
lyr.definitionQuery=""
arcpy.DeleteField_management(dataFeature,["LSI","scaleTime"])
del mxd,lyr
说明:
这段代码主要完成了一个批量出图的功能,可以根据地图文档的数据驱动页设置,批量输出不同的地图页面。其中具体步骤如下:
- 通过ArcPy模块获取输入的图层文件路径和输出文件夹路径,同时创建一个图层对象并加载输入的图层数据。
- 打开一个ArcGIS地图文档,并获取其第一个数据框架。
- 对加载的图层数据进行一些计算和处理操作,包括添加两个字段、计算形状指数和比例尺放大倍数等。
- 遍历数据驱动页并依次对每一页进行操作:
- 设置当前的数据驱动页ID和名称。
- 构建一个输出文件路径,并设置当前图层的定义查询条件。
- 设置数据框架的范围和比例尺,以及根据比例尺放大倍数调整比例尺。
- 将当前地图页面输出为JPEG文件。
- 在输出完成后,清除图层的定义查询条件,并删除添加的两个字段。
- 释放地图文档和图层资源。