ARCGIS自动批量输出图片(JPG、BMP、PNG)
批量输出图片工具:
免费下载链接: https://pan.baidu.com/s/1gVfTLTxQCQ6uiz1mmtNsNA?pwd=8j5n 提取码: 8j5n
批量快速导出图片(JPG、BMP、PNG),每张图都会独立显示本图斑的范围线,不会附带其他图斑范围线哦,整洁美观!!!
哦耶~~从此,再也不用加班,再也不用熬夜,轻轻松松的,就完成了!(哈哈~~~~输出A3尺寸的bmp图斑,1000个图斑*5=5000份,只需等待30分钟左右即可输出完成!!!)
批量效果预览图:
程序代码:
if __name__ == "__main__":
pInput = arcpy.GetParameterAsText(0)
pIndexShp = arcpy.GetParameterAsText(1)
pOutput = arcpy.GetParameterAsText(2)
bOutMJ = arcpy.GetParameterAsText(3)
bAdjustArea = arcpy.GetParameterAsText(4)
strXY = arcpy.GetParameterAsText(5)
if strXY == '#' or not strXY:
strXY = "0.001 Meters" # provide a default value if unspecified
arcpy.env.XYTolerance = strXY
try:
arcpy.AddMessage(HeadInfor)
scd = arcpy.GetInstallInfo()
ArcgisVersion = scd["Version"]
ArcgisProductName = scd["ProductName"]
ArcgisInfo = ("%s %s" % (ArcgisProductName, ArcgisVersion))
arcpy.AddMessage(ArcgisInfo)
date1 = "2022-06-01"
date2 = datetime.datetime.now().strftime("%Y-%m-%d")
if caltime(date1, date2) > 180:
arcpy.AddError("<
exit(0)
strCurPath = sys.path[0]
CTempGDB = os.path.join(strCurPath, "pTempDatas.gdb")
arcpy.CreateFileGDB_management(strCurPath, "pTempDatas.gdb")
C_Temp = arcpy.CreateUniqueName("pTempsult", CTempGDB)
arcpy.AddMessage("Start Execute:")
pinFeatures = ("%s #;%s #" % (pInput, pIndexShp))
arcpy.AddMessage("Start Intersect_analysis:")
arcpy.Intersect_analysis(pinFeatures, C_Temp, "ALL", strXY, "INPUT")
arcpy.AddMessage("Start RepairGeometry:")
arcpy.RepairGeometry_management(C_Temp, "DELETE_NULL")
arcpy.AddMessage("Start AddField:")
nMJlenth = 2
if bOutMJ == "true":
nMJlenth = 4
arcpy.AddField_management(C_Temp, "T_MJ", "DOUBLE", 18, nMJlenth, "", "", "NULLABLE", "NON_REQUIRED", "")
arcpy.AddField_management(C_Temp, "CZ_MJ", "DOUBLE", 18, 6, "", "", "NULLABLE", "NON_REQUIRED", "")
arcpy.AddMessage("CalculateField AddField:")
AreaSum0 = GetDecimal('0',0)
AreaSumK1 = GetDecimal('0',0)
AreaSumK2 = GetDecimal('0', 0)
arcpy.AddMessage("Calculat The Old Area:")
if bOutMJ == "true":
SumTotal = sum([row[0] for row in arcpy.da.SearchCursor(pInput, 'SHAPE@AREA')])
AreaSum0 = GetDecimal(GetDecimal(str(SumTotal), nMJlenth) * GetDecimal('0.0001', nMJlenth), nMJlenth)
else:
SumTotal = sum([row[0] for row in arcpy.da.SearchCursor(pInput, 'SHAPE@AREA')])
AreaSum0 = GetDecimal(str(SumTotal), nMJlenth)
arcpy.AddMessage("Calculat The Analize Area:")
with arcpy.da.UpdateCursor(C_Temp, ['SHAPE@AREA','T_MJ','CZ_MJ']) as pCursor:
for pRow in pCursor:
if bOutMJ == "true":
strAreaOld = GetDecimal(str(pRow[0]), 12)
AreaSumK1 = AreaSumK1 + strAreaOld
strArea = GetDecimal(strAreaOld * GetDecimal('0.0001', nMJlenth), nMJlenth)
strAreaCZ = GetDecimal(strAreaOld - strArea * GetDecimal('10000', nMJlenth), 6)
AreaSumK2 = AreaSumK2 + strArea
pRow[1] = strArea
pRow[2] = strAreaCZ
pCursor.updateRow(pRow)
else:
strAreaOld = GetDecimal(str(pRow[0]), 12)
AreaSumK1 = AreaSumK1 + strAreaOld
strArea = GetDecimal(strAreaOld, nMJlenth)
strAreaCZ = GetDecimal(strAreaOld - strArea, 6)
AreaSumK2 = AreaSumK2 + strArea
pRow[1] = strArea
pRow[2] = strAreaCZ
pCursor.updateRow(pRow)
del pRow
del pCursor
if bOutMJ == "true":
AreaSumK1 = GetDecimal(AreaSumK1 * GetDecimal('0.0001', nMJlenth), nMJlenth)
else:
AreaSumK1 = GetDecimal(AreaSumK1, nMJlenth)
# 计算面积(与模板差值)
fCZMJ = AreaSumK1 - AreaSum0
strCZMJ ="topo sub value: {} - {} = {}".format(AreaSumK1, AreaSum0, fCZMJ)
arcpy.AddMessage(strCZMJ)
fCZMJ = AreaSumK2 - AreaSumK1
strCZMJ = "Need Adjust value: {} - {} = {}".format(AreaSumK2, AreaSumK1, fCZMJ)
arcpy.AddMessage(strCZMJ)
if bAdjustArea == "true":
nAdjust = 0
if bOutMJ == "true":
nAdjust = GetDecimal(fCZMJ * GetDecimal('10000', 0), 0)
else:
nAdjust = GetDecimal(fCZMJ * GetDecimal('100', 0), 0)
if fCZMJ > 0:
arcpy.AddMessage("Adjust The Area:")
arcpy.Sort_management(C_Temp, pOutput, "CZ_MJ ASCENDING", "UR")
nCountRecords = 0
with arcpy.da.UpdateCursor(pOutput, ['T_MJ']) as pCursor1:
for pRow1 in pCursor1:
nCountRecords = nCountRecords + 1
if nCountRecords > nAdjust:
break
if bOutMJ == "true":
pRow1[0] = GetDecimal(str(pRow1[0]), nMJlenth) - GetDecimal('0.0001', nMJlenth)
else:
pRow1[0] = GetDecimal(str(pRow1[0]), nMJlenth) - GetDecimal('0.01', nMJlenth)
pCursor1.updateRow(pRow1)
del pRow1
del pCursor1
elif fCZMJ < 0:
arcpy.AddMessage("Adjust The Area:")
nAdjust = nAdjust * GetDecimal('-1', 0)
arcpy.Sort_management(C_Temp, pOutput, "CZ_MJ DESCENDING", "UR")
nCountRecords = 0
with arcpy.da.UpdateCursor(pOutput, ['T_MJ']) as pCursor1:
for pRow1 in pCursor1:
nCountRecords = nCountRecords + 1
if nCountRecords > nAdjust:
break
if bOutMJ == "true":
pRow1[0] = GetDecimal(str(pRow1[0]), nMJlenth) - GetDecimal('0.0001', nMJlenth)
else:
pRow1[0] = GetDecimal(str(pRow1[0]), nMJlenth) - GetDecimal('0.01', nMJlenth)
pCursor1.updateRow(pRow1)