Forráskód Böngészése

add basic structure for mn3_apd

omassot 6 éve
szülő
commit
1c6955c79d
3 módosított fájl, 124 hozzáadás és 3 törlés
  1. 1 1
      metadata.txt
  2. 2 2
      schemas/mn2_rec.py
  3. 121 0
      schemas/mn3_apd.py

+ 1 - 1
metadata.txt

@@ -3,7 +3,7 @@
 name = MnCheck
 qgisminimumversion = 3.4
 description = Contrôle des données FTTH format MN
-version = 0.8.4
+version = 0.9.0
 author = Manche Numérique 2019
 email = sig@manchenumerique.fr
 about = Auto-contrôle des livrables FTTH aux formats Manche Numérique

+ 2 - 2
schemas/mn2_rec.py

@@ -11,7 +11,7 @@ from qgis.core import QgsProject
 from core.cerberus_ import is_float, is_multi_int, is_int, \
     is_modern_french_date, CerberusValidator, CerberusErrorHandler, \
     _translate_messages, is_positive_int, is_strictly_positive_float, \
-    is_positive_float, is_strictly_positive_int
+    is_positive_float, is_strictly_positive_int, _tofloat
 from core.checking import BaseChecker, CheckingException
 from core.mncheck import QgsModel
 
@@ -648,7 +648,7 @@ class Mn2Checker(BaseChecker):
                 
             if equipement.EQ_TYPE == "PBO" and equipement.noeud.NO_TYPE_PH == "POTEAU":
                 try:
-                    if not 2.4 <= float(equipement.EQ_HAUT) <= 4.0:
+                    if not 2.4 <= _tofloat(equipement.EQ_HAUT) <= 4.0:
                         self.log_error("PBO sur poteau: La hauteur doit être comprise entre 2.40m et 4.00m", item=equipement)
                 except (TypeError, ValueError):
                     self.log_error("PBO sur poteau: Hauteur manquante ou invalide", item=equipement)

+ 121 - 0
schemas/mn3_apd.py

