GeoTIFF: Add geotiff to mainwindow tab info and fix bounds at file import.

scenario-dev-pa
Pierre-Antoine 2025-11-14 09:56:46 +01:00
parent 786923bdbf
commit 7f0102a881
3 changed files with 62 additions and 9 deletions

View File

@ -35,6 +35,7 @@ from View.GeoTIFF.UndoCommand import (
SetCommand SetCommand
) )
from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar
from View.Tools.Plot.PamhyrCanvas import MplCanvas from View.Tools.Plot.PamhyrCanvas import MplCanvas
from View.PlotXY import PlotXY from View.PlotXY import PlotXY
@ -87,6 +88,11 @@ class EditGeoTIFFWindow(PamhyrWindow):
self.canvas.setObjectName("canvas") self.canvas.setObjectName("canvas")
self.plot_layout = self.find(QVBoxLayout, self.plot_layout = self.find(QVBoxLayout,
"verticalLayout_geotiff") "verticalLayout_geotiff")
self._toolbar = PamhyrPlotToolbar(
self.canvas, self,
items=["home", "zoom", "save", "iso", "back/forward", "move"]
)
self.plot_layout.addWidget(self._toolbar)
self.plot_layout.addWidget(self.canvas) self.plot_layout.addWidget(self.canvas)
self.plot = PlotXY( self.plot = PlotXY(
@ -124,16 +130,16 @@ class EditGeoTIFFWindow(PamhyrWindow):
def _set_values_from_bounds(self, bounds): def _set_values_from_bounds(self, bounds):
self._values = { self._values = {
"bottom": bounds[0], "bottom": bounds[0],
"top": bounds[2], "top": bounds[1],
"left": bounds[1], "left": bounds[2],
"right": bounds[3], "right": bounds[3],
} }
def _set_default_values_from_bounds(self, bounds): def _set_default_values_from_bounds(self, bounds):
self._values_default = { self._values_default = {
"bottom": bounds[0], "bottom": bounds[0],
"top": bounds[2], "top": bounds[1],
"left": bounds[1], "left": bounds[2],
"right": bounds[3], "right": bounds[3],
} }
@ -180,13 +186,20 @@ class EditGeoTIFFWindow(PamhyrWindow):
with rasterio.open(self._file_name) as data: with rasterio.open(self._file_name) as data:
img = data.read() img = data.read()
b = data.bounds[:] b = data.bounds[:] # left, bottom, right, top
self._set_values_from_bounds(b) if b[2] > b[0] and b[1] < b[3]:
coord = [b[0], b[2], b[1], b[3]]
else:
xlim = self.canvas.axes.get_xlim()
ylim = self.canvas.axes.get_ylim()
coord = xlim + ylim
self._set_values_from_bounds(coord)
self._set_default_values_from_bounds(coord)
else: else:
with memfile.open() as gt: with memfile.open() as gt:
img = gt.read() img = gt.read()
b = gt.bounds[:]
if self._plot_img is not None: if self._plot_img is not None:
self._plot_img.remove() self._plot_img.remove()
@ -197,6 +210,7 @@ class EditGeoTIFFWindow(PamhyrWindow):
) )
self.plot.idle() self.plot.idle()
self._reset_spinboxes()
def _import(self): def _import(self):
options = QFileDialog.Options() options = QFileDialog.Options()

View File

@ -124,8 +124,6 @@ class GeoTIFFListWindow(PamhyrWindow):
extent=list(coords.values()) extent=list(coords.values())
) )
self.plot.idle()
def update(self): def update(self):
self._list.update() self._list.update()

View File

@ -27,6 +27,20 @@ from View.Tools.PamhyrWidget import PamhyrWidget
from PyQt5.QtWidgets import QVBoxLayout from PyQt5.QtWidgets import QVBoxLayout
try:
import rasterio
import rasterio.control
import rasterio.crs
import rasterio.sample
import rasterio.vrt
import rasterio._features
from rasterio.io import MemoryFile
_rasterio_loaded = True
except Exception as e:
print(f"Module 'rasterio' is not available: {e}")
_rasterio_loaded = False
logger = logging.getLogger() logger = logging.getLogger()
@ -90,6 +104,8 @@ class WidgetInfo(PamhyrWidget):
parent=self parent=self
) )
self._plot_img = {}
def update(self): def update(self):
if self._study is None: if self._study is None:
self.set_initial_values() self.set_initial_values()
@ -108,8 +124,33 @@ class WidgetInfo(PamhyrWidget):
toolbar=self._toolbar_xy, toolbar=self._toolbar_xy,
parent=self parent=self
) )
self.draw_all_geotiff()
self.plot.update() self.plot.update()
def draw_all_geotiff(self):
if not _rasterio_loaded:
return
for img in self._plot_img:
self._plot_img[img].remove()
self._plot_img = {}
for geotiff in self._study.river.geotiff.lst:
memfile = geotiff.memfile
if memfile is None:
return
with memfile.open() as gt:
img = gt.read()
coords = geotiff.coordinates
self._plot_img[geotiff] = self.canvas.axes.imshow(
img.transpose((1, 2, 0)),
extent=list(coords.values())
)
def set_network_values(self): def set_network_values(self):
river = self._study.river river = self._study.river