I am executing this Python code, in which I am trying to determinate the position of neighbor parcel (north, south, east, west).
It works fine but it took 2 hours for just 50 parcels!
I think that there is something going wrong. Is this execution time normal? Do you have any suggestions to make it faster?
I'am usingr arcgis10.1, arcpy, Python2.7 import arcpy import math import arcview
arcpy.env.workspace = "D:/Users/saadiya/Documents/ArcGIS/Default1.gdb"
arcpy.env.overwriteOutput = True
workspace = "C:/Saadia/SAFTOP/Parcelle et rivrains/simulation arcgis"
for i in range (1,50) :
expression = '"src_OBJECTID"=' + str(i)
output_table = "table" + str(i)
arcpy.PolygonNeighbors_analysis("P_dataset","Voisins")
arcpy.TableSelect_analysis("Voisins",output_table, expression)
arcpy.MakeFeatureLayer_management("P_dataset", "Parcelles_class1_copy")
arcpy.AddJoin_management("Parcelles_class1_copy","OBJECTID", output_table,"nbr_OBJECTID","KEEP_ALL")
target_parcel = "target_parcel_2" + str(i)
whereclause1 = '"P_dataset.OBJECTID"=' + str(i)
#print whereclause1
arcpy.Select_analysis("Parcelles_class1_copy",target_parcel,whereclause1)
Neighbors = "Neighbors_2" + str(i)
whereclause2 = output_table_2+'.src_OBJECTID='+str(i)
#print whereclause2
arcpy.Select_analysis("Parcelles_class1_copy",Neighbors,whereclause2)
arcpy.RemoveJoin_management("Parcelles_class1_copy",output_table)
target_neighbor_parcels = "target_neighbor_parcels_2" + str(i)
arcpy.Union_analysis([target_parcel,Neighbors],target_neighbor_parcels,"ALL")
centroide = "centroide_2" + str(i)
arcpy.FeatureToPoint_management(target_neighbor_parcels,centroide)
arcpy.AddXY_management(centroide)
cur = arcpy.UpdateCursor(centroide)
arcpy.AddField_management(centroide,"Gisement", "DOUBLE")
arcpy.AddField_management(centroide,"Orientation", "TEXT")
arcpy.Delete_management(output_table)
arcpy.Delete_management(target_parcel)
arcpy.Delete_management(Neighbors)
arcpy.Delete_management(target_neighbor_parcels)
cur = arcpy.UpdateCursor(centroide)
for row in cur :
a = output_table_2+"_src_FID_1"
#print a
condition = row.getValue(a)
if (condition == 0) :
PointX = row.getValue("POINT_X")
PointY = row.getValue("POINT_Y")
end_x = PointX
end_y = PointY
elif (condition != 0) :
PointX = row.getValue("POINT_X")
PointY = row.getValue("POINT_Y")
#print end_x
#print end_y
#print PointX
#print PointY
dx = (end_x - PointX)
dy = (end_y - PointY)
#print dx
#print dy
azimuth = math.atan2(dx, dy)
#print azimuth
azimuth_gr = azimuth*200/3.14519
print azimuth_gr
if (dy>=0 and dx>= 0 ):
print 1
azimuth_correct = azimuth_gr
elif (dy>=0 and dx<= 0 ):
print 2
azimuth_correct = 200- azimuth_gr
elif(dy<=0 and dx<= 0 ):
print 3
azimuth_correct = 200 + azimuth_gr
elif(dy<=0 and dx>= 0 ):
print 4
azimuth_correct = 400 - azimuth_gr
print azimuth_correct
row.setValue("Gisement", azimuth_correct)
cur.updateRow(row)
Position = row.getValue("Gisement")
#print Position
if (Position > 45 and Position <= 135):
Orient = "Est"
elif (Position > 135 and Position <= 225):
Orient = "Sud"
elif (Position > 225 and Position <= 315):
Orient = "Ouest"
elif (Position > 315 and Position <= 400):
Orient = "Nord"
elif (Position > 0 and Position <= 45):
Orient = "Nord"
elif (Position == 0):
Orient = ""
print Orient
row.setValue("Orientation", Orient)
cur.updateRow(row)