mirror of https://gitlab.com/pamhyr/pamhyr2
GeoTIFF: Continue intergation.
parent
6e52b1681e
commit
5c83d67865
|
|
@ -62,7 +62,15 @@ class GeoTIFF(SQLSubModel):
|
||||||
self._description = description
|
self._description = description
|
||||||
|
|
||||||
self._file_bytes = b''
|
self._file_bytes = b''
|
||||||
self._coordinates = coordinates
|
if coordinates is None:
|
||||||
|
self._coordinates = {
|
||||||
|
"bottom" : 0.0,
|
||||||
|
"top": 0.0,
|
||||||
|
"left": 0.0,
|
||||||
|
"right": 0.0,
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
self._coordinates = coordinates
|
||||||
self._file_name = ""
|
self._file_name = ""
|
||||||
|
|
||||||
if path != "":
|
if path != "":
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,8 @@ class GeoTIFFList(PamhyrModelList):
|
||||||
f"WHERE scenario = {self._status.scenario_id}"
|
f"WHERE scenario = {self._status.scenario_id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
for af in self._lst:
|
for gt in self._lst:
|
||||||
ok &= af._db_save(execute, data)
|
ok &= gt._db_save(execute, data)
|
||||||
|
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,7 @@ from View.Tools.PamhyrWindow import PamhyrWindow
|
||||||
|
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QLabel, QPlainTextEdit, QPushButton,
|
QLabel, QPlainTextEdit, QPushButton,
|
||||||
QCheckBox, QFileDialog,
|
QCheckBox, QFileDialog, QVBoxLayout,
|
||||||
)
|
|
||||||
|
|
||||||
from PyQt5.QtGui import (
|
|
||||||
QPixmap,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
|
|
@ -39,6 +35,23 @@ from View.GeoTIFF.UndoCommand import (
|
||||||
SetCommand
|
SetCommand
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from View.Tools.Plot.PamhyrCanvas import MplCanvas
|
||||||
|
from View.LateralContribution.PlotXY import PlotXY
|
||||||
|
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -65,9 +78,30 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
||||||
|
|
||||||
self._undo = undo
|
self._undo = undo
|
||||||
|
|
||||||
|
self.setup_graph()
|
||||||
self.setup_values()
|
self.setup_values()
|
||||||
self.setup_connection()
|
self.setup_connection()
|
||||||
|
|
||||||
|
def setup_graph(self):
|
||||||
|
self.canvas = MplCanvas(width=5, height=4, dpi=100)
|
||||||
|
self.canvas.setObjectName("canvas")
|
||||||
|
self.plot_layout = self.find(QVBoxLayout, "verticalLayout_geotiff")
|
||||||
|
self.plot_layout.addWidget(self.canvas)
|
||||||
|
|
||||||
|
self.plot = PlotXY(
|
||||||
|
canvas=self.canvas,
|
||||||
|
data=None,
|
||||||
|
trad=self._trad,
|
||||||
|
toolbar=None,
|
||||||
|
parent=self
|
||||||
|
)
|
||||||
|
|
||||||
|
self._plot_img = None
|
||||||
|
|
||||||
|
memfile = self._geotiff.memfile
|
||||||
|
if memfile is not None:
|
||||||
|
self.draw_geotiff(memfile=memfile)
|
||||||
|
|
||||||
def setup_values(self):
|
def setup_values(self):
|
||||||
self.set_check_box("checkBox", self._geotiff.enabled)
|
self.set_check_box("checkBox", self._geotiff.enabled)
|
||||||
self.set_line_edit_text("lineEdit_name", self._geotiff.name)
|
self.set_line_edit_text("lineEdit_name", self._geotiff.name)
|
||||||
|
|
@ -89,6 +123,16 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
||||||
self.set_line_edit_enable("lineEdit_path", False)
|
self.set_line_edit_enable("lineEdit_path", False)
|
||||||
self.set_plaintext_edit_enable("plainTextEdit", False)
|
self.set_plaintext_edit_enable("plainTextEdit", False)
|
||||||
|
|
||||||
|
def _set_values_from_bounds(self, bounds):
|
||||||
|
self._values = {
|
||||||
|
"bottom": bounds[0],
|
||||||
|
"top": bounds[2],
|
||||||
|
"left": bounds[1],
|
||||||
|
"right": bounds[3],
|
||||||
|
}
|
||||||
|
|
||||||
|
self._reset_values()
|
||||||
|
|
||||||
def _reset_values(self):
|
def _reset_values(self):
|
||||||
for key in self._values:
|
for key in self._values:
|
||||||
self._reset_values_key(key)
|
self._reset_values_key(key)
|
||||||
|
|
@ -108,6 +152,34 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
||||||
self.find(QPushButton, f"pushButton_{key}")\
|
self.find(QPushButton, f"pushButton_{key}")\
|
||||||
.clicked.connect(lambda: self._reset_values_key(key))
|
.clicked.connect(lambda: self._reset_values_key(key))
|
||||||
|
|
||||||
|
def draw_geotiff(self, memfile=None):
|
||||||
|
if not _rasterio_loaded:
|
||||||
|
return
|
||||||
|
|
||||||
|
if memfile is None:
|
||||||
|
if self._file_name == "":
|
||||||
|
return
|
||||||
|
|
||||||
|
with rasterio.open(self._file_name) as data:
|
||||||
|
img = data.read()
|
||||||
|
b = data.bounds[:]
|
||||||
|
else:
|
||||||
|
with memfile.open() as gt:
|
||||||
|
img = gt.read()
|
||||||
|
b = gt.bounds[:]
|
||||||
|
|
||||||
|
if self._plot_img is not None:
|
||||||
|
self._plot_img.remove()
|
||||||
|
|
||||||
|
self._set_values_from_bounds(b)
|
||||||
|
|
||||||
|
self._plot_img = self.canvas.axes.imshow(
|
||||||
|
img.transpose((1, 2, 0)),
|
||||||
|
extent=[b[0], b[2], b[1], b[3]]
|
||||||
|
)
|
||||||
|
|
||||||
|
self.plot.idle()
|
||||||
|
|
||||||
def _import(self):
|
def _import(self):
|
||||||
options = QFileDialog.Options()
|
options = QFileDialog.Options()
|
||||||
settings = QSettings(QSettings.IniFormat,
|
settings = QSettings(QSettings.IniFormat,
|
||||||
|
|
@ -129,16 +201,13 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
||||||
|
|
||||||
if filename != "":
|
if filename != "":
|
||||||
self._file_name = filename
|
self._file_name = filename
|
||||||
|
self. draw_geotiff()
|
||||||
pixmap = QPixmap(filename)
|
|
||||||
self.find(QLabel, "label_geotiff")\
|
|
||||||
.setPixmap(pixmap)
|
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
if self._study.is_editable():
|
if self._study.is_editable():
|
||||||
is_enabled = self.get_check_box("checkBox")
|
is_enabled = self.get_check_box("checkBox")
|
||||||
name = self.get_line_edit_text("lineEdit_name")
|
name = self.get_line_edit_text("lineEdit_name")
|
||||||
path = self.get_line_edit_text("lineEdit_path")
|
description = self.get_line_edit_text("lineEdit_description")
|
||||||
|
|
||||||
coord_bottom = self.get_double_spin_box("doubleSpinBox_bottom")
|
coord_bottom = self.get_double_spin_box("doubleSpinBox_bottom")
|
||||||
coord_top = self.get_double_spin_box("doubleSpinBox_top")
|
coord_top = self.get_double_spin_box("doubleSpinBox_top")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue