Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import arcpy, math, datetime, time, sys, gc
- start = datetime.datetime.now()
- arcpy.env.overwriteOutput = True
- arcpy.env.workspace = "C:Userspetrus.davidDesktopWEMTESTWEM_244.gdb"
- pracovniAdresar = arcpy.env.workspace
- ################################################################################
- vetro = "windbreaklamy"
- kopie_za = "kopie_za"
- kopie_na = "kopie_na"
- effectiv_za = "effectiv_za"
- effectiv_na = "effectiv_na"
- c_linie_za = "c_linie_za"
- c_linie_na = "c_linie_na"
- temp_linie_orig = r"in_memorytemp_linie_orig"
- temp_linie_za = r"in_memorytemp_linie_za"
- temp_linie_na = r"in_memorytemp_linie_na"
- linie_za = r"in_memorylinie_za"
- linie_na = r"in_memorylinie_na"
- temp_effectiv_za = r"in_memorytemp_effectiv_za"
- temp_effectiv_na = r"in_memorytemp_effectiv_na"
- diss_effectiv_za = r"in_memorydiss_effectiv_za"
- diss_effectiv_na = r"in_memorydiss_effectiv_na"
- points = "points"
- points_za = r"in_memorypoints_za"
- points_na = r"in_memorypoints_na"
- points_agg = "points_agg"
- points_agg_za = "points_agg_za"
- points_agg_na = "points_agg_na"
- points_select = r"in_memorypoints_select"
- points_select_za = r"in_memorypoints_select_za"
- points_select_na = r"in_memorypoints_select_na"
- poly_out_ZA = r"in_memory/poly_out_ZA"
- poly_out_NA = r"in_memory/poly_out_NA"
- raster_windward = "raster_windward"
- raster_lee_wind = "raster_lee_wind"
- ################################################################################
- arcpy.CreateFeatureclass_management(pracovniAdresar, effectiv_za)
- arcpy.CreateFeatureclass_management(pracovniAdresar, effectiv_na)
- arcpy.AddField_management(effectiv_za, "ORIENTATION", "TEXT")
- arcpy.AddField_management(effectiv_na, "ORIENTATION", "TEXT")
- arcpy.AddField_management(effectiv_za, "EFFECTIVITY", "SHORT")
- arcpy.AddField_management(effectiv_na, "EFFECTIVITY", "SHORT")
- ################################################################################
- def smaz(layer):
- arcpy.Delete_management(layer)
- def windbreak_eff(polygon, move_NA, move_ZA, angle_vetru, out_NA, out_ZA):
- arcpy.FeatureVerticeindexoints_management(polygon, points, "ALL")
- desc_points = arcpy.Describe(points).shapeFieldName
- cur_points = arcpy.SearchCursor(points)
- lee_wind = []
- windward = []
- original = []
- sour_orig = []
- sour_za = []
- sour_na = []
- angle_v_rad = math.radians(angle_vetru)
- angle_v_sin = math.sin(angle_v_rad)
- angle_v_cos = math.cos(angle_v_rad)
- for b in cur_points:
- bod = b.getValue(desc_points)
- X = bod.trueCentroid.X
- Y = bod.trueCentroid.Y
- X2 = X + int(move_NA * angle_v_cos)
- Y2 = Y + int(move_NA * angle_v_sin)
- X3 = X - int(move_ZA * angle_v_cos)
- Y3 = Y - int(move_ZA * angle_v_sin)
- mergeNA = [X2, Y2]
- windward.append(mergeNA)
- mergeZA = [X3, Y3]
- lee_wind.append(mergeZA)
- mergeORIG = [X, Y]
- original.append(mergeORIG)
- # make copy of windbreak on both sides
- poly_za = arcpy.Polygon(arcpy.Array([arcpy.Point(*coords) for coords in lee_wind]))
- poly_na = arcpy.Polygon(arcpy.Array([arcpy.Point(*coords) for coords in windward]))
- # convert windbreak polygon into lines
- arcpy.PolygonToLine_management(polygon, temp_linie_orig)
- arcpy.PolygonToLine_management(poly_za, temp_linie_za)
- arcpy.PolygonToLine_management(poly_na, temp_linie_na)
- # convert lines to points
- arcpy.FeatureVerticeindexoints_management(poly_za, points_za, "ALL")
- arcpy.FeatureVerticeindexoints_management(poly_na, points_na, "ALL")
- # definition of boundary points
- arcpy.AggregatePoints_cartography(points, points_agg, "10000")
- arcpy.AggregatePoints_cartography(points_za, points_agg_za, "10000")
- arcpy.AggregatePoints_cartography(points_na, points_agg_na, "10000")
- arcpy.MakeFeatureLayer_management(points, "points_fc")
- arcpy.MakeFeatureLayer_management(points_za, "points_fc_za")
- arcpy.MakeFeatureLayer_management(points_na, "points_fc_na")
- # selection and export of points lying on boundary
- arcpy.SelectLayerByLocation_management("points_fc", "BOUNDARY_TOUCHES", points_agg, "", "NEW_SELECTION")
- arcpy.CopyFeatures_management("points_fc", points_select)
- arcpy.SelectLayerByLocation_management("points_fc_za", "BOUNDARY_TOUCHES", points_agg_za, "", "NEW_SELECTION")
- arcpy.CopyFeatures_management("points_fc_za", points_select_za)
- arcpy.SelectLayerByLocation_management("points_fc_na", "BOUNDARY_TOUCHES", points_agg_na, "", "NEW_SELECTION")
- arcpy.CopyFeatures_management("points_fc_na", points_select_na)
- # lists of points
- desc_orig = arcpy.Describe(points_select).shapeFieldName
- desc_za = arcpy.Describe(points_select_za).shapeFieldName
- desc_na = arcpy.Describe(points_select_na).shapeFieldName
- cur_orig = arcpy.SearchCursor(points_select)
- cur_za = arcpy.SearchCursor(points_select_za)
- cur_na = arcpy.SearchCursor(points_select_na)
- for x in cur_orig:
- bod = x.getValue(desc_orig)
- sour_orig.append([bod.trueCentroid.X, bod.trueCentroid.Y])
- for x in cur_za:
- bod = x.getValue(desc_za)
- sour_za.append([bod.trueCentroid.X, bod.trueCentroid.Y])
- for x in cur_na:
- bod = x.getValue(desc_na)
- sour_na.append([bod.trueCentroid.X, bod.trueCentroid.Y])
- # creating of boundary lines from lists of points and making of active area
- pocet_linii = len(sour_orig)
- linie_za_seznam = []
- linie_na_seznam = []
- for y in range(pocet_linii):
- linie_za_seznam.append(arcpy.Polyline(arcpy.Array([arcpy.Point(sour_orig[y][0], sour_orig[y][1]), arcpy.Point(sour_za[y][0], sour_za[y][1])])))
- linie_na_seznam.append(arcpy.Polyline(arcpy.Array([arcpy.Point(sour_orig[y][0], sour_orig[y][1]), arcpy.Point(sour_na[y][0], sour_na[y][1])])))
- arcpy.CopyFeatures_management(linie_za_seznam, linie_za)
- arcpy.CopyFeatures_management(linie_na_seznam, linie_na)
- # creating polygon from lines
- arcpy.FeatureToPolygon_management([temp_linie_orig, temp_linie_za, linie_za], temp_effectiv_za)
- arcpy.FeatureToPolygon_management([temp_linie_orig, temp_linie_na, linie_na], temp_effectiv_na)
- arcpy.Dissolve_management(temp_effectiv_za, diss_effectiv_za)
- arcpy.Dissolve_management(temp_effectiv_na, diss_effectiv_na)
- arcpy.Erase_analysis(diss_effectiv_za, polygon, poly_out_ZA)
- arcpy.Erase_analysis(diss_effectiv_na, polygon, poly_out_NA)
- poly_za_desc = arcpy.Describe(poly_out_ZA).shapeFieldName
- poly_na_desc = arcpy.Describe(poly_out_NA).shapeFieldName
- za_cur = arcpy.UpdateCursor(poly_out_ZA)
- na_cur = arcpy.UpdateCursor(poly_out_NA)
- for i in za_cur:
- q = i.getValue(poly_za_desc)
- poly_za_export.append(q)
- for i in na_cur:
- q = i.getValue(poly_na_desc)
- poly_na_export.append(q)
- # deleting
- tab1 = str(points_agg) + "_Tbl"
- tab2 = str(points_agg_za) + "_Tbl"
- tab3 = str(points_agg_na) + "_Tbl"
- delete_list = [points, points_agg, points_agg_na, points_agg_za, tab1, tab2, tab3,
- temp_linie_na, temp_linie_za, temp_effectiv_na, temp_effectiv_za, temp_linie_orig,
- poly_na, poly_za, points_na, points_za, points_select, points_select_na,
- points_select_za, "points_fc", "points_fc_za", "points_fc_na", linie_na,
- linie_za, diss_effectiv_na, diss_effectiv_za]
- for i in delete_list:
- smaz(i)
- ################################################################################
- angle = int(input("Input angle of wind (0' - 360'): "))
- if angle not in range(0, 360):
- print "Input angle is not in range 0 - 360!"
- sys.exit("Input Error")
- move_za = [60, 120, 180, 240, 300]
- move_na = [30, 60, 90, 120, 150]
- effectiv_token = [100, 80, 60, 40, 20]
- desc_windbreak = arcpy.Describe(windbreak).shapeFieldName
- cur_windbreak = arcpy.UpdateCursor(windbreak)
- index = 1
- ################################################################################
- for v in cur_windbreak:
- ii = 0
- poly_na_export = []
- poly_za_export = []
- objekt = v.getValue(desc_windbreak)
- try:
- for u in effectiv_token:
- clip_na = r"in_memory/clip_na"
- clip_za = r"in_memory/clip_za"
- union_na = r"in_memory/union_na"
- union_za = r"in_memory/union_za"
- windbreak_eff(objekt, move_na[ii], move_za[ii], angle, poly_na_export, poly_za_export)
- # when the 1.st envelope polygon is created
- if len(poly_na_export) == 1:
- with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
- cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_export[0]])
- with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
- cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_export[0]])
- # when the 2.st envelope polygon is created
- elif len(poly_na_export) == 2:
- arcpy.Erase_analysis(poly_na_export[1], poly_na_export[0], clip_na)
- arcpy.Erase_analysis(poly_za_export[1], poly_za_export[0], clip_za)
- desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
- desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
- cur_na = arcpy.SearchCursor(clip_na)
- for y in cur_na:
- poly_na_clip = y.getValue(desc_clip_na)
- cur_za = arcpy.SearchCursor(clip_za)
- for y in cur_za:
- poly_za_clip = y.getValue(desc_clip_za)
- with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
- cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
- with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
- cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
- # when the 3.st envelope polygon is created
- elif len(poly_na_export) == 3:
- arcpy.Union_analysis([poly_na_export[0], poly_na_export[1]], union_na)
- arcpy.Union_analysis([poly_za_export[0], poly_za_export[1]], union_za)
- arcpy.Erase_analysis(poly_na_export[2], union_na, clip_na)
- arcpy.Erase_analysis(poly_za_export[2], union_za, clip_za)
- desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
- desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
- cur_na = arcpy.SearchCursor(clip_na)
- for y in cur_na:
- poly_na_clip = y.getValue(desc_clip_na)
- cur_za = arcpy.SearchCursor(clip_za)
- for y in cur_za:
- poly_za_clip = y.getValue(desc_clip_za)
- with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
- cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
- with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
- cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
- # when the 4.st envelope polygon is created
- elif len(poly_na_export) == 4:
- arcpy.Union_analysis([poly_na_export[0], poly_na_export[1], poly_na_export[2]], union_na)
- arcpy.Union_analysis([poly_za_export[0], poly_za_export[1], poly_za_export[2]], union_za)
- arcpy.Erase_analysis(poly_na_export[3], union_na, clip_na)
- arcpy.Erase_analysis(poly_za_export[3], union_za, clip_za)
- desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
- desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
- cur_na = arcpy.SearchCursor(clip_na)
- for y in cur_na:
- poly_na_clip = y.getValue(desc_clip_na)
- cur_za = arcpy.SearchCursor(clip_za)
- for yy in cur_za:
- poly_za_clip = yy.getValue(desc_clip_za)
- with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
- cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
- with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
- cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
- # when the 5.st envelope polygon is created
- elif len(poly_na_export) == 5:
- arcpy.Union_analysis([poly_na_export[0], poly_na_export[1], poly_na_export[2], poly_na_export[3]], union_na)
- arcpy.Union_analysis([poly_za_export[0], poly_za_export[1], poly_za_export[2], poly_za_export[3]], union_za)
- arcpy.Erase_analysis(poly_na_export[4], union_na, clip_na)
- arcpy.Erase_analysis(poly_za_export[4], union_za, clip_za)
- desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
- desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
- cur_na = arcpy.SearchCursor(clip_na)
- for y in cur_na:
- poly_na_clip = y.getValue(desc_clip_na)
- cur_za = arcpy.SearchCursor(clip_za)
- for y in cur_za:
- poly_za_clip = y.getValue(desc_clip_za)
- with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
- cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
- with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
- cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
- else:
- print "Error in creating sub-polygons of effectivity on: " + str(index) + "," + str(ii) + "!"
- arcpy.Delete_management(clip_na)
- arcpy.Delete_management(clip_za)
- arcpy.Delete_management(union_na)
- arcpy.Delete_management(union_za)
- ii = ii + 1
- del poly_na_export, poly_za_export
- print "Processed windbreakl: " + str(index) + " ..."
- print time.strftime("%H %M %S")
- gc.collect()
- print "...................................................."
- index = index + 1
- except:
- print "Error in creating polygons of effectivity on: " + str(index) + "!"
- ################################################################################
- konec = datetime.datetime.now()
- print "nSTART: " + start.strftime("%Y-%m-%d %H:%M:%S")
- print "END: " + konec.strftime("%Y-%m-%d %H:%M:%S")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement