def updateField():
    maCouche = iface.activeLayer()
    vYear = u"year_end"
    vStatus = u"fk_status"
    for feature in maCouche.getFeatures(QgsFeatureRequest(int([%$id%]))):
        msgBox = QtGui.QMessageBox()
        if feature[vStatus] == 13002:
            text_arch = u"L'objet ID = [%$id%] de la couche '" + str(maCouche.name()) + u"' a déjà été archivé en " + str(feature[vYear])
            msgBox.setText(text_arch)
            msgBox.exec_()
        if feature[vStatus] != 13002:
            input_rep = QtGui.QInputDialog()
            year_end, ok = input_rep.getInt(None, u"Annee d'archivage ", u"indiquez l'ann\xe9e d'archive (4 chiffres)", datetime.now().year, 1800,2999, 1)
            if ok:
                if not maCouche.isEditable():
                    maCouche.startEditing()
                feature[vStatus] = 13002
                feature[vYear] = year_end
                if iface.openFeatureForm(maCouche, feature):
                    maCouche.updateFeature(feature)
                    text = u"L'objet ID = [%$id%] de la couche '" + str(maCouche.name()) + u"' \xe9t\xe9 archiv\xe9 en " + str(year_end)
                    msgBox.setText(text)
                    msgBox.exec_()
                else:
                    pass
            else:
                pass
        else:
            pass
Example #2
0
def updateField():
    maCouche = iface.activeLayer()
    layerName =  maCouche.name()
    formTitle = layerName +u" - Attributs d'entités"

    for w in iface.mainWindow().findChildren(QDialog):
        if w.windowTitle() == formTitle and w.isActiveWindow():
            w.reject()

    vYear = u"year_end"
    vStatus = u"fk_status"
    for feature in maCouche.getFeatures(QgsFeatureRequest(int(featureId))):
        msgBox = QtGui.QMessageBox()
        if feature[vStatus] == 13002:
            text_arch = u"L'objet ID =" + str(featureId) + u" de la couche '" + str(maCouche.name()) + u"' a déjà été archivé en " + str(feature[vYear])
            msgBox.setText(text_arch)
            msgBox.exec_()
        if feature[vStatus] != 13002:
            input_rep = QtGui.QInputDialog()
            year_end, ok = input_rep.getInt(None, u"Annee d'archivage ", u"indiquez l'ann\xe9e d'archive (4 chiffres)", datetime.now().year, 1800,2999, 1)
            if ok:
                if not maCouche.isEditable():
                    maCouche.startEditing()
                feature[vStatus] = 13002
                feature[vYear] = year_end
                if iface.openFeatureForm(maCouche, feature):
                    maCouche.updateFeature(feature)
                    text = u"L'objet ID = "+ str(featureId) + u" de la couche '" + str(maCouche.name()) + u"' \xe9t\xe9 archiv\xe9 en " + str(year_end)
                    msgBox.setText(text)
                    msgBox.exec_()
                else:
                    pass
            else:
                pass
        else:
            pass
Example #3
0
def repriseInfoSurvey():

    maCouche = iface.activeLayer()
    layerName = maCouche.name()
    registry = QgsMapLayerRegistry.instance()
    formTitle = layerName + u" - Attributs d'entités"

    for w in iface.mainWindow().findChildren(QDialog):
        if w.windowTitle() == formTitle and w.isActiveWindow():
            w.reject()

    vStatus = u"fk_status"
    vSisol = u"usr_cale_sisol"
    vPrecision = u"fk_precision"
    vAltitude = u"altitude"
    vPrecisionalti = u"fk_precisionalti"
    vZsurvey = u"Coord Z [m]"
    vZobj = u"z"
    text = u""
    layerSurvey = next((l for l in registry.mapLayers().values()
                        if l.id() == 'surveypoint20160902155615289'), None)

    for feature in maCouche.getFeatures(QgsFeatureRequest(int(featureId))):
        num_elements = 0
        geomz = None
        msgBox = QtGui.QMessageBox()
        if layerSurvey:
            feat = None
            for f in layerSurvey.getFeatures(
                    QgsFeatureRequest(feature.geometry().boundingBox())):
                if f.geometry().intersects(feature.geometry().buffer(0.03, 3)):
                    num_elements += 1
                    if feat is None:
                        feat = f
            if num_elements == 0:
                text = u"Pas de point de mesures sous cette position X / Y "
                msgBox.setText(text)
                msgBox.exec_()
            if num_elements > 0:
                if not maCouche.isEditable():
                    maCouche.startEditing()
                text = u"Reprise des infos de la mesure pour l'objet r\xe9seau ID = " + str(
                    featureId)
                if feat[vZsurvey] > 0 and feature[vZobj] != feat[vZsurvey]:
                    feature[vZobj] = feat[vZsurvey]
                    text += u"\n - Coord Z : " + str(feat[vZsurvey])
                    feature[vPrecisionalti] = 11021
                    text += u"\n - Pr\xe9cision altim\xe9trique : Pr\xe9cis"
                    #print(feat.geometry().asPoint())
                    pt = QgsPointV2(feat.geometry().asPoint())
                    pt.addZValue(feat[vZsurvey])
                    geomz = QgsGeometry(pt)
                    feature.setGeometry(geomz)
                    feature[u"z"] = feat[vZsurvey]
                    #print(feature.geometry().exportToWkt())
                if feature[vPrecision] != 1102:
                    feature[vPrecision] = 1102
                    text += u"\n - Pr\xe9cision : Pr\xe9cis"
                    feature[vSisol] = "t"
                    text += u"\n - Cal\xe9 SISOL : oui"
                msgBox.setText(text)
                msgBox.exec_()
            if num_elements > 1:
                text = u"Attention : plusieurs points de mesure se trouvent sous la m\xeame position"
                msgBox.setText(text)
                msgBox.exec_()
            break
        else:
            text = u"La couche contenant les mesures n'existent pas dans le projet id = surveypoint20160902155615289"
            msgBox.setText(text)
            msgBox.exec_()
    if num_elements >= 1:
        if iface.openFeatureForm(maCouche, feature):
            if geomz is not None:
                maCouche.changeGeometry(feature.id(), geomz)
            maCouche.updateFeature(feature)
Example #4
0
def updateField():
    maCouche = iface.activeLayer()
    vYear = u"year_end"
    vStatus = u"fk_status"
    for feature in maCouche.getFeatures(QgsFeatureRequest(int([%$id%]))):
        msgBox = QtGui.QMessageBox()
        if feature[vStatus] == 13002:
            # print("conduite déjà archivée")
            text_arch = u"La conduite ID =  [%$id%] a déjà été archivée en " + str(feature[vYear])
            msgBox.setText(text_arch)
            msgBox.exec_()
        if feature[vStatus] != 13002:
            input_rep = QtGui.QInputDialog()
            year_end, ok = input_rep.getInt(None, u"Ann\xe9e d'archivage ", u"indiquez l'ann\xe9e d'archive (4 chiffres)", datetime.now().year, 1800,2999, 1)
            if ok:
                if not maCouche.isEditable():
                    maCouche.startEditing()
                feature[vStatus] = 13002
                feature[vYear] = year_end
                if iface.openFeatureForm(maCouche, feature):
                    maCouche.updateFeature(feature)
                    num_e = 0
                    num_v = 0
                    num_h = 0
                    num_i = 0
                    for layer in QgsMapLayerRegistry.instance().mapLayers().values():
                        uri = QgsDataSourceURI(layer.source())
                        name = uri.schema() + "." + uri.table()
                        if name in ["qwat_od.valve", "qwat_od.part" , "qwat_od.hydrant", "qwat_od.subscriber"]:
                        # if layer.name() == u"vannes" or layer.name() == u"\xe9l\xe9ments de montage" or layer.name() == u"hydrants" or layer.name() == u"introduction":
                            # print unicode(layer.name())
                            num_elements = 0
                            if not layer.isEditable():
                                layer.startEditing()
                            for feat in layer.getFeatures(QgsFeatureRequest(feature.geometry().boundingBox())):
                                if feat.geometry().intersects(feature.geometry().buffer(0.03, 3)):
                                    num = 0
                                    for f in maCouche.getFeatures(QgsFeatureRequest(feat.geometry().boundingBox())):
                                        if f.geometry().intersects(feat.geometry().buffer(0.03, 3)):
                                            num += 1
                                    # print("int",feat.id(),num)
                                    if num == 1:
                                        if feat[vStatus] != 13002:
                                            feat[vStatus] = 13002
                                            feat[vYear] = year_end
                                            layer.updateFeature(feat)
                                            num_elements += 1
                            #if layer.name() == u"vannes":
                            if name == "qwat_od.valve":
                                num_v = num_elements
                            #if layer.name() == u"\xe9l\xe9ments de montage":
                            if name == "qwat_od.part" :
                                num_e = num_elements
                            #if layer.name() == u"hydrants":
                            if name == "qwat_od.hydrant":
                                num_h = num_elements
                            #if layer.name() == u"introduction":
                            if name == "qwat_od.subscriber":
                                num_i = num_elements

                    text = u"La conduite ID =  [%$id%] a \xe9t\xe9 archiv\xe9e en " + str(year_end)
                    if num_v > 0 or num_e > 0 or num_h > 0 or num_i > 0:
                        text += u"\n ainsi que :"
                        if num_v > 0:
                            text += u"\n - " + str(num_v) + u" vannes"
                        if num_e > 0:
                            text += u"\n - " + str(num_e) + u" \xe9l\xe9ments de montage"
                        if num_h > 0:
                            text += u"\n - " + str(num_h) + u" hydrants"
                        if num_i > 0:
                            text += u"\n - " + str(num_i) + u" introductions"
                    msgBox.setText(text)
                    msgBox.exec_()
                else:
                    pass
            else:
                pass
        else:
            pass
