Skip to content

Commit 4b06337

Browse files
authored
Merge pull request #970 from opengisch/multigeom
Concern multiple geometries per GeoPackage Table Frontend
2 parents d26fba0 + d2c9124 commit 4b06337

File tree

5 files changed

+334
-156
lines changed

5 files changed

+334
-156
lines changed

QgisModelBaker/gui/ili2db_options.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
* *
1717
***************************************************************************/
1818
"""
19+
from osgeo import gdal
20+
from qgis.core import Qgis
1921
from qgis.gui import QgsGui, QgsMessageBar
2022
from qgis.PyQt.QtCore import QSettings, Qt
2123
from qgis.PyQt.QtGui import QValidator
@@ -137,6 +139,21 @@ def __init__(self, parent=None, remove_create_tid_group=True):
137139

138140
self.create_import_tid_groupbox.setHidden(remove_create_tid_group)
139141

142+
# on gdal versions that dont support multiple geometries per table it's disabled
143+
if int(gdal.VersionInfo("VERSION_NUM")) < 3080000:
144+
self.create_gpkg_multigeom_groupbox.setHidden(True)
145+
else:
146+
self.create_gpkg_multigeom_groupbox.setHidden(False)
147+
self.create_gpkg_multigeom_checkbox.setToolTip(
148+
"""<html><head/><body>
149+
<p>If the INTERLIS model has classes that contain <span style=" font-weight:600;">multiple geometries</span>, tables with multiple geometry columns can be created in <span style=" font-weight:600;">GeoPackage</span>.</p>
150+
<p>This function is not standardized and such tables with multiple geometries require <span style=" font-weight:600;">GDAL version &gt;= 3.8</span> to run in QGIS (yours is <span style=" font-weight:600;">{gdal_version}</span>, but note that others with lower 3.8 versions <span style=" font-weight:600;">will not be able </span>to read such tables in the created QGIS project.)</p>
151+
</body></html>""".format(
152+
qgis_version=Qgis.QGIS_VERSION,
153+
gdal_version=gdal.VersionInfo("RELEASE_NAME"),
154+
)
155+
)
156+
140157
self.bar = QgsMessageBar()
141158
self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
142159
self.layout().addWidget(self.bar, 0, 0, Qt.AlignTop)
@@ -177,6 +194,9 @@ def create_import_tid(self):
177194
def create_basket_col(self):
178195
return self.create_basket_col_checkbox.isChecked()
179196

197+
def create_gpkg_multigeom(self):
198+
return self.create_gpkg_multigeom_checkbox.isChecked()
199+
180200
def inheritance_type(self):
181201
if self.smart1_radio_button.isChecked():
182202
return "smart1"
@@ -215,6 +235,9 @@ def save_configuration(self):
215235
settings.setValue(
216236
"QgisModelBaker/ili2db/create_import_tid", self.create_import_tid()
217237
)
238+
settings.setValue(
239+
"QgisModelBaker/ili2db/create_gpkg_multigeom", self.create_gpkg_multigeom()
240+
)
218241
settings.setValue("QgisModelBaker/ili2db/stroke_arcs", self.stroke_arcs())
219242

220243
def restore_configuration(self):
@@ -230,12 +253,21 @@ def restore_configuration(self):
230253
create_import_tid = settings.value(
231254
"QgisModelBaker/ili2db/create_import_tid", defaultValue=True, type=bool
232255
)
256+
create_gpkg_multigeom = settings.value(
257+
"QgisModelBaker/ili2db/create_gpkg_multigeom",
258+
defaultValue=True,
259+
type=bool,
260+
)
233261
stroke_arcs = settings.value(
234262
"QgisModelBaker/ili2db/stroke_arcs", defaultValue=True, type=bool
235263
)
236264

237265
self.create_basket_col_checkbox.setChecked(create_basket_col)
238266
self.create_import_tid_checkbox.setChecked(create_import_tid)
267+
if int(gdal.VersionInfo("VERSION_NUM")) >= 3080000:
268+
self.create_gpkg_multigeom_checkbox.setChecked(create_gpkg_multigeom)
269+
else:
270+
self.create_gpkg_multigeom_checkbox.setChecked(False)
239271
self.stroke_arcs_checkbox.setChecked(stroke_arcs)
240272
self.toml_file_line_edit.setText(settings.value(self.toml_file_key))
241273

@@ -258,6 +290,10 @@ def load_metaconfig(self, metaconfig_ili2db):
258290
self.create_import_tid_checkbox.setChecked(
259291
self.current_metaconfig_ili2db.getboolean("importTid")
260292
)
293+
if "gpkgMultiGeomPerTable" in self.current_metaconfig_ili2db:
294+
self.create_gpkg_multigeom.setChecked(
295+
self.current_metaconfig_ili2db.getboolean("gpkgMultiGeomPerTable")
296+
)
261297
if "strokeArcs" in self.current_metaconfig_ili2db:
262298
self.stroke_arcs_checkbox.setChecked(
263299
self.current_metaconfig_ili2db.getboolean("strokeArcs")
@@ -333,6 +369,18 @@ def _restyle_concerning_metaconfig(self):
333369
self.create_import_tid_checkbox.setStyleSheet(
334370
f"color:{self.COLOR_WARNING}"
335371
)
372+
if "gpkgMultiGeomPerTable" in self.current_metaconfig_ili2db:
373+
if (
374+
self.current_metaconfig_ili2db.getboolean("gpkgMultiGeomPerTable")
375+
== self.create_gpkg_multigeom_checkbox.isChecked()
376+
):
377+
self.create_gpkg_multigeom_checkbox.setStyleSheet(
378+
f"color:{self.COLOR_TOPPING}"
379+
)
380+
else:
381+
self.create_gpkg_multigeom_checkbox.setStyleSheet(
382+
f"color:{self.COLOR_WARNING}"
383+
)
336384
if "strokeArcs" in self.current_metaconfig_ili2db:
337385
if (
338386
self.current_metaconfig_ili2db.getboolean("strokeArcs")

QgisModelBaker/gui/workflow_wizard/import_schema_configuration_page.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ def update_configuration(self, configuration):
136136
configuration.inheritance = self.ili2db_options.inheritance_type()
137137
configuration.create_basket_col = self.ili2db_options.create_basket_col()
138138
configuration.create_import_tid = self.ili2db_options.create_import_tid()
139+
configuration.create_gpkg_multigeom = (
140+
self.ili2db_options.create_gpkg_multigeom()
141+
)
139142
configuration.stroke_arcs = self.ili2db_options.stroke_arcs()
140143
configuration.pre_script = self.ili2db_options.pre_script()
141144
configuration.post_script = self.ili2db_options.post_script()

QgisModelBaker/gui/workflow_wizard/project_creation_page.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import re
2323

2424
import yaml
25+
from osgeo import gdal
2526
from qgis.core import Qgis, QgsApplication, QgsProject
2627
from qgis.PyQt.QtCore import Qt
2728
from qgis.PyQt.QtWidgets import QCompleter, QWizardPage
@@ -95,6 +96,7 @@ def __init__(self, parent, title):
9596
self.fileValidator = gui_utils.FileValidator(
9697
pattern=["*." + ext for ext in self.ValidExtensions], allow_empty=False
9798
)
99+
self.gpkg_multigeometry_frame.setVisible(False)
98100

99101
def isComplete(self):
100102
return self.is_complete
@@ -130,6 +132,8 @@ def restore_configuration(self, configuration):
130132
else:
131133
self._use_existing(False)
132134

135+
self.gpkg_multigeometry_frame.setVisible(self._multigeom_gpkg())
136+
133137
self.workflow_wizard.busy(self, False)
134138

135139
def _use_existing(self, state):
@@ -735,6 +739,44 @@ def _inheritance(self):
735739
if setting_record["tag"] == "ch.ehi.ili2db.inheritanceTrafo":
736740
return setting_record["setting"]
737741

742+
def _multigeom_gpkg(self):
743+
# this concerns only geopackage
744+
if not (self.workflow_wizard.import_schema_configuration.tool & DbIliMode.gpkg):
745+
return False
746+
747+
# and when this geopackage has multiple geometry columns in a table
748+
if len(self.db_connector.multiple_geometry_tables()) == 0:
749+
return False
750+
751+
if int(gdal.VersionInfo("VERSION_NUM")) < 3080000:
752+
self.gpkg_multigeometry_label.setText(
753+
"""
754+
<html><head/><body style="background-color:powderblue;">
755+
<p><b>This GeoPackage contains at least one table with multiple geometries</b></p>
756+
<p>These tables require <span style=" font-weight:600;">GDAL version &gt;= 3.8</span> to run in QGIS, yours is <span style=" font-weight:600;">{gdal_version}</span>.</p>
757+
<p>Means this won't work.</p>
758+
</body></html>
759+
""".format(
760+
qgis_version=Qgis.QGIS_VERSION,
761+
gdal_version=gdal.VersionInfo("RELEASE_NAME"),
762+
)
763+
)
764+
self.create_project_button.setDisabled(True)
765+
else:
766+
self.gpkg_multigeometry_label.setText(
767+
"""
768+
<html><head/><body style="background-color:powderblue;">
769+
<p><b>This GeoPackage contains at least one table with multiple geometries</b></p>
770+
<p>These tables require <span style=" font-weight:600;">GDAL version &gt;= 3.8</span> to run in QGIS, yours is <span style=" font-weight:600;">{gdal_version}</span>.</p>
771+
<p>But note that others with lower 3.8 version <span style=" font-weight:600;">will not be able</span> to read such tables in the created QGIS project.</p>
772+
</body></html>
773+
""".format(
774+
qgis_version=Qgis.QGIS_VERSION,
775+
gdal_version=gdal.VersionInfo("RELEASE_NAME"),
776+
)
777+
)
778+
return True
779+
738780
def help_text(self):
739781
logline = self.tr(
740782
"Most of the time you won't need to change anything here.<br />Just press Generate :-)"

0 commit comments

Comments
 (0)