GeoTIFF: Integrate to River submodel.

scenario-dev-pa
Pierre-Antoine 2025-11-10 10:21:40 +01:00
parent a308af41e0
commit 4c0a12dcf9
5 changed files with 52 additions and 39 deletions

View File

@ -35,6 +35,8 @@ try:
import rasterio.sample import rasterio.sample
import rasterio.vrt import rasterio.vrt
import rasterio._features import rasterio._features
from rasterio.io import MemoryFile
_rasterio_loaded = True _rasterio_loaded = True
except Exception as e: except Exception as e:
print(f"Module 'rasterio' is not available: {e}") print(f"Module 'rasterio' is not available: {e}")
@ -153,7 +155,7 @@ class GeoTIFF(SQLSubModel):
if self._file_bytes == b'': if self._file_bytes == b'':
return None return None
if self._memfile == None: if self._memfile is None:
self._memfile = MemoryFile() self._memfile = MemoryFile()
self._memfile.write(self._file_bytes) self._memfile.write(self._file_bytes)
@ -202,9 +204,12 @@ class GeoTIFF(SQLSubModel):
def _db_update(cls, execute, version, data=None): def _db_update(cls, execute, version, data=None):
major, minor, release = version.strip().split(".") major, minor, release = version.strip().split(".")
if major == "0" and int(minor) <= 2: if major == "0" and int(minor) < 2:
cls._db_create(execute)
if major == "0" and int(minor) == 2:
if int(release) < 3: if int(release) < 3:
cls._create_submodel(execute) cls._db_create(execute)
return True return True
@ -225,43 +230,44 @@ class GeoTIFF(SQLSubModel):
"scenario " + "scenario " +
"FROM geotiff " + "FROM geotiff " +
f"WHERE scenario = {scenario.id} " + f"WHERE scenario = {scenario.id} " +
f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))})" f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))})"
) )
for row in table: if table is not None:
it = iter(row) for row in table:
it = iter(row)
id = next(it) id = next(it)
enabled = (next(it) == 1) enabled = (next(it) == 1)
deleted = (next(it) == 1) deleted = (next(it) == 1)
name = next(it) name = next(it)
description = next(it) description = next(it)
file_name = next(it) file_name = next(it)
file_bytes = next(it) file_bytes = next(it)
coordinates_bottom = next(it) coordinates_bottom = next(it)
coordinates_top = next(it) coordinates_top = next(it)
coordinates_left = next(it) coordinates_left = next(it)
coordinates_right = next(it) coordinates_right = next(it)
owner_scenario = next(it) owner_scenario = next(it)
f = cls( f = cls(
id=id, enabled=enabled, name=name, id=id, enabled=enabled, name=name,
description=description, coordinates={ description=description, coordinates={
"bottom": coordinates_bottom, "bottom": coordinates_bottom,
"top": coordinates_top, "top": coordinates_top,
"left": coordinates_left, "left": coordinates_left,
"right": coordinates_right, "right": coordinates_right,
}, },
status=data['status'], status=data['status'],
owner_scenario=owner_scenario owner_scenario=owner_scenario
) )
if deleted: if deleted:
f.set_as_deleted() f.set_as_deleted()
f._file_bytes = file_bytes f._file_bytes = file_bytes
loaded.add(id) loaded.add(id)
new.append(f) new.append(f)
data["scenario"] = scenario.parent data["scenario"] = scenario.parent
new += cls._db_load(execute, data) new += cls._db_load(execute, data)
@ -287,7 +293,7 @@ class GeoTIFF(SQLSubModel):
self.name, self.name,
self.description, self.description,
self.file_name, self.file_name,
self.file_bytes self.file_bytes,
self.coordinates['bottom'], self.coordinates['bottom'],
self.coordinates['top'], self.coordinates['top'],
self.coordinates['left'], self.coordinates['left'],

View File

@ -20,7 +20,7 @@ from tools import trace, timer
from Model.Except import NotImplementedMethodeError from Model.Except import NotImplementedMethodeError
from Model.Tools.PamhyrListExt import PamhyrModelList from Model.Tools.PamhyrListExt import PamhyrModelList
from Model.AdditionalFile.GeoTIFF import GeoTIFF from Model.GeoTIFF.GeoTIFF import GeoTIFF
class GeoTIFFList(PamhyrModelList): class GeoTIFFList(PamhyrModelList):

View File

@ -59,6 +59,7 @@ from Model.LateralContributionsAdisTS.LateralContributionsAdisTSList \
import LateralContributionsAdisTSList import LateralContributionsAdisTSList
from Model.D90AdisTS.D90AdisTSList import D90AdisTSList from Model.D90AdisTS.D90AdisTSList import D90AdisTSList
from Model.DIFAdisTS.DIFAdisTSList import DIFAdisTSList from Model.DIFAdisTS.DIFAdisTSList import DIFAdisTSList
from Model.GeoTIFF.GeoTIFFList import GeoTIFFList
from Model.Results.Results import Results from Model.Results.Results import Results
logger = logging.getLogger() logger = logging.getLogger()
@ -468,6 +469,7 @@ class River(Graph):
LateralContributionsAdisTSList, LateralContributionsAdisTSList,
D90AdisTSList, D90AdisTSList,
DIFAdisTSList, DIFAdisTSList,
GeoTIFFList,
Results Results
] ]
@ -505,6 +507,8 @@ class River(Graph):
self._D90AdisTS = D90AdisTSList(status=self._status) self._D90AdisTS = D90AdisTSList(status=self._status)
self._DIFAdisTS = DIFAdisTSList(status=self._status) self._DIFAdisTS = DIFAdisTSList(status=self._status)
self._geo_tiff = GeoTIFFList(status=self._status)
self._results = {} self._results = {}
@classmethod @classmethod
@ -617,6 +621,8 @@ class River(Graph):
new._DIFAdisTS = DIFAdisTSList._db_load(execute, data) new._DIFAdisTS = DIFAdisTSList._db_load(execute, data)
new._geo_tiff = GeoTIFFList._db_load(execute, data)
return new return new
def _db_load_results(self, execute, data=None): def _db_load_results(self, execute, data=None):
@ -726,6 +732,7 @@ class River(Graph):
self._BoundaryConditionsAdisTS, self._BoundaryConditionsAdisTS,
self._LateralContributionsAdisTS, self._LateralContributionsAdisTS,
self._D90AdisTS, self._DIFAdisTS, self._D90AdisTS, self._DIFAdisTS,
self._geo_tiff,
] ]
for solver in self._parameters: for solver in self._parameters:

View File

@ -37,7 +37,7 @@ logger = logging.getLogger()
class Study(SQLModel): class Study(SQLModel):
_version = "0.2.2" _version = "0.2.3"
_sub_classes = [ _sub_classes = [
Scenario, Scenario,

View File

@ -1734,11 +1734,11 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
if self._last_solver._type == "mage8": if self._last_solver._type == "mage8":
self.open_solver_results( self.open_solver_results(
solver, # self.last_results solver, # self.last_results
) )
elif self._last_solver._type == "adistswc": elif self._last_solver._type == "adistswc":
self.open_solver_results_adists( self.open_solver_results_adists(
solver, # self.last_results solver, # self.last_results
) )
def open_results_from_file(self): def open_results_from_file(self):