Example #5
0
def updateField():
    maCouche = iface.activeLayer()
    layerName = maCouche.name()
    formTitle = layerName + u" - Attributs d'entités"
    layers = QgsMapLayerRegistry.instance().mapLayers() # liste des couches du projet

    for w in iface.mainWindow().findChildren(QDialog):
        if w.windowTitle() == formTitle and w.isActiveWindow():
            w.reject()

    vYear = u"year_end"
    vStatus = u"fk_status"
    for feature in maCouche.getFeatures(QgsFeatureRequest(int(featureId))):
        msgBox = QMessageBox()
        if feature[vStatus] != 1301:
            if feature[vStatus] == 13002:
                text_arch = u"La conduite ID ="+str(featureId) + u" a déjà été archivée en " + str(feature[vYear])
            else:
                text_arch = u"La conduite ID ="+str(featureId) + u" ne peut être archivée si elle n'est pas en service"
            msgBox.setText(text_arch)
            msgBox.exec_()
        if feature[vStatus] == 1301:
            input_rep = QInputDialog()
            year_end, ok = input_rep.getInt(None, u"Annee d'archivage ", u"indiquez l'ann\xe9e d'archive (4 chiffres)", datetime.now().year, 1800,2999, 1)
            if ok:
                if not maCouche.isEditable():
                    maCouche.startEditing()
                feature[vStatus] = 13002
                feature[vYear] = year_end
                if iface.openFeatureForm(maCouche, feature):
                    maCouche.updateFeature(feature)
                    num_e = 0
                    num_v = 0
                    num_h = 0
                    num_i = 0
                    num_a = 0
                    for i in range(0,len(layerIds)):
                        if layerIds[i] not in layers:
                            text_layer = u"La couche avec ID = "+ str(layerIds[i]) + u" n'existe plus ou pas dans le projet, merci de vérifier la structure du projet sinon elle ne sera pas prise en compte dans l'archivage"
                            msgBox.setText(text_layer)
                            msgBox.exec_()
                    for layer in layers.values():
                        uri = QgsDataSourceURI(layer.source())
                        name = uri.schema() + "." + uri.table()
                        #if name in ["qwat_od.valve", "qwat_od.part" , "qwat_od.hydrant"]:
                        #if layer.name() == u"vannes" or layer.name() == u"\xe9l\xe9ments de montage" or layer.name() == u"hydrants" or layer.name() == u"introduction":
                        if layer.id() in layerIds:
                            # print unicode(layer.name())
                            num_elements = 0
                            if not layer.isEditable():
                                layer.startEditing()
                            req = QgsFeatureRequest(feature.geometry().boundingBox()).setFilterExpression(' "fk_status" = \'1301\' ')
                            for feat in layer.getFeatures(req):
                                if feat.geometry().intersects(feature.geometry()):
                                    num = 0
                                    for f in maCouche.getFeatures(QgsFeatureRequest(feat.geometry().boundingBox()).setFilterExpression(' "fk_status" != \'13002\' ')):
                                        if f.geometry().intersects(feat.geometry())  and f.id() != featureId:
                                            num += 1
                                    # print("int",feat.id(),num)
                                    if num == 0:
                                        if feat[vStatus] != 13002:
                                            feat[vStatus] = 13002
                                            feat[vYear] = year_end
                                            layer.updateFeature(feat)
                                            num_elements += 1
                            #if layer.name() == u"vannes":
                            if name == "qwat_od.valve":
                                num_v = num_elements
                            #if layer.name() == u"\xe9l\xe9ments de montage":
                            if name == "qwat_od.part" :
                                num_e = num_elements
                            #if layer.name() == u"hydrants":
                            if name == "qwat_od.hydrant":
                                num_h = num_elements
                            #if layer.name() == u"introduction":
                            if name == "qwat_od.subscriber":
                                num_i = num_elements
                            if name == "qwat_od.usr_prc_point":
                                num_a = num_elements

                    text = u"La conduite ID ="+str(featureId)+ u" a \xe9t\xe9 archiv\xe9e en " + str(year_end)
                    if num_v > 0 or num_e > 0 or num_h > 0 or num_i > 0:
                        text += u"\n ainsi que :"
                        if num_v > 0:
                            text += u"\n - " + str(num_v) + u" vannes"
                        if num_e > 0:
                            text += u"\n - " + str(num_e) + u" \xe9l\xe9ments de montage"
                        if num_h > 0:
                            text += u"\n - " + str(num_h) + u" hydrants"
                        if num_i > 0:
                            text += u"\n - " + str(num_i) + u" introductions"
                        if num_a > 0:
                            text += u"\n - " + str(num_a) + u" \xe9l\xe9ments de protection cathodique"
                    msgBox.setText(text)
                    msgBox.exec_()
                else:
                    pass
            else:
                pass
        else:
            pass
Example #6
0
def updateFieldSisol():

    maCouche = iface.activeLayer()
    vStatus = u"fk_status"
    vSisol = u"usr_cale_sisol"
    vPrecision = u"fk_precision"
    vAltitude = u"altitude"
    vPrecisionalti = u"fk_precisionalti"
    vCoordZ = u"z"
    global feats_sisol
    feats_sisol = []
    num_e = 0
    num_s = 0

    if not maCouche.isEditable():
        maCouche.startEditing()
    for feature in maCouche.getFeatures(QgsFeatureRequest(int(featureId))):
        msgBox = QtGui.QMessageBox()
        if feature[vSisol] != "t":
            feature[vSisol] = "t"
            # print("Caler la conduite")
        else:
            text_cale = u"Attention : La conduite ID =" + str(
                featureId
            ) + u" a déjé été traitée et calée sur les données SISOL"
            msgBox.setText(text_cale)
            msgBox.exec_()
            # print(feature[vSisol])
        if iface.openFeatureForm(maCouche, feature):
            maCouche.updateFeature(feature)
            for layer in QgsMapLayerRegistry.instance().mapLayers().values():
                uri = QgsDataSourceURI(layer.source())
                name = uri.schema() + "." + uri.table()
                if name in ["qwat_od.usr_sisol_point"]:
                    num_s = 0
                    if not layer.isEditable():
                        layer.startEditing()
                    for feat in layer.getFeatures(
                            QgsFeatureRequest(
                                feature.geometry().boundingBox())):
                        if feat.geometry().intersects(
                                feature.geometry().buffer(0.03, 3)):
                            feats_sisol.append(feat)
                            # si on veut mettre � jour les points SISOL qui ne sont pas aux extr�mit�s et qui touchent une autre conduite
                            '''
                                num = 0
                                for f in maCouche.getFeatures(QgsFeatureRequest(feat.geometry().boundingBox())):
                                    if f.geometry().intersects(feat.geometry().buffer(0.03, 3)):
                                        num += 1
                                if num == 1:
                                    if feat[vSisol] != "t":
                                        feat[vSisol] = "t"
                                    layer.updateFeature(feat)
                                    num_s += 1
                                else:
                                    pass
                                '''
                            # on met � jour tous les points sisol touchant la conduite
                            if feat[vSisol] != "t":
                                feat[vSisol] = "t"
                                layer.updateFeature(feat)
                                num_s += 1
                            else:
                                pass
                        else:
                            pass
                    # for p in feats_sisol: print p.id()
                if name == "qwat_od.part" and feats_sisol != []:
                    text_part = ""
                    if not layer.isEditable():
                        layer.startEditing()
                    for x in layer.getFeatures(
                            QgsFeatureRequest(
                                feature.geometry().boundingBox())):
                        #print(x.id())
                        for pts in feats_sisol:
                            if x.geometry().intersects(pts.geometry()):
                                #print(pts.id())
                                if x[vSisol] != "t":
                                    x[vSisol] = "t"
                                if x[vStatus] != 1301:
                                    x[vStatus] = 1301
                                if x[vPrecision] != 1102:
                                    x[vPrecision] = 1102
                                if pts[vAltitude] > 0:
                                    if not x[vCoordZ] > 0:
                                        x[vPrecisionalti] = 11021
                                        x[vAltitude] = pts[vAltitude]
                                        pt = QgsPointV2(x.geometry().asPoint())
                                        pt.addZValue(pts[vAltitude])
                                        geomz = QgsGeometry(pt)
                                        #print(x[vCoordZ])
                                        x.setGeometry(geomz)
                                        x[vCoordZ] = pts[vAltitude]
                                        if geomz is not None:
                                            layer.changeGeometry(x.id(), geomz)
                                    else:
                                        #print "pas de modif"
                                        text_part += u"L'�l�ment ID =" + str(
                                            x.id()
                                        ) + u" poss�de d�j� une alitude :" + str(
                                            x[vCoordZ]
                                        ) + u" | altitude SISOL : " + str(
                                            pts[vAltitude]) + " \n"
                                layer.updateFeature(x)
                                num_e += 1
                            else:
                                pass
                    if text_part:
                        msgBox.setWindowTitle(
                            u"Pas de modifcation de la coordonn�e Z")
                        msgBox.setText(text_part)
                        msgBox.exec_()
                else:
                    pass
                    #print(num_e)
            text = u"La conduite ID =" + str(
                featureId) + u" mise a jour sisol "
            if num_s > 0 or num_e > 0:
                text += u"\n ainsi que :"
                if num_s > 0:
                    text += u"\n - " + str(num_s) + u" pts SISOL"
                if num_e > 0:
                    text += u"\n - " + str(
                        num_e) + u" \xe9l\xe9ments de montage"
                else:
                    pass
            else:
                pass
            msgBox.setText(text)
            msgBox.exec_()
        else:
            pass
