@@ -39,7 +39,7 @@ def get_shapefile_as_json_pyqgis(layer, logger=None):
3939 for feature in layer .getFeatures ():
4040 geom = feature .geometry ()
4141 attributes = feature .attributes ()
42- geomType = geom .wkbType ()
42+ geomType = QgsWkbTypes . flatType ( geom .wkbType ()) # removes Z and M dimentions from the geomtype
4343
4444 feature_dict = {
4545 "attributes" : {fieldNames [i ]: attributes [i ] for i in range (len (fieldNames ))}
@@ -69,69 +69,75 @@ def get_shapefile_as_json_pyqgis(layer, logger=None):
6969
7070 return {"features" : features }
7171
72- def process_raster_for_impactmap (source_excavation_poly , dtb_raster_layer , calculation_range , output_resolution , output_folder , context = None , logger = None ):
72+ def process_raster_for_impactmap (source_excavation_poly , dtb_raster_layer , clipping_range , output_resolution , output_folder , context = None , logger = None ):
7373 """
74- Processes raster data for excavation polygons: clipping, resampling, and converting to TIFF.
74+ Processes raster data for excavation polygons by clipping, resampling,
75+ and converting it to TIFF format, and then returns the path to the processed file.
7576
7677 Parameters:
7778 - source_excavation_poly (QgsVectorLayer): Polygon layer for excavation areas.
7879 - dtb_raster_layer (QgsRasterLayer): QGIS Raster layer for processing.
79- - calculation_range (int): Calculation range for adjusting extents.
80+ - clipping_range (int): Clipping range for adjusting extents of the excavation .
8081 - output_resolution (float): Desired output resolution for resampling.
81- - output_folder (str ): Folder path for storing output files.
82- - context (QgsProcessingContext): Processing context for managing temporary files. Defaults to None
83- - logger: Logger object for logging messages. Defaults to None
82+ - output_folder (Path ): Folder path for storing output files, as a Path object .
83+ - context (QgsProcessingContext): Processing context for managing temporary files. Defaults to None.
84+ - logger: Logger object for logging messages. Defaults to None.
8485
8586 Returns:
86- - str: File path of the processed raster in TIFF format.
87+ - Path: Path object of the processed raster in TIFF format.
8788 """
8889 # Processing temp folder
89- temp_folder = QgsProcessingContext .temporaryFolder (context ) if context else QgsProcessingUtils .tempFolder ()
90+ temp_folder = Path ( QgsProcessingContext .temporaryFolder (context ) if context else QgsProcessingUtils .tempFolder () )
9091
9192 for feature in source_excavation_poly .getFeatures ():
9293 geom = feature .geometry ()
9394 polygon_extent = geom .boundingBox () # Returns a QgsRectangle of the polygon feature
9495 raster_extent = dtb_raster_layer .extent ()
9596
9697 # Expanding the extent by the specified calculation range
97- polygon_extent .grow (calculation_range )
98- logger .debug (f"POLYGON Extent RAW: { polygon_extent } " )
98+ polygon_extent .grow (clipping_range )
99+ # logger.debug(f"POLYGON Extent RAW: {polygon_extent}")
99100
100101 # Compare and adjust the polygon_extent if it exceeds the raster_extent
101- xmin = max (polygon_extent .xMinimum (), raster_extent .xMinimum ())
102- xmax = min (polygon_extent .xMaximum (), raster_extent .xMaximum ())
103- ymin = max (polygon_extent .yMinimum (), raster_extent .yMinimum ())
104- ymax = min (polygon_extent .yMaximum (), raster_extent .yMaximum ())
102+ # xmin = max(polygon_extent.xMinimum(), raster_extent.xMinimum())
103+ # xmax = min(polygon_extent.xMaximum(), raster_extent.xMaximum())
104+ # ymin = max(polygon_extent.yMinimum(), raster_extent.yMinimum())
105+ # ymax = min(polygon_extent.yMaximum(), raster_extent.yMaximum())
105106
106107
107108 # Calculate the area and determine if clipping of the raster is needed
108109 # area = polygon_extent.width() * polygon_extent.height()
109110
110111 # Ensure the expanded polygon extent is within the raster extent
111- adjusted_extent = [xmin , ymax , xmax , ymin ] # Format for PROJWIN
112- logger .debug (f"ADJUSTED Extent RAW: { adjusted_extent } " )
112+ # adjusted_extent = [xmin, ymax, xmax, ymin] # Format for PROJWIN
113+ # logger.debug(f"ADJUSTED Extent RAW: {adjusted_extent}")
113114
114115 # Initialize paths for temporary raster files
115116 dtb_clip_raster_path = None
116117 dtb_raster_resample_path = None
117118 #if float(output_resolution) / area < 10 / 820000:
118- if adjusted_extent != [polygon_extent .xMinimum (), polygon_extent .yMaximum (), polygon_extent .xMaximum (), polygon_extent .yMinimum ()]:
119+ #if adjusted_extent != [polygon_extent.xMinimum(), polygon_extent.yMaximum(), polygon_extent.xMaximum(), polygon_extent.yMinimum()]:
120+ if raster_extent .contains (polygon_extent ):
119121 logger .debug ("START raster clipping" )
120- dtb_clip_raster_path = Path ( temp_folder ) / "clip_temp-raster.tif"
122+ dtb_clip_raster_path = temp_folder / "clip_temp-raster.tif"
121123 # Clipping the raster to the modified extent
122124 processing .run ("gdal:cliprasterbyextent" , {
123125 'INPUT' : dtb_raster_layer .source (),
124- 'PROJWIN' : f"{ xmin } , { xmax } , { ymin } , { ymax } " , # correct format to pass
126+ 'PROJWIN' : f"{ polygon_extent . xMinimum () } , { polygon_extent . xMaximum () } , { polygon_extent . yMinimum () } , { polygon_extent . yMaximum () } " , # correct format to pass
125127 'NODATA' : None ,
126128 'OPTIONS' : '' ,
127129 'DATA_TYPE' : 0 , # Use 5 for Float32
128130 'OUTPUT' : str (dtb_clip_raster_path )
129131 })
130132 dtb_raster_layer = QgsRasterLayer (str (dtb_clip_raster_path ), "clip_temp-raster" )
131133 logger .debug ("DONE raster clipping" )
132-
134+
135+ # Get raster properties (columns and rows count) before resample
136+ n_cols = dtb_raster_layer .width ()
137+ n_rows = dtb_raster_layer .height ()
138+ logger .info (f"Dtb raster cols and rows before resampling: { n_cols } , { n_rows } " )
133139 # Resampling the raster to the desired output resolution
134- dtb_raster_resample_path = Path ( temp_folder ) / "resampl_temp-raster.tif"
140+ dtb_raster_resample_path = temp_folder / "resampl_temp-raster.tif"
135141 logger .debug ("START raster resampling" )
136142 processing .run ("gdal:warpreproject" , {
137143 'INPUT' : dtb_raster_layer .source (),
@@ -143,21 +149,21 @@ def process_raster_for_impactmap(source_excavation_poly, dtb_raster_layer, calcu
143149 dtb_raster_layer = QgsRasterLayer (str (dtb_raster_resample_path ), "resampl_temp-raster" )
144150 logger .debug ("DONE raster resampling" )
145151
146- # Get raster properties (columns and rows count)
152+ # Get raster properties (columns and rows count) after resample
147153 n_cols = dtb_raster_layer .width ()
148154 n_rows = dtb_raster_layer .height ()
149155 logger .info (f"Dtb raster cols and rows after resampling: { n_cols } , { n_rows } " )
150156
151157 # Convert to TIFF if needed
152- dtb_raster_tiff = output_folder + "/ dtb_raster.tif"
153- if not dtb_raster_layer .source ().endswith ('.tif' ):
158+ dtb_raster_tiff = output_folder / " dtb_raster.tif"
159+ if not dtb_raster_layer .source ().endswith (( '.tif' , '.tiff' )): #checks a tuple
154160 logger .info ("START raster to TIFF conversion" )
155- QgsRasterFileWriter .writeRasterLayer (dtb_raster_layer , dtb_raster_tiff , "GTiff" )
161+ QgsRasterFileWriter .writeRasterLayer (dtb_raster_layer , str ( dtb_raster_tiff ) , "GTiff" )
156162 logger .info ("DONE raster to TIFF conversion" )
157163 else :
158- dtb_raster_tiff = dtb_raster_layer .source ()
164+ dtb_raster_tiff = Path ( dtb_raster_layer .source () )
159165
160- # Return the path of the final processed raster file
166+ # Return the Path object of the final processed raster file
161167 return dtb_raster_tiff
162168
163169def add_layer_to_qgis (layer_path , layer_name , style_path , group_name = None , logger = None ):
0 commit comments