@@ -0,0 +1,121 @@
+'''
+
+    Schéma de validation des données MN2
+
+@author: olivier.massot, 2018
+'''
+
+import logging
+from qgis.core import QgsProject
+
+from core.cerberus_ import is_positive_int, is_positive_float
+from core.checking import BaseChecker
+from core.mncheck import QgsModel
+
+
+logger = logging.getLogger("mncheck")
+
+SCHEMA_NAME = "Schéma MN v3 APD"
+
+XMIN, XMAX, YMIN, YMAX = 1341999, 1429750, 8147750, 8294000
+CRS = 'EPSG:3949' # Coordinate Reference System
+
+TOLERANCE = 0.5
+
+STATUTS = ['ETUDE PRELIMINAIRE', 'ETUDE DE DIAGNOSTIC', 'AVANT-PROJET PROJET', 'PROJET', 'PASSATION DES MARCHES DE TRAVAUX', 
+           'ETUDE D EXECUTION', 'TRAVAUX' , 'RECOLEMENT', 'MAINTIEN EN CONDITIONS OPERATIONNELLES']
+
+##### Modeles
+    
+class SiteTelecom(QgsModel):
+    layername = "SITE_TELECOM"
+    geom_type = QgsModel.GEOM_POINT
+    bounding_box = (XMIN,YMIN,XMAX,YMAX)
+    pk = "ST_CODE"
+    schema = {'ST_CODE': {'type': 'string', 'empty': False}, 
+            'ST_NOM': {'type': 'string', 'empty': False}, 
+            'ST_TYPFCT': {'type': 'string', 'empty': False, 'allowed': ['SITE HEBERGEMENT', 
+                                                                        'NOEUD RACCORDEMENT OPTIQUE', 
+                                                                        'SOUS-REPARTITEUR OPTIQUE', 
+                                                                        'SOUS-REPARTITEUR OPTIQUE COLOCALISE', 
+                                                                        'NOEUD RACCORDEMENT D ABONNES', 
+                                                                        'NOEUD RACCORDEMENT D ABONNES - HAUT DEBIT', 
+                                                                        'NOEUD RACCORDEMENT D ABONNES - MONTEE EN DEBIT']}, 
+            'ST_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]}, 
+            'ST_NBPRISE': {'empty': False, 'validator': is_positive_int}
+            }
+
+class SiteClient(QgsModel):
+    layername = "SITE_CLIENT"
+    geom_type = QgsModel.GEOM_POINT
+    bounding_box = (XMIN,YMIN,XMAX,YMAX)
+    schema = {'SC_TYPFON': {'type': 'string', 'empty': False, 'allowed': ['RESIDENTIEL', 'PROFESSIONNEL', 'OPERATEUR', 'TECHNIQUE']},
+              'SC_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]}, 
+              'SC_NBPRISE': {'empty': False, 'validator': is_positive_int}, 
+              'SC_NBPRHAB': {'empty': False, 'validator': is_positive_int}, 
+              'SC_NBPRPRO': {'empty': False, 'validator': is_positive_int}, 
+              'SC_ID_SITE': {'type': 'string', 'empty': False}, 
+              'SC_NUM_RUE': {'type': 'string', 'empty': False}, 
+              'SC_REPET': {'type': 'string', 'empty': False}, 
+              'SC_DNUBAT': {'type': 'string', 'empty': False}, 
+              'SC_DESC': {'type': 'string', 'empty': False}, 
+              'SC_NOM_RUE': {'type': 'string', 'empty': False}, 
+              'SC_NOM_COM': {'type': 'string', 'empty': False}, 
+              'SC_ETAT': {'type': 'string', 'empty': False, 'allowed': ['VALIDE', 'OBSOLETE', 'NOUVEAU', 'FUTUR']},
+              'SC_ATT_PTO': {'empty': False, 'validator': is_positive_float}
+              }
+
+class Cable(QgsModel):
+    layername = "CABLE"
+    geom_type = QgsModel.GEOM_LINE
+    bounding_box = (XMIN,YMIN,XMAX,YMAX)
+    schema = {'CA_TYPFON': {'type': 'string', 'empty': False, 'allowed': ['COLLECTE TRANSPORT DISTRIBUTION', 'COLLECTE', 'COLLECTE TRANSPORT', 'COLLECTE DISTRIBUTION', 'TRANSPORT DISTRIBUTION', 'TRANSPORT', 'DISTRIBUTION', 'RACCORDEMENT FINAL', 'BOUCLE METROPOLITAINE', 'LONGUE DISTANCE (LONG HAUL)', 'NON COMMUNIQUE']},
+              'CA_TYPSTR': {'type': 'string', 'empty': False, 'allowed': ['CONDUITE', 'AERIEN', 'COLONNE MONTANTE', 'IMMERGE', 'FACADE']},
+              'CA_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]},
+              'CA_CAPFO': {'empty': False, 'validator': is_positive_int},
+              'CA_MODULO': {'empty': False, 'validator': is_positive_int},
+              'CA_SUPPORT': {'type': 'string', 'empty': False, 'allowed': ['0', '1']}
+              }
+    
+class Zapbo(QgsModel):
+    layername = "ZAPBO"
+    geom_type = QgsModel.GEOM_POLYGON
+    bounding_box = (XMIN,YMIN,XMAX,YMAX)
+    schema = {'ZP_NBPRISE': {'empty': False, 'validator': is_positive_int},
+              'ZP_ISOLE': {'type': 'string', 'empty': False, 'allowed': ['0', '1']},
+              'ZP_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]}
+              }
+    
+    
+class Zasro(QgsModel):
+    layername = "ZASRO"
+    geom_type = QgsModel.GEOM_POLYGON
+    bounding_box = (XMIN,YMIN,XMAX,YMAX)
+    schema = {'ZS_CODE': {'type': 'string', 'empty': False},
+              'ZS_NBPRISE': {'empty': False, 'validator': is_positive_int}
+              }
+    
+class Adduction(QgsModel):
+    layername = "ADDUCTION"
+    geom_type = QgsModel.GEOM_LINE
+    bounding_box = (XMIN,YMIN,XMAX,YMAX)
+    schema = {'AD_ISOLE': {'type': 'string', 'empty': False, 'allowed': ['0', '1']},
+              'AD_LONG': {'empty': False, 'validator': is_positive_float}
+              }
+models = []
+    
+####### Validateur
+
+
+class Mn3ApdChecker(BaseChecker):
+            
+    def setUp(self):
+        
+        self.dataset = {}
+        for model in models:
+            model.layer = next((l for l in QgsProject.instance().mapLayers().values() \
+                          if l.name().lower() == model.layername.lower()), None)
+            self.dataset[model] = [model(f) for f in model.layer.getFeatures()] if model.layer else []
+        
+        
+checkers = [Mn3ApdChecker]