def updateField():

    # fonction (action QGIS) qui permet d'archiver une conduite (changement du statut et d�finition de l'ann�e d'archive), ainsi que tous les �l�ments de r�seau qui touchent la conduite en question sauf aux extr�mit�s
    # ouverture d'une boite de dialogue pour d�finir l'ann�e
    input_rep = QtGui.QInputDialog()
    year_end, ok = input_rep.getInt(None, u"Annee d'archivage ", u"indiquez l'annee (4 chiffres)", datetime.now().year, 1800,2999, 1)
    
    if ok:
        maCouche = iface.activeLayer()
        vYear = u"year_end"
        vStatus = u"fk_status"
        # passer en �dition la couche si elle ne l'est pas
        if not maCouche.isEditable():
            maCouche.startEditing()
        # modifier les attributs de l'objets "conduite"
        for feature in maCouche.getFeatures(QgsFeatureRequest(int([%$id%]))):
            feature[vYear] = year_end
            if feature[vStatus] != 13002:
                feature[vStatus] = 13002
        # partie � rajouter dans le code
        # identifier si le fomulaire de l'objet en question (id conduite) est d�j� ouvert ?? aucune id�e
        # Si oui 
        # modifier/ mettre � jour les attributs (statut et ann�e) de l'objet et rafra�chir le formulaire avec les nouvelles valeurs
        # dialog = iface.getFeatureForm(maCouche, feature)  / r�cup�rer le fomulaire
        # dialog.attributeForm().refreshFeature() ou dialog.attributeForm().resetValues()  ?? / rafra�chir les infos du formulaires 
        # Si non
        # ouvrir le formulaire en question avec les nouvelles valeurs de statuts et d'ann�e (ceci fonctionne d�j�)
        '''
        dialog = iface.getFeatureForm(maCouche, feature)
        if dialog.isVisible():
            pass
        else:
            dialog.show()
        '''
        # ouvrir le formulaire de l'objet "conduite"
        # � modifier , pour l'instant le fomulaire s'ouvre chaque fois que l'action est execut� m�me si le formulaire de l'objet en question est d�j� ouvert.
        if iface.openFeatureForm(maCouche, feature):
            maCouche.updateFeature(feature)
            num_e = 0
            num_v = 0
            num_h = 0
            num_i = 0
            for layer in QgsMapLayerRegistry.instance().mapLayers().values():
                if layer.name() == u"vannes" or layer.name() == u"\xe9l\xe9ments de montage" or layer.name() == u"hydrants" or layer.name() == u"introduction":
                    # print unicode(layer.name())
                    num_elements = 0
                    if not layer.isEditable():
                        layer.startEditing()
                    for feat in layer.getFeatures(QgsFeatureRequest(feature.geometry().boundingBox())):
                        if feat.geometry().intersects(feature.geometry().buffer(0.03, 3)):
                            num = 0
                            for f in maCouche.getFeatures(QgsFeatureRequest(feat.geometry().boundingBox())):
                                if f.geometry().intersects(feat.geometry().buffer(0.03, 3)):
                                    num += 1
                            # print("int",feat.id(),num)
                            if num == 1:
                                if feat[vStatus] != 13002:
                                    feat[vStatus] = 13002
                                    feat[vYear] = year_end
                                    layer.updateFeature(feat)
                                    num_elements += 1
                    if layer.name() == u"vannes":
                        num_v = num_elements
                    if layer.name() == u"\xe9l\xe9ments de montage":
                        num_e = num_elements
                    if layer.name() == u"hydrants":
                        num_h = num_elements
                    if layer.name() == u"introduction":
                        num_i = num_elements

            # message de confirmation et retour � l'utilisateur du changement effectu�        
            msgBox = QtGui.QMessageBox()
            text = u"La conduite ID =  [%$id%] a ete archivee en " + str(year_end)
            if num_v > 0 or num_e > 0 or num_h > 0 or num_i > 0:
                text += u"\n ainsi que :"
                if num_v > 0:
                    text += u"\n - " + str(num_v) + u" vannes"
                if num_e > 0:
                    text += u"\n - " + str(num_e) + u" \xe9l\xe9ments de montage"
                if num_h > 0:
                    text += u"\n - " + str(num_h) + u" hydrants"
                if num_i > 0:
                    text += u"\n - " + str(num_i) + u" introductions"
            msgBox.setText(text)
            msgBox.exec_()
