Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.38 KB | None | 0 0
  1. import arcpy, math, datetime, time, sys, gc
  2. start = datetime.datetime.now()
  3. arcpy.env.overwriteOutput = True
  4. arcpy.env.workspace = "C:Userspetrus.davidDesktopWEMTESTWEM_244.gdb"
  5. pracovniAdresar = arcpy.env.workspace
  6. ################################################################################
  7. vetro = "windbreaklamy"
  8. kopie_za = "kopie_za"
  9. kopie_na = "kopie_na"
  10. effectiv_za = "effectiv_za"
  11. effectiv_na = "effectiv_na"
  12. c_linie_za = "c_linie_za"
  13. c_linie_na = "c_linie_na"
  14. temp_linie_orig = r"in_memorytemp_linie_orig"
  15. temp_linie_za = r"in_memorytemp_linie_za"
  16. temp_linie_na = r"in_memorytemp_linie_na"
  17. linie_za = r"in_memorylinie_za"
  18. linie_na = r"in_memorylinie_na"
  19. temp_effectiv_za = r"in_memorytemp_effectiv_za"
  20. temp_effectiv_na = r"in_memorytemp_effectiv_na"
  21. diss_effectiv_za = r"in_memorydiss_effectiv_za"
  22. diss_effectiv_na = r"in_memorydiss_effectiv_na"
  23. points = "points"
  24. points_za = r"in_memorypoints_za"
  25. points_na = r"in_memorypoints_na"
  26. points_agg = "points_agg"
  27. points_agg_za = "points_agg_za"
  28. points_agg_na = "points_agg_na"
  29. points_select = r"in_memorypoints_select"
  30. points_select_za = r"in_memorypoints_select_za"
  31. points_select_na = r"in_memorypoints_select_na"
  32. poly_out_ZA = r"in_memory/poly_out_ZA"
  33. poly_out_NA = r"in_memory/poly_out_NA"
  34. raster_windward = "raster_windward"
  35. raster_lee_wind = "raster_lee_wind"
  36. ################################################################################
  37. arcpy.CreateFeatureclass_management(pracovniAdresar, effectiv_za)
  38. arcpy.CreateFeatureclass_management(pracovniAdresar, effectiv_na)
  39. arcpy.AddField_management(effectiv_za, "ORIENTATION", "TEXT")
  40. arcpy.AddField_management(effectiv_na, "ORIENTATION", "TEXT")
  41. arcpy.AddField_management(effectiv_za, "EFFECTIVITY", "SHORT")
  42. arcpy.AddField_management(effectiv_na, "EFFECTIVITY", "SHORT")
  43. ################################################################################
  44. def smaz(layer):
  45. arcpy.Delete_management(layer)
  46. def windbreak_eff(polygon, move_NA, move_ZA, angle_vetru, out_NA, out_ZA):
  47. arcpy.FeatureVerticeindexoints_management(polygon, points, "ALL")
  48. desc_points = arcpy.Describe(points).shapeFieldName
  49. cur_points = arcpy.SearchCursor(points)
  50. lee_wind = []
  51. windward = []
  52. original = []
  53. sour_orig = []
  54. sour_za = []
  55. sour_na = []
  56. angle_v_rad = math.radians(angle_vetru)
  57. angle_v_sin = math.sin(angle_v_rad)
  58. angle_v_cos = math.cos(angle_v_rad)
  59. for b in cur_points:
  60. bod = b.getValue(desc_points)
  61. X = bod.trueCentroid.X
  62. Y = bod.trueCentroid.Y
  63. X2 = X + int(move_NA * angle_v_cos)
  64. Y2 = Y + int(move_NA * angle_v_sin)
  65. X3 = X - int(move_ZA * angle_v_cos)
  66. Y3 = Y - int(move_ZA * angle_v_sin)
  67. mergeNA = [X2, Y2]
  68. windward.append(mergeNA)
  69. mergeZA = [X3, Y3]
  70. lee_wind.append(mergeZA)
  71. mergeORIG = [X, Y]
  72. original.append(mergeORIG)
  73. # make copy of windbreak on both sides
  74. poly_za = arcpy.Polygon(arcpy.Array([arcpy.Point(*coords) for coords in lee_wind]))
  75. poly_na = arcpy.Polygon(arcpy.Array([arcpy.Point(*coords) for coords in windward]))
  76. # convert windbreak polygon into lines
  77. arcpy.PolygonToLine_management(polygon, temp_linie_orig)
  78. arcpy.PolygonToLine_management(poly_za, temp_linie_za)
  79. arcpy.PolygonToLine_management(poly_na, temp_linie_na)
  80. # convert lines to points
  81. arcpy.FeatureVerticeindexoints_management(poly_za, points_za, "ALL")
  82. arcpy.FeatureVerticeindexoints_management(poly_na, points_na, "ALL")
  83. # definition of boundary points
  84. arcpy.AggregatePoints_cartography(points, points_agg, "10000")
  85. arcpy.AggregatePoints_cartography(points_za, points_agg_za, "10000")
  86. arcpy.AggregatePoints_cartography(points_na, points_agg_na, "10000")
  87. arcpy.MakeFeatureLayer_management(points, "points_fc")
  88. arcpy.MakeFeatureLayer_management(points_za, "points_fc_za")
  89. arcpy.MakeFeatureLayer_management(points_na, "points_fc_na")
  90. # selection and export of points lying on boundary
  91. arcpy.SelectLayerByLocation_management("points_fc", "BOUNDARY_TOUCHES", points_agg, "", "NEW_SELECTION")
  92. arcpy.CopyFeatures_management("points_fc", points_select)
  93. arcpy.SelectLayerByLocation_management("points_fc_za", "BOUNDARY_TOUCHES", points_agg_za, "", "NEW_SELECTION")
  94. arcpy.CopyFeatures_management("points_fc_za", points_select_za)
  95. arcpy.SelectLayerByLocation_management("points_fc_na", "BOUNDARY_TOUCHES", points_agg_na, "", "NEW_SELECTION")
  96. arcpy.CopyFeatures_management("points_fc_na", points_select_na)
  97. # lists of points
  98. desc_orig = arcpy.Describe(points_select).shapeFieldName
  99. desc_za = arcpy.Describe(points_select_za).shapeFieldName
  100. desc_na = arcpy.Describe(points_select_na).shapeFieldName
  101. cur_orig = arcpy.SearchCursor(points_select)
  102. cur_za = arcpy.SearchCursor(points_select_za)
  103. cur_na = arcpy.SearchCursor(points_select_na)
  104. for x in cur_orig:
  105. bod = x.getValue(desc_orig)
  106. sour_orig.append([bod.trueCentroid.X, bod.trueCentroid.Y])
  107. for x in cur_za:
  108. bod = x.getValue(desc_za)
  109. sour_za.append([bod.trueCentroid.X, bod.trueCentroid.Y])
  110. for x in cur_na:
  111. bod = x.getValue(desc_na)
  112. sour_na.append([bod.trueCentroid.X, bod.trueCentroid.Y])
  113. # creating of boundary lines from lists of points and making of active area
  114. pocet_linii = len(sour_orig)
  115. linie_za_seznam = []
  116. linie_na_seznam = []
  117. for y in range(pocet_linii):
  118. 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])])))
  119. 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])])))
  120. arcpy.CopyFeatures_management(linie_za_seznam, linie_za)
  121. arcpy.CopyFeatures_management(linie_na_seznam, linie_na)
  122. # creating polygon from lines
  123. arcpy.FeatureToPolygon_management([temp_linie_orig, temp_linie_za, linie_za], temp_effectiv_za)
  124. arcpy.FeatureToPolygon_management([temp_linie_orig, temp_linie_na, linie_na], temp_effectiv_na)
  125. arcpy.Dissolve_management(temp_effectiv_za, diss_effectiv_za)
  126. arcpy.Dissolve_management(temp_effectiv_na, diss_effectiv_na)
  127. arcpy.Erase_analysis(diss_effectiv_za, polygon, poly_out_ZA)
  128. arcpy.Erase_analysis(diss_effectiv_na, polygon, poly_out_NA)
  129. poly_za_desc = arcpy.Describe(poly_out_ZA).shapeFieldName
  130. poly_na_desc = arcpy.Describe(poly_out_NA).shapeFieldName
  131. za_cur = arcpy.UpdateCursor(poly_out_ZA)
  132. na_cur = arcpy.UpdateCursor(poly_out_NA)
  133. for i in za_cur:
  134. q = i.getValue(poly_za_desc)
  135. poly_za_export.append(q)
  136. for i in na_cur:
  137. q = i.getValue(poly_na_desc)
  138. poly_na_export.append(q)
  139. # deleting
  140. tab1 = str(points_agg) + "_Tbl"
  141. tab2 = str(points_agg_za) + "_Tbl"
  142. tab3 = str(points_agg_na) + "_Tbl"
  143. delete_list = [points, points_agg, points_agg_na, points_agg_za, tab1, tab2, tab3,
  144. temp_linie_na, temp_linie_za, temp_effectiv_na, temp_effectiv_za, temp_linie_orig,
  145. poly_na, poly_za, points_na, points_za, points_select, points_select_na,
  146. points_select_za, "points_fc", "points_fc_za", "points_fc_na", linie_na,
  147. linie_za, diss_effectiv_na, diss_effectiv_za]
  148. for i in delete_list:
  149. smaz(i)
  150. ################################################################################
  151. angle = int(input("Input angle of wind (0' - 360'): "))
  152. if angle not in range(0, 360):
  153. print "Input angle is not in range 0 - 360!"
  154. sys.exit("Input Error")
  155. move_za = [60, 120, 180, 240, 300]
  156. move_na = [30, 60, 90, 120, 150]
  157. effectiv_token = [100, 80, 60, 40, 20]
  158. desc_windbreak = arcpy.Describe(windbreak).shapeFieldName
  159. cur_windbreak = arcpy.UpdateCursor(windbreak)
  160. index = 1
  161. ################################################################################
  162. for v in cur_windbreak:
  163. ii = 0
  164. poly_na_export = []
  165. poly_za_export = []
  166. objekt = v.getValue(desc_windbreak)
  167. try:
  168. for u in effectiv_token:
  169. clip_na = r"in_memory/clip_na"
  170. clip_za = r"in_memory/clip_za"
  171. union_na = r"in_memory/union_na"
  172. union_za = r"in_memory/union_za"
  173. windbreak_eff(objekt, move_na[ii], move_za[ii], angle, poly_na_export, poly_za_export)
  174. # when the 1.st envelope polygon is created
  175. if len(poly_na_export) == 1:
  176. with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
  177. cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_export[0]])
  178. with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
  179. cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_export[0]])
  180. # when the 2.st envelope polygon is created
  181. elif len(poly_na_export) == 2:
  182. arcpy.Erase_analysis(poly_na_export[1], poly_na_export[0], clip_na)
  183. arcpy.Erase_analysis(poly_za_export[1], poly_za_export[0], clip_za)
  184. desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
  185. desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
  186. cur_na = arcpy.SearchCursor(clip_na)
  187. for y in cur_na:
  188. poly_na_clip = y.getValue(desc_clip_na)
  189. cur_za = arcpy.SearchCursor(clip_za)
  190. for y in cur_za:
  191. poly_za_clip = y.getValue(desc_clip_za)
  192. with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
  193. cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
  194. with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
  195. cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
  196. # when the 3.st envelope polygon is created
  197. elif len(poly_na_export) == 3:
  198. arcpy.Union_analysis([poly_na_export[0], poly_na_export[1]], union_na)
  199. arcpy.Union_analysis([poly_za_export[0], poly_za_export[1]], union_za)
  200. arcpy.Erase_analysis(poly_na_export[2], union_na, clip_na)
  201. arcpy.Erase_analysis(poly_za_export[2], union_za, clip_za)
  202. desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
  203. desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
  204. cur_na = arcpy.SearchCursor(clip_na)
  205. for y in cur_na:
  206. poly_na_clip = y.getValue(desc_clip_na)
  207. cur_za = arcpy.SearchCursor(clip_za)
  208. for y in cur_za:
  209. poly_za_clip = y.getValue(desc_clip_za)
  210. with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
  211. cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
  212. with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
  213. cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
  214. # when the 4.st envelope polygon is created
  215. elif len(poly_na_export) == 4:
  216. arcpy.Union_analysis([poly_na_export[0], poly_na_export[1], poly_na_export[2]], union_na)
  217. arcpy.Union_analysis([poly_za_export[0], poly_za_export[1], poly_za_export[2]], union_za)
  218. arcpy.Erase_analysis(poly_na_export[3], union_na, clip_na)
  219. arcpy.Erase_analysis(poly_za_export[3], union_za, clip_za)
  220. desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
  221. desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
  222. cur_na = arcpy.SearchCursor(clip_na)
  223. for y in cur_na:
  224. poly_na_clip = y.getValue(desc_clip_na)
  225. cur_za = arcpy.SearchCursor(clip_za)
  226. for yy in cur_za:
  227. poly_za_clip = yy.getValue(desc_clip_za)
  228. with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
  229. cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
  230. with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
  231. cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
  232. # when the 5.st envelope polygon is created
  233. elif len(poly_na_export) == 5:
  234. arcpy.Union_analysis([poly_na_export[0], poly_na_export[1], poly_na_export[2], poly_na_export[3]], union_na)
  235. arcpy.Union_analysis([poly_za_export[0], poly_za_export[1], poly_za_export[2], poly_za_export[3]], union_za)
  236. arcpy.Erase_analysis(poly_na_export[4], union_na, clip_na)
  237. arcpy.Erase_analysis(poly_za_export[4], union_za, clip_za)
  238. desc_clip_na = arcpy.Describe(clip_na).shapeFieldName
  239. desc_clip_za = arcpy.Describe(clip_za).shapeFieldName
  240. cur_na = arcpy.SearchCursor(clip_na)
  241. for y in cur_na:
  242. poly_na_clip = y.getValue(desc_clip_na)
  243. cur_za = arcpy.SearchCursor(clip_za)
  244. for y in cur_za:
  245. poly_za_clip = y.getValue(desc_clip_za)
  246. with arcpy.da.InsertCursor(effectiv_na, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_na:
  247. cursor_na.insertRow([effectiv_token[ii], "windward", poly_na_clip])
  248. with arcpy.da.InsertCursor(effectiv_za, ["EFFECTIVITY", "ORIENTATION", "SHAPE@"]) as cursor_za:
  249. cursor_za.insertRow([effectiv_token[ii], "lee_wind", poly_za_clip])
  250. else:
  251. print "Error in creating sub-polygons of effectivity on: " + str(index) + "," + str(ii) + "!"
  252. arcpy.Delete_management(clip_na)
  253. arcpy.Delete_management(clip_za)
  254. arcpy.Delete_management(union_na)
  255. arcpy.Delete_management(union_za)
  256. ii = ii + 1
  257. del poly_na_export, poly_za_export
  258. print "Processed windbreakl: " + str(index) + " ..."
  259. print time.strftime("%H %M %S")
  260. gc.collect()
  261. print "...................................................."
  262. index = index + 1
  263. except:
  264. print "Error in creating polygons of effectivity on: " + str(index) + "!"
  265. ################################################################################
  266. konec = datetime.datetime.now()
  267. print "nSTART: " + start.strftime("%Y-%m-%d %H:%M:%S")
  268. print "END: " + konec.strftime("%Y-%m-%d %H:%M:%S")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement