Skip to content

Commit

Permalink
Import - MAJIC: détection automatique des fichiers dans le répertoire
Browse files Browse the repository at this point in the history
  • Loading branch information
mdouchin committed Jan 24, 2025
1 parent 9a559ce commit 7601616
Show file tree
Hide file tree
Showing 9 changed files with 360 additions and 189 deletions.
321 changes: 203 additions & 118 deletions cadastre/cadastre_import.py

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions cadastre/definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,17 @@
)

URL_DOCUMENTATION = "https://docs.3liz.org/QgisCadastrePlugin/"

REGEX_BATI = "BATI"
REGEX_FANTOIR = "FANTOIR|FANR"
REGEX_LOTLOCAL = "LLOC|D166"
REGEX_NBATI = "NBAT"
REGEX_PDL = "PDL"
REGEX_PROP = "PROP"

IMPORT_MEMORY_ERROR_MESSAGE = "<b>ERREUR : Mémoire</b></br>"
"Veuillez recommencer l'import en baissant la valeur du "
"paramètre <b>'Taille maximum des requêtes INSERT'</b> selon la "
"documentation : {}/extension-qgis/configuration/#performances</br>".format(
URL_DOCUMENTATION
)
2 changes: 1 addition & 1 deletion cadastre/dialogs/dialog_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ def check_database_for_existing_structure(self):
self.dialog.hasMajicData = has_majic_data
self.dialog.hasMajicDataParcelle = has_majic_data_parcelle
self.dialog.hasMajicDataProp = has_majic_data_prop
self.dialog.hasMajicData = has_majic_data_voie
self.dialog.hasMajicDataVoie = has_majic_data_voie

def checkDatabaseForExistingTable(self, tableName, schemaName=''):
"""
Expand Down
5 changes: 4 additions & 1 deletion cadastre/dialogs/import_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,13 @@ def chooseDataPath(self, key):
Ask the user to select a folder
and write down the path to appropriate field
"""
root_directory = str(self.pathSelectors[key]['input'].text()).strip(' \t')
if not root_directory:
root_directory = os.path.expanduser("~")
ipath = QFileDialog.getExistingDirectory(
None,
"Choisir le répertoire contenant les fichiers",
str(self.pathSelectors[key]['input'].text().encode('utf-8')).strip(' \t')
root_directory
)
if os.path.exists(str(ipath)):
self.pathSelectors[key]['input'].setText(str(ipath))
Expand Down
58 changes: 33 additions & 25 deletions cadastre/dialogs/options_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@
from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtWidgets import QDialog, QFileDialog, QMessageBox

from cadastre.definitions import (
REGEX_BATI,
REGEX_FANTOIR,
REGEX_LOTLOCAL,
REGEX_NBATI,
REGEX_PDL,
REGEX_PROP,
)
from cadastre.tools import set_window_title