def create_relation(*args):
    layer_name = args[0]
    layer_update = args[1]
    rel_layer_name = args[2]
    src_field_id_name = args[3]
    rel_field_id_name = args[4]
    repaint_layer_name = args[5]

    layers = QgsProject.instance().mapLayersByName(layer_name)

    # Control if layers exists
    if not len(layers):
        iface.messageBar().pushCritical(
            'Véloroutes',
            'La couche {} n\'a pas été trouvée'.format(layer_name))
        return

    src_layer = layers[0]

    layers = QgsProject.instance().mapLayersByName(layer_update)

    if not len(layers):
        iface.messageBar().pushCritical(
            'Véloroutes',
            'La couche {} n\'a pas été trouvée'.format(layer_update))
        return

    update_layer = layers[0]

    # count number of features selected from src_layer
    count = src_layer.selectedFeatureCount()
    if count < 1:
        iface.messageBar().pushCritical(
            'Véloroutes',
            'Vous devez sélectionner au moins un objet de la couche {}'.format(
                layer_update))
        return

    fields = update_layer.fields()
    new_feature = QgsFeature()
    new_feature.setFields(fields)

    features = src_layer.getSelectedFeatures()
    selected_features_id = []
    for feat in features:
        selected_features_id.append(feat[rel_field_id_name])

    update_layer.startEditing()

    # open feature form and test if cancel form for stop or not the script
    if not iface.openFeatureForm(update_layer, new_feature, showModal=True):
        update_layer.rollBack()
        iface.messageBar().pushInfo(
            'Véloroutes',
            'Ouverture du formulaire pour la création impossible')
        return
    iface.messageBar().pushInfo('Véloroutes', 'Création validée')
    update_layer.committedFeaturesAdded.connect(
        partial(_add_relation, selected_features_id, rel_layer_name,
                src_field_id_name, rel_field_id_name))
    update_layer.commitChanges()
    update_layer.committedFeaturesAdded.disconnect()
    if layer_update == 'itineraire':
        msg = 'L\'itinéraire numéro {} a été créé'.format(
            str(new_feature['numero']))
    else:
        msg = 'La portion {} a été créée'.format(str(new_feature['nom']))

    iface.messageBar().pushInfo('Véloroutes', msg)

    layer_repaint = QgsProject.instance().mapLayersByName(repaint_layer_name)

    if not len(layer_repaint):
        iface.messageBar().pushCritical(
            'Véloroutes',
            'La couche {} n\'a pas été rafraîchie'.format(repaint_layer_name))
        return

    layer_repaint[0].triggerRepaint()

    iface.messageBar().pushInfo(
        'Véloroutes',
        'La couche {} a bien été réactualisée'.format(repaint_layer_name))
