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
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
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)
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
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
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
# -*- 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))
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)