OPTION_FORM_CLASS, _ = uic.loadUiType(
Expand Down Expand Up @@ -109,30 +117,30 @@ def getValuesFromSettings(self):
from settings and set corresponding inputs
"""
s = QgsSettings()
batiFileName = s.value("cadastre/batiFileName", 'REVBATI.800', type=str)
if batiFileName:
self.inMajicBati.setText(batiFileName)
fantoirFileName = s.value("cadastre/fantoirFileName", 'TOPFANR.800', type=str)
if fantoirFileName:
self.inMajicFantoir.setText(fantoirFileName)
lotlocalFileName = s.value("cadastre/lotlocalFileName", 'REVD166.800', type=str)
if lotlocalFileName:
self.inMajicLotlocal.setText(lotlocalFileName)
nbatiFileName = s.value("cadastre/nbatiFileName", 'REVNBAT.800', type=str)
if nbatiFileName:
self.inMajicNbati.setText(nbatiFileName)
pdlFileName = s.value("cadastre/pdlFileName", 'REVFPDL.800', type=str)
if pdlFileName:
self.inMajicPdl.setText(pdlFileName)
propFileName = s.value("cadastre/propFileName", 'REVPROP.800', type=str)
if propFileName:
self.inMajicProp.setText(propFileName)
regexBati = s.value("cadastre/regexBati", REGEX_BATI, type=str)
if regexBati:
self.inMajicBati.setText(regexBati)
regexFantoir = s.value("cadastre/regexFantoir", REGEX_FANTOIR, type=str)
if regexFantoir:
self.inMajicFantoir.setText(regexFantoir)
regexLotLocal = s.value("cadastre/regexLotLocal", REGEX_LOTLOCAL, type=str)
if regexLotLocal:
self.inMajicLotlocal.setText(regexLotLocal)
regexNbati = s.value("cadastre/regexNbati", REGEX_NBATI, type=str)
if regexNbati:
self.inMajicNbati.setText(regexNbati)
regexPdl = s.value("cadastre/regexPdl", REGEX_PDL, type=str)
if regexPdl:
self.inMajicPdl.setText(regexPdl)
regexProp = s.value("cadastre/regexProp", REGEX_PROP, type=str)
if regexProp:
self.inMajicProp.setText(regexProp)
tempDir = s.value("cadastre/tempDir", type=str)
if tempDir and Path(tempDir).exists():
self.inTempDir.setText(tempDir)
else:
self.inTempDir.setText(tempfile.gettempdir())
maxInsertRows = s.value("cadastre/maxInsertRows", 100000, type=int)
maxInsertRows = s.value("cadastre/maxInsertRows", 50000, type=int)
if maxInsertRows:
self.inMaxInsertRows.setValue(maxInsertRows)
spatialiteTempStore = s.value("cadastre/spatialiteTempStore", 'MEMORY', type=str)
Expand Down Expand Up @@ -183,12 +191,12 @@ def onAccept(self):

# Save Majic file names
s = QgsSettings()
s.setValue("cadastre/batiFileName", self.inMajicBati.text().strip(' \t\n\r'))
s.setValue("cadastre/fantoirFileName", self.inMajicFantoir.text().strip(' \t\n\r'))
s.setValue("cadastre/lotlocalFileName", self.inMajicLotlocal.text().strip(' \t\n\r'))
s.setValue("cadastre/nbatiFileName", self.inMajicNbati.text().strip(' \t\n\r'))
s.setValue("cadastre/pdlFileName", self.inMajicPdl.text().strip(' \t\n\r'))
s.setValue("cadastre/propFileName", self.inMajicProp.text().strip(' \t\n\r'))
s.setValue("cadastre/regexBati", self.inMajicBati.text().strip(' \t\n\r'))
s.setValue("cadastre/regexFantoir", self.inMajicFantoir.text().strip(' \t\n\r'))
s.setValue("cadastre/regexLotLocal", self.inMajicLotlocal.text().strip(' \t\n\r'))
s.setValue("cadastre/regexNbati", self.inMajicNbati.text().strip(' \t\n\r'))
s.setValue("cadastre/regexPdl", self.inMajicPdl.text().strip(' \t\n\r'))
s.setValue("cadastre/regexProp", self.inMajicProp.text().strip(' \t\n\r'))

# Save temp dir
s.setValue("cadastre/tempDir", self.inTempDir.text().strip(' \t\n\r'))
Expand Down
11 changes: 6 additions & 5 deletions cadastre/forms/cadastre_import_form.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>720</width>
<height>694</height>
<height>883</height>
</rect>
</property>
<property name="windowTitle">
Expand All @@ -24,8 +24,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>686</width>
<height>691</height>
<width>700</width>
<height>830</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
Expand Down Expand Up @@ -449,8 +449,8 @@
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu Sans'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu';&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="acceptRichText">
<bool>true</bool>
Expand Down Expand Up @@ -493,5 +493,6 @@ p, li { white-space: pre-wrap; }
<header>qgis.gui</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
113 changes: 81 additions & 32 deletions cadastre/forms/cadastre_option_form.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>543</width>
<height>663</height>
<height>825</height>
</rect>
</property>
<property name="windowTitle">
Expand All @@ -25,7 +25,7 @@
<x>0</x>
<y>0</y>
<width>523</width>
<height>643</height>
<height>805</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
Expand Down Expand Up @@ -69,25 +69,88 @@
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Nom des fichiers MAJIC</string>
<string>Mot-clés pour trouver les fichiers MAJIC</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>Cette configuration permet de définir comment le plugin trouve les fichiers dans le répertoire MAJIC, en fonction de chaque type de fichier. Un simple mot ou une expression régulière peuvent être utilisés.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="5" column="2">
<widget class="QLineEdit" name="inMajicProp">
<property name="text">
<string>PROP</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>PDL</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>TOPO</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>BATI</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="inMajicBati"/>
<item row="0" column="2">
<widget class="QLineEdit" name="inMajicBati">
<property name="text">
<string>BATI</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<item row="4" column="2">
<widget class="QLineEdit" name="inMajicPdl">
<property name="text">
<string>FANTOIR</string>
<string>PDL</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>PROP</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLineEdit" name="inMajicNbati">
<property name="text">
<string>NBAT</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLineEdit" name="inMajicLotlocal">
<property name="text">
<string>LLOC|D166</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLineEdit" name="lineEdit">
<property name="text">
<string>TOPO</string>
</property>
</widget>
</item>
Expand All @@ -98,42 +161,27 @@
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="inMajicProp"/>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="inMajicLotlocal"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>LOTLOCAL</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="inMajicFantoir"/>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="inMajicNbati"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_5">
<item row="7" column="2">
<widget class="QLineEdit" name="inMajicFantoir">
<property name="text">
<string>PROP</string>
<string>FANTOIR|FANR</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<item row="7" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>PDL</string>
<string>FANTOIR</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="inMajicPdl"/>
</item>
</layout>
</item>
</layout>
Expand Down Expand Up @@ -196,7 +244,7 @@
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Taille maximum des requêtes INSERT</string>
<string>Nombre de lignes MAJIC insérées par lot</string>
</property>
</widget>
</item>
Expand Down Expand Up @@ -257,18 +305,19 @@
<tabstop>btInterfaceCadastre</tabstop>
<tabstop>btInterfaceQgis</tabstop>
<tabstop>inMajicBati</tabstop>
<tabstop>inMajicFantoir</tabstop>
<tabstop>inMajicLotlocal</tabstop>
<tabstop>inMajicNbati</tabstop>
<tabstop>inMajicPdl</tabstop>
<tabstop>inMajicProp</tabstop>
<tabstop>lineEdit</tabstop>
<tabstop>inMajicFantoir</tabstop>
<tabstop>inComposerTemplateFile</tabstop>
<tabstop>btComposerTemplateFile</tabstop>
<tabstop>inTempDir</tabstop>
<tabstop>btTempDir</tabstop>
<tabstop>inMaxInsertRows</tabstop>
<tabstop>inSpatialiteTempStore</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>
25 changes: 18 additions & 7 deletions docs/extension-qgis/configuration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Configuration

Avant d'importer les premières données cadastrales dans la base de données, il faut au préalable configurer
Avant d'importer les premières données cadastrales dans la base de données, vous pouvez si vous le souhaitez configurer
l'extension :

* Menu **Cadastre ➡ Configurer le plugin** ou l'icône **outils** de la barre d'outil Cadastre.
Expand All @@ -16,15 +16,26 @@ interface simplifiée adaptée à une utilisation de consultation du Cadastre.
fonctionnalité lorsque ce sera possible. En attendant, il faut donc le faire manuellement, comme expliqué dans
la fenêtre d'aide.

## Nom des fichiers MAJIC
## Mots-clés pour trouver les fichiers MAJIC

Cette partie permet de spécifier comment sont appelés les fichiers MAJIC sur votre poste de travail.
Cette partie permet de spécifier **comment sont recherchés les fichiers MAJIC** sur votre poste de travail
dans le répertoire que vous choisissez dans l'outil d'import.

En effet, les conventions de nommage peuvent changer d'un département à l'autre. Souvent, les fichiers se
terminent par une extension relative au département et à la direction, par exemple `.800` pour les fichiers
du département de la Somme.
Pour chaque type de fichier (propriétés bâties, non bâties, propriétaires, etc.), un mot-clé,
ou une liste de mots-clés séparés par `|` permettent de trouver les fichiers s'ils respectent
les conventions classiques de nommage.

**Il est important de bien configurer ces noms de fichiers avant votre premier import.**
Par exemple, les fichiers contenant les propriétaires peuvent s'appeller
`REVPROP.txt` ou `ART.DC21.W19132.PROP.A2019.N000688`. Dans ce cas,
il seront bien trouvés par le mot-clé `PROP`.

A noter :

* la recherche est **insensible à la casse**;
* les mots-clés sont en fait des **expressions régulières**. Par exemple `LLOC|D166`, qui permet
de trouver les fichiers des locaux, trouve les fichiers contenant `LLOC` ou `D166`.

**Le plugin propose les mots-clés les plus courants. Vous pouvez les modifier si vos fichiers sont nommés différemment.**

Si l'extension ne trouve pas les fichiers MAJIC pendant l'import, alors que vous aviez spécifié le bon
répertoire d'import, un message vous avertira et vous proposera d'annuler l'import.
Expand Down
Binary file modified docs/media/cadastre_option_dialog.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7601616

Please sign in to comment.