pingaan

Untitled

Oct 9th, 2023
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.70 KB | None | 0 0
  1. from os.path import join, normpath
  2. import os, shutil
  3. from datetime import datetime
  4. import time
  5. from pushbullet import Pushbullet
  6.  
  7. print("Start point:", datetime.now())
  8.  
  9. pb = Pushbullet("o.DS2a9Ikj9wgrrgZgt2PumUqEd2FdFJFC")
  10.  
  11. path_start = normpath(r'H:\\GIS\\worklayers0\\')
  12. path_temp = normpath(r'H:\\GIS\\templayers0\\')
  13. path_temp2 = normpath(r'H:\\GIS\\temp2layers0\\')
  14. path_end = normpath(r'H:\\GIS\\resultlayers0\\')
  15.  
  16. slope_list = [4, 4.9, 5.9, 7.1, 8.2, 10, 11.8, 13.8, 15.7, 17.9, 20.6, 25]
  17. aspect_list_1 = [[0, 15], [15,30], [30, 45], [45, 60], [60, 75], [75, 90], [90, 105], [105, 120], [120, 135], [135, 150], [150, 165], [165, 180]]
  18. aspect_list_2 = [[180, 195], [195, 210], [210, 225], [225, 240], [240, 255], [255, 270], [270, 285], [285, 300], [300, 315], [315, 330], [330, 345], [345, 360]]
  19.  
  20. for filename in os.listdir(path_temp):
  21. file_path = os.path.join(path_temp, filename)
  22. try:
  23. if os.path.isfile(file_path) or os.path.islink(file_path):
  24. os.unlink(file_path)
  25. elif os.path.isdir(file_path):
  26. shutil.rmtree(file_path)
  27. except:
  28. pass
  29.  
  30. for filename in os.listdir(path_temp2):
  31. file_path = os.path.join(path_temp2, filename)
  32. try:
  33. if os.path.isfile(file_path) or os.path.islink(file_path):
  34. os.unlink(file_path)
  35. elif os.path.isdir(file_path):
  36. shutil.rmtree(file_path)
  37. except:
  38. pass
  39.  
  40. for filename in os.listdir(path_end):
  41. file_path = os.path.join(path_end, filename)
  42. try:
  43. if os.path.isfile(file_path) or os.path.islink(file_path):
  44. os.unlink(file_path)
  45. elif os.path.isdir(file_path):
  46. shutil.rmtree(file_path)
  47. except:
  48. pass
  49.  
  50. files = os.listdir(path_start)
  51.  
  52. for index, file in enumerate(files):
  53. os.rename(os.path.join(path_start, file), os.path.join(path_start, ''.join([str(index), '.tif'])))
  54.  
  55. for number in range(3):
  56.  
  57. processing.run("native:slope", {'INPUT':path_start+'\\'+str(number)+'.tif','Z_FACTOR':1,'OUTPUT':path_temp+'\\'+'slope_'+str(number)+'.tif'})
  58. processing.run("native:aspect", {'INPUT':path_start+'\\'+str(number)+'.tif','Z_FACTOR':1,'OUTPUT':path_temp+'\\'+'aspect_'+str(number)+'.tif'})
  59.  
  60. processing.run("gdal:merge", {'INPUT':[path_temp+'\\'+'aspect_'+str(number)+'.tif',path_temp+'\\'+'slope_'+str(number)+'.tif'],'PCT':True,'SEPARATE':True,'NODATA_INPUT':None,'NODATA_OUTPUT':None,'OPTIONS':'','EXTRA':'','DATA_TYPE':5,'OUTPUT':path_temp+'\\'+'merge_'+str(number)+'.tif'})
  61.  
  62. processing.run("native:pixelstopolygons", {'INPUT_RASTER':path_temp+'\\'+'merge_'+str(number)+'.tif','RASTER_BAND':1,'FIELD_NAME':'ASPECT','OUTPUT':path_temp+'\\'+'aspect_'+str(number)+'.shp'})
  63. processing.run("native:createspatialindex", {'INPUT':path_temp+'\\'+'aspect_'+str(number)+'.shp'})
  64.  
  65. processing.run("native:pixelstopolygons", {'INPUT_RASTER':path_temp+'\\'+'merge_'+str(number)+'.tif','RASTER_BAND':2,'FIELD_NAME':'SLOPE','OUTPUT':path_temp+'\\'+'slope_'+str(number)+'.shp'})
  66. processing.run("native:createspatialindex", {'INPUT':path_temp+'\\'+'slope_'+str(number)+'.shp'})
  67.  
  68. processing.run("native:joinattributesbylocation", {'INPUT':path_temp+'\\'+'slope_'+str(number)+'.shp','PREDICATE':[5],'JOIN':path_temp+'\\'+'aspect_'+str(number)+'.shp','JOIN_FIELDS':[],'METHOD':0,'DISCARD_NONMATCHING':False,'PREFIX':'','OUTPUT':path_temp+'\\'+'aspect_slope_'+str(number)+'.shp'})
  69. aspect_slope_layer = iface.addVectorLayer(path_temp+'\\'+'aspect_slope_'+str(number)+'.shp', "", "ogr")
  70.  
  71.  
  72. for i in range(len(slope_list)):
  73. aspect_list_1[i].append(slope_list[i])
  74.  
  75. for i in range(len(slope_list)):
  76. aspect_list_2[i].append(slope_list[::-1][i])
  77.  
  78. for aspect_interval in aspect_list_1:
  79. start = aspect_interval[0]
  80. end = aspect_interval[1]
  81. slope_loop = aspect_interval[2]
  82. aspect_slope_layer.selectByExpression('"ASPECT">'+str(start)+' and "ASPECT"<='+str(end)+' and "SLOPE">='+str(slope_loop))
  83. QgsVectorFileWriter.writeAsVectorFormat(aspect_slope_layer, str(path_temp)+'\\'+'aspect_slope_'+str(start)+'-'+str(end)+'_'+str(number)+'.shp', "UTF-8", aspect_slope_layer.crs(), "ESRI Shapefile", onlySelected=True)
  84. processing.run("native:createspatialindex", {'INPUT':str(path_temp)+'\\'+'aspect_slope_'+str(start)+'-'+str(end)+'_'+str(number)+'.shp'})
  85.  
  86. for aspect_interval in aspect_list_2:
  87. start = aspect_interval[0]
  88. end = aspect_interval[1]
  89. slope_loop = aspect_interval[2]
  90. aspect_slope_layer.selectByExpression('"ASPECT">'+str(start)+' and "ASPECT"<='+str(end)+' and "SLOPE">='+str(slope_loop))
  91. QgsVectorFileWriter.writeAsVectorFormat(aspect_slope_layer, str(path_temp)+'\\'+'aspect_slope_'+str(start)+'-'+str(end)+'_'+str(number)+'.shp', "UTF-8", aspect_slope_layer.crs(), "ESRI Shapefile", onlySelected=True)
  92. processing.run("native:createspatialindex", {'INPUT':str(path_temp)+'\\'+'aspect_slope_'+str(start)+'-'+str(end)+'_'+str(number)+'.shp'})
  93.  
  94. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_0-15_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_345-360_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'1_aspect_slope_int_'+str(number)+'.shp'})
  95. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_15-30_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_330-345_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'2_aspect_slope_int_'+str(number)+'.shp'})
  96. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_30-45_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_315-330_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'3_aspect_slope_int_'+str(number)+'.shp'})
  97. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_45-60_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_300-315_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'4_aspect_slope_int_'+str(number)+'.shp'})
  98. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_60-75_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_285-300_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'5_aspect_slope_int_'+str(number)+'.shp'})
  99. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_75-90_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_270-285_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'6_aspect_slope_int_'+str(number)+'.shp'})
  100. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_90-105_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_255-270_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'7_aspect_slope_int_'+str(number)+'.shp'})
  101. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_105-120_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_240-255_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'8_aspect_slope_int_'+str(number)+'.shp'})
  102. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_120-135_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_225-240_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'9_aspect_slope_int_'+str(number)+'.shp'})
  103. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_135-150_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_210-225_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'10_aspect_slope_int_'+str(number)+'.shp'})
  104. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_150-165_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_195-210_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'11_aspect_slope_int_'+str(number)+'.shp'})
  105. processing.run("native:mergevectorlayers", {'LAYERS':[path_temp+'\\'+'aspect_slope_165-180_'+str(number)+'.shp',path_temp+'\\'+'aspect_slope_180-195_'+str(number)+'.shp'],'CRS':None,'OUTPUT':str(path_temp2)+'\\'+'12_aspect_slope_int_'+str(number)+'.shp'})
  106.  
  107.  
  108. for i in range(1,13):
  109. processing.run("native:createspatialindex", {'INPUT':str(path_temp2)+'\\'+str(i)+'_aspect_slope_int_'+str(number)+'.shp'})
  110.  
  111. QgsProject.instance().removeAllMapLayers()
  112.  
  113. merge_list = os.listdir(path_temp2)
  114.  
  115. for i in range(1,13):
  116. check = str(i)+'_'
  117. name_ext_matches = []
  118. name_matches = [idx for idx in merge_list if idx.lower().startswith(check.lower())]
  119.  
  120. for file in name_matches:
  121.  
  122. if file.endswith('.shp'):
  123. name_ext_matches.append(file)
  124.  
  125. matches = [path_temp2 +'\\'+ x for x in name_ext_matches]
  126.  
  127. processing.run("native:mergevectorlayers", {'LAYERS':matches,'CRS':None,'OUTPUT':str(path_temp)+'\\'+str(i)+'_aspect_slope_int_int.shp'})
  128. processing.run("native:createspatialindex", {'INPUT':str(path_temp)+'\\'+str(i)+'_aspect_slope_int_int.shp'})
  129. processing.run("native:refactorfields", {'INPUT':str(path_temp)+'\\'+str(i)+'_aspect_slope_int_int.shp','FIELDS_MAPPING':[{'expression': '"SLOPE"','length': 20,'name': 'SLOPE','precision': 8,'sub_type': 0,'type': 2,'type_name': 'integer'},{'expression': '"ASPECT"','length': 20,'name': 'ASPECT','precision': 8,'sub_type': 0,'type': 4,'type_name': 'int8'}],'OUTPUT':str(path_end)+'\\'+str(i)+'_aspect_slope.shp'})
  130. processing.run("native:createspatialindex", {'INPUT':str(path_end)+'\\'+str(i)+'_aspect_slope.shp'})
  131.  
  132.  
  133. phone = pb.devices[0]
  134. push = pb.push_note("Wakie wakie!", "All done with extracting the slopes.")
  135. print("Notifications sent!")
  136. print("Done!")
  137. print("End point:", datetime.now())
Advertisement
Add Comment
Please, Sign In to add comment