Skip to content

Commit 1d4d262

Browse files
author
Daniel
committed
update get_shapefile_as_json_pyqgis, to remove Z and M dimentions from excavation
1 parent 7b23f59 commit 1d4d262

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

utils/methodslib.py

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

163169
def add_layer_to_qgis(layer_path, layer_name, style_path, group_name=None, logger=None):

0 commit comments

Comments
 (0)