I have two functions1. First one will crated the feature layer2. second one will access the same created layer and prints the result.
when i run my script first time it will print the wrong results. when i run it second time it will prints correct result...
Wrong Result Script running 1st Time:
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
.
.
.
.
.
.
Correct Result: Running script second time1. layer which is creating contains only 5 Rows so my script prints only 5 messages
getting access to map layer 1
getting access to map layer 2
getting access to map layer 3
getting access to map layer 4
getting access to map layer 5
Script:
# import system modules import arcpy import math import sys import traceback from arcpy import env # Class to Build Boundry of Districts class Build_Boundry: def __init__(self, workSpace,mapLayerFinal,censusLayer,totalDistricts,mxdLocation): self.workSpace = workSpace self.censusLayer = censusLayer self.mapLayerFinal = mapLayerFinal self.totalDistricts = totalDistricts self.mxdLocation = mxdLocation # Function to Calculate Average of Total Voters in each District def boundry(self): arcpy.AddMessage("Building Boundry of Districts ") if arcpy.Exists(self.mapLayerFinal): arcpy.AddMessage("Layer Already Exist.....") print(self.mapLayerFinal) else: arcpy.MakeFeatureLayer_management(self.censusLayer, self.mapLayerFinal,"DISTRICT_ID BETWEEN 1 AND "+str(self.totalDistricts),self.workSpace) # Execute Dissolve using LANDUSE and TAXCODE as Dissolve Fields arcpy.Dissolve_management(self.mapLayerFinal, str(self.workSpace)+"/"+str(self.mapLayerFinal), "DISTRICT_ID", "","MULTI_PART", "DISSOLVE_LINES") print(self.mapLayerFinal) arcpy.AddMessage("Boundry of Districts Calculated") mxd = arcpy.mapping.MapDocument(self.mxdLocation) df = arcpy.mapping.ListDataFrames(mxd, "")[0] addLayer = arcpy.mapping.Layer(self.mapLayerFinal) arcpy.mapping.AddLayer(df, addLayer,"BOTTOM") mxd.save() arcpy.RefreshTOC() del mxd, addLayer return; # Class to Calculate Compactness class Calculate_Compactness: def __init__(self, workSpace,mapLayerFinal): self.workSpace = workSpace self.mapLayerFinal = mapLayerFinal # Function to Calculate Compactness def compactness_quotient(self): arcpy.AddMessage("Calculating Compactness Quotient") with arcpy.da.SearchCursor(self.mapLayerFinal,["Shape_Area","DISTRICT_ID","Shape_Length"]) as rows: print "layer "+str(self.mapLayerFinal) for row in rows: area = row[0] district_id = row[1] perimeter = row[2] print "getting access to map layer "+str(district_id) print "Calculating Compactness Quotient Process Complete" return; folder = "C:/Users/Abrar ahmad/Desktop/CASES/Rural/Case_1_Boundary_Input" mxdLocation = r"C:/Users/Abrar ahmad/Desktop/CASES/Rural/Case_1_Boundary_Input/New_Rwp_Cencus.mxd" workSpace = "C:/Users/Abrar ahmad/Desktop/CASES/Rural/Case_1_Boundary_Input/Selected_BU2.gdb" env.workspace = workSpace censusLayer = "Rural_Area_Rwp" districtsLayer = "Existing_District_Boundary" totalDistricts = int(5) mapLayerFinal = str(districtsLayer)+"_map" # Function to Build Boundry boundry = Build_Boundry(workSpace,mapLayerFinal,censusLayer,totalDistricts,mxdLocation) boundry.boundry() cc = Calculate_Compactness(workSpace,mapLayerFinal) cc.compactness_quotient()
أكثر...
when i run my script first time it will print the wrong results. when i run it second time it will prints correct result...
Wrong Result Script running 1st Time:
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 2
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
getting access to map layer 3
.
.
.
.
.
.
Correct Result: Running script second time1. layer which is creating contains only 5 Rows so my script prints only 5 messages
getting access to map layer 1
getting access to map layer 2
getting access to map layer 3
getting access to map layer 4
getting access to map layer 5
Script:
# import system modules import arcpy import math import sys import traceback from arcpy import env # Class to Build Boundry of Districts class Build_Boundry: def __init__(self, workSpace,mapLayerFinal,censusLayer,totalDistricts,mxdLocation): self.workSpace = workSpace self.censusLayer = censusLayer self.mapLayerFinal = mapLayerFinal self.totalDistricts = totalDistricts self.mxdLocation = mxdLocation # Function to Calculate Average of Total Voters in each District def boundry(self): arcpy.AddMessage("Building Boundry of Districts ") if arcpy.Exists(self.mapLayerFinal): arcpy.AddMessage("Layer Already Exist.....") print(self.mapLayerFinal) else: arcpy.MakeFeatureLayer_management(self.censusLayer, self.mapLayerFinal,"DISTRICT_ID BETWEEN 1 AND "+str(self.totalDistricts),self.workSpace) # Execute Dissolve using LANDUSE and TAXCODE as Dissolve Fields arcpy.Dissolve_management(self.mapLayerFinal, str(self.workSpace)+"/"+str(self.mapLayerFinal), "DISTRICT_ID", "","MULTI_PART", "DISSOLVE_LINES") print(self.mapLayerFinal) arcpy.AddMessage("Boundry of Districts Calculated") mxd = arcpy.mapping.MapDocument(self.mxdLocation) df = arcpy.mapping.ListDataFrames(mxd, "")[0] addLayer = arcpy.mapping.Layer(self.mapLayerFinal) arcpy.mapping.AddLayer(df, addLayer,"BOTTOM") mxd.save() arcpy.RefreshTOC() del mxd, addLayer return; # Class to Calculate Compactness class Calculate_Compactness: def __init__(self, workSpace,mapLayerFinal): self.workSpace = workSpace self.mapLayerFinal = mapLayerFinal # Function to Calculate Compactness def compactness_quotient(self): arcpy.AddMessage("Calculating Compactness Quotient") with arcpy.da.SearchCursor(self.mapLayerFinal,["Shape_Area","DISTRICT_ID","Shape_Length"]) as rows: print "layer "+str(self.mapLayerFinal) for row in rows: area = row[0] district_id = row[1] perimeter = row[2] print "getting access to map layer "+str(district_id) print "Calculating Compactness Quotient Process Complete" return; folder = "C:/Users/Abrar ahmad/Desktop/CASES/Rural/Case_1_Boundary_Input" mxdLocation = r"C:/Users/Abrar ahmad/Desktop/CASES/Rural/Case_1_Boundary_Input/New_Rwp_Cencus.mxd" workSpace = "C:/Users/Abrar ahmad/Desktop/CASES/Rural/Case_1_Boundary_Input/Selected_BU2.gdb" env.workspace = workSpace censusLayer = "Rural_Area_Rwp" districtsLayer = "Existing_District_Boundary" totalDistricts = int(5) mapLayerFinal = str(districtsLayer)+"_map" # Function to Build Boundry boundry = Build_Boundry(workSpace,mapLayerFinal,censusLayer,totalDistricts,mxdLocation) boundry.boundry() cc = Calculate_Compactness(workSpace,mapLayerFinal) cc.compactness_quotient()
أكثر...