def updateField():
    maCouche = iface.activeLayer()
    layerName = maCouche.name()
    formTitle = layerName + u" - Attributs d'entités"
    layers = QgsMapLayerRegistry.instance().mapLayers(
    )  # liste des couches du projet

    for w in iface.mainWindow().findChildren(QDialog):
        if w.windowTitle() == formTitle and w.isActiveWindow():
            w.reject()

    vYear = u"year"
    vStatus = u"fk_status"
    year = datetime.now().year
    for feature in maCouche.getFeatures(QgsFeatureRequest(int(featureId))):
        msgBox = QMessageBox()
        if feature[vStatus] == 1301:
            text_service = u"La conduite ID =" + str(
                featureId) + u" est déjà en service, depuis " + str(
                    feature[vYear])
            msgBox.setText(text_service)
            msgBox.exec_()
        else:
            if not maCouche.isEditable():
                maCouche.startEditing()
            feature[vStatus] = 1301
            if not feature[vYear] or feature[vYear] == 0:
                #print(feature[vYear])
                feature[vYear] = year
            else:
                #print(feature[vYear])
                pass

            if iface.openFeatureForm(maCouche, feature):
                maCouche.updateFeature(feature)
                num_e = 0
                num_v = 0
                num_h = 0
                num_i = 0
                for i in range(0, len(layerIds)):
                    if layerIds[i] not in layers:
                        text_layer = u"La couche avec ID = " + str(
                            layerIds[i]
                        ) + u" n'existe plus ou pas dans le projet, merci de vérifier la structure du projet sinon elle ne sera pas prise en compte dans la mise en service"
                        msgBox.setText(text_layer)
                        msgBox.exec_()
                for layer in layers.values():
                    uri = QgsDataSourceURI(layer.source())
                    name = uri.schema() + "." + uri.table()
                    #if name in ["qwat_od.valve", "qwat_od.part" , "qwat_od.hydrant", "qwat_od.subscriber"]:
                    if layer.id() in layerIds:
                        num_elements = 0
                        if not layer.isEditable():
                            layer.startEditing()
                        req = QgsFeatureRequest(feature.geometry().boundingBox(
                        )).setFilterExpression(' "fk_status" = \'103\' ')
                        for feat in layer.getFeatures(req):
                            if feat.geometry().intersects(feature.geometry()):
                                num = 0
                                for f in maCouche.getFeatures(
                                        QgsFeatureRequest(feat.geometry(
                                        ).boundingBox()).setFilterExpression(
                                            ' "fk_status" != \'1301\' ')):
                                    if f.geometry().intersects(feat.geometry(
                                    )) and f.id() != featureId:
                                        num += 1
                                if num == 0:
                                    if feat[vStatus] != 1301:
                                        feat[vStatus] = 1301
                                        if not feat[vYear] or feat[vYear] == 0:
                                            feat[vYear] = year
                                        layer.updateFeature(feat)
                                        num_elements += 1
                        if name == "qwat_od.valve":
                            num_v = num_elements
                        if name == "qwat_od.part":
                            num_e = num_elements
                        if name == "qwat_od.hydrant":
                            num_h = num_elements
                        if name == "qwat_od.subscriber":
                            num_i = num_elements

                text = u"La conduite ID =" + str(
                    featureId
                ) + u" a \xe9t\xe9 mise en service avec l'ann\xe9e : " + str(
                    feature[vYear])
                if num_v > 0 or num_e > 0 or num_h > 0 or num_i > 0:
                    text += u"\n ainsi que :"
                    if num_v > 0:
                        text += u"\n - " + str(num_v) + u" vannes"
                    if num_e > 0:
                        text += u"\n - " + str(
                            num_e) + u" \xe9l\xe9ments de montage"
                    if num_h > 0:
                        text += u"\n - " + str(num_h) + u" hydrants"
                    if num_i > 0:
                        text += u"\n - " + str(num_i) + u" introductions"
                msgBox.setText(text)
                msgBox.exec_()
            else:
                pass
def updateField():

        maCouche = iface.activeLayer()
        vYear = u"year"
        vStatus = u"fk_status"
        year = datetime.now().year
        for feature in maCouche.getFeatures(QgsFeatureRequest(int([%$id%]))):
            if feature[vStatus] == 1301:
                msgBox = QtGui.QMessageBox()
                text_service = u"La conduite ID =  [%$id%] est déjà en service, depuis " + str(feature[vYear])
                msgBox.setText(text_service)
                msgBox.exec_()
            if feature[vStatus] != 1301:
                if not maCouche.isEditable():
                    maCouche.startEditing()
                feature[vStatus] = 1301
                if not feature[vYear] or feature[vYear] == 0:
                    #print(feature[vYear])
                    feature[vYear] = year
                else:
                    #print(feature[vYear])
                    pass


                if iface.openFeatureForm(maCouche, feature):
                    maCouche.updateFeature(feature)
                    num_e = 0
                    num_v = 0
                    num_h = 0
                    num_i = 0
                    for layer in QgsMapLayerRegistry.instance().mapLayers().values():
                        uri = QgsDataSourceURI(layer.source())
                        name = uri.schema() + "." + uri.table()
                        if name in ["qwat_od.valve", "qwat_od.part" , "qwat_od.hydrant", "qwat_od.subscriber"]:
                            num_elements = 0
                            if not layer.isEditable():
                                layer.startEditing()
                            for feat in layer.getFeatures(QgsFeatureRequest(feature.geometry().boundingBox())):
                                if feat.geometry().intersects(feature.geometry().buffer(0.03, 3)):
                                    num = 0
                                    for f in maCouche.getFeatures(QgsFeatureRequest(feat.geometry().boundingBox())):
                                        if f.geometry().intersects(feat.geometry().buffer(0.03, 3)):
                                            num += 1
                                    if num == 1:
                                        if feat[vStatus] != 1301:
                                            feat[vStatus] = 1301
                                            if not feat[vYear] or feat[vYear] ==0:
                                                feat[vYear] = year
                                            layer.updateFeature(feat)
                                            num_elements += 1
                            if name == "qwat_od.valve":
                                num_v = num_elements
                            if name == "qwat_od.part" :
                                num_e = num_elements
                            if name == "qwat_od.hydrant":
                                num_h = num_elements
                            if name == "qwat_od.subscriber":
                                num_i = num_elements

                    msgBox = QtGui.QMessageBox()
                    text = u"La conduite ID =  [%$id%] a \xe9t\xe9 mise en service avec l'ann\xe9e : " + str(feature[vYear])
                    if num_v > 0 or num_e > 0 or num_h > 0 or num_i > 0:
                        text += u"\n ainsi que :"
                        if num_v > 0:
                            text += u"\n - " + str(num_v) + u" vannes"
                        if num_e > 0:
                            text += u"\n - " + str(num_e) + u" \xe9l\xe9ments de montage"
                        if num_h > 0:
                            text += u"\n - " + str(num_h) + u" hydrants"
                        if num_i > 0:
                            text += u"\n - " + str(num_i) + u" introductions"
                    msgBox.setText(text)
                    msgBox.exec_()
                else:
                    pass
            else:
                pass
Example #11
0
# -*- coding: utf-8 -*-

from qgis.utils import iface
from qgis.core import QgsFeatureRequest

# définition des variables
layerid = sys.var[0]
fid_parent = sys.var[1]

layer = QgsMapLayerRegistry.instance().mapLayer(layerid)
if layer:
    req = QgsFeatureRequest(fid_parent)
    feat = None
    for f in layer.getFeatures(req):
        feat = f
    if feat:
        iface.openFeatureForm(layer, feat)
    else:
        QtGui.QMessageBox.information(
            None, "Attention",
            u"cette objet ne trouve pas de relation parent - enfant, ID : " +
            str(fid_parent))
else:
    QtGui.QMessageBox.information(
        None, "Attention",
        u"La table parent indiquée  n''existe pas, ID : " + str(layerid))
Example #12
0
    def run(self):
        print ("paso por el run")
       
        #coloco el puntero arriba del todo
        #QgsProject.instance().layerTreeRegistryBridge().setLayerInsertionPoint( QgsProject.instance().layerTreeRoot(), 0 )
   
        #genero una lista con los sistemas de referencia
        #misdatos=[["Etrs89 Zona30 (25830)","25830"],["Etrs89 Zona29 (25829)","25829"],["ED50 Zona30 (23030)","23030"],["ED50_Zona29 (23029)","23029"],["WGS84 geograficas (4326)","4326"] ]
        #self.dlg.comboBox_src.clear() 
        #for element in misdatos:
            #self.dlg.comboBox_src.addItem( element[0])
     
        
        """Run method that performs all the real work"""

        # Create the dialog with elements (after translation) and keep reference
        # Only create GUI ONCE in callback, so that it will only load when the plugin is started
        if self.first_start == True:
            self.first_start = False

            

        # show the dialog
        self.dlg.show()
        
        

        # Run the dialog event loop
        result = self.dlg.exec_()
        # See if OK was pressed
        if result:

            # Do something useful here - delete the line containing pass and
            # substitute with your code.

            
      

             #saco de  aqui variables que estan en las cajitas
            #src_seleccionado=self.dlg.comboBox_src.currentIndex()
             
            # Get the coordinates and scale factor from the dialog
            x=self.dlg.XX.text()##displayText()
            y=self.dlg.YY.text()##displayText()
            
            x=x.replace(',','.')
            y=y.replace(',','.')
            print (x)
            print (y)


            

            vl2=iface.activeLayer()
            if vl2 is None:
                iface.messageBar().pushMessage("ATENCION", "Selecciona una capa de puntos en la que introducir el nuevo punto", duration=10)
            else:
                
                if vl2.wkbType()== 1:


                    
                    vl2.startEditing()
            
                    # add fields
                    #pr2.addAttributes([
                                    #QgsField("x",  QVariant.Double),
                                    #QgsField("y", QVariant.Double)])
                    #vl2.updateFields() 
                    # tell the vector layer to fetch changes from the provider
                    
                    #add a feature
              
                  
                    fet = QgsFeature()
                  
                    fet.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(float(x),float(y))))
                   
                    #fet.setAttributes([ float(x),float( y)])
                    fet.setFields(vl2.fields())
           
                    
                    vl2.addFeature(fet)
                    #para el futuro y configurar un formulario
                    #my_vector_layer.setEditForm("C:/my_form.ui")
                    
                    if iface.openFeatureForm(vl2, fet, False):
                        print("ok")
                        
              


                    vl2.commitChanges()
                  
                    vl2.updateExtents()
                    canvas = self.iface.mapCanvas()
                    
                    canvas.setExtent(vl2.extent())
                    scale=100
                    rect = QgsRectangle(float(x)-scale,float(y)-scale,float(x)+scale,float(y)+scale)
                    canvas.setExtent(rect)
                 
            


                    
                    self.iface.mapCanvas().zoomScale(1000)

                else:
                    iface.messageBar().pushMessage("ATENCION", "La capa seleccionada debe ser una capa de puntos", duration=10)