banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 25 April 2023 18:25

AntoninQueloz
Juste Inscrit !
Date d'inscription: 19 Jan 2011
Messages: 4

Interruption du script pour choix dans liste deroulante

Hello les cracks de FME,

Voici ma situation: j'ai un script qui utilise HTTPCaller pour du geocodage dans OpenStreetMap et MapGeoAdmin (retrouver des coordonnées à partir d'une adresse dans un attribut en entrée) et, parfois, plusieurs "adresses" sont localisées pour une même adresse en entrée ce qui me donne une liste d'adresse (extraites avec JSONFlattener).

Mon problème est que j'aimerais, en un seul script (et ça fait un moment que je planche là-dessus), stopper le script et généré une boîte de dialogue avec possibilité de choisir la bonne adresse dans une liste déroulante du type:
ATTRIBUT ADRESSE ENTRÉE => CHOIX DES ADRESSES DETECTEES (combobox)
"Mont 1, 1950 Sion"   => "1, Chemin du Lac de Mont-d'Orge, La Muraz, Sion, Valais, 1950, Suisse"
                                => "1, Rue du Mont, Sion, Valais, 1950, Suisse"
                                => "1a, Chemin du Lac de Mont-d'Orge, La Muraz, Sion, Valais, 1950, Suisse"
... étant donné que, de façon automatisé, il n'est pas possible de savoir laquelle est la bonne.

Auriez-vous une idée de la façon dont je pourrais procéder?

Un grand merci d'avance pour votre aide, Antonin

Hors ligne

 

#2 Mon 15 May 2023 09:40

AntoninQueloz
Juste Inscrit !
Date d'inscription: 19 Jan 2011
Messages: 4

Re: Interruption du script pour choix dans liste deroulante

J'ai trouvé un script python avec le transformer PythonCaller qui me convient au niveau de l'interface (liste déroulante de choix):

Code:

# coding: utf-8
from PyQt5.QtWidgets import QApplication, QWidget , QComboBox
import sys    
 
def actionSelect():
    select = qcombo.currentText()
    print("Selected street : " + select)    
app = QApplication(sys.argv)
root = QWidget()
root.setWindowTitle("Street Selected")
root.setGeometry(100 , 100 , 500 , 300)
 
# création de la liste QCombobox
qcombo = QComboBox(root)
qcombo.setGeometry(100 , 10 , 150 , 30)
qcombo.activated.connect(actionSelect)
# création de la liste des items
L = ["Street A, City A" , "Street B, City B" , "Street C, City C"]
# ajout des items à la liste QCombobox
qcombo.addItems(["Street A, City A" , "Street B, City B" , "Street C, City C"])
root.show()
sys.exit(app.exec_())

Mais je ne comprends pas comment je peux récupérer le nom de la rue choisi dans la liste pour renseigner un attribut dans FME (dans le script FME ci-dessus je voudrais que la variable "select" renseigne l'attribut "street" du feature FME) et, que sitôt choisi, la boite de dialogue se ferme automatiquement pour que mon workbench continue.

Est-ce que quelqu'un à une idée du code à ajouter dans mon script python pour réaliser cela?

Merci beaucoup d'avance pour votre aide

Antonin

Hors ligne

 

#3 Wed 17 May 2023 08:40

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: Interruption du script pour choix dans liste deroulante

Bonjour, a priori impossible de stopper FME pour modifier un paramètre et le relancer avec ce dernier.


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#4 Wed 17 May 2023 08:44

AntoninQueloz
Juste Inscrit !
Date d'inscription: 19 Jan 2011
Messages: 4

Re: Interruption du script pour choix dans liste deroulante

Si on m'a donné la solution via FME Community:

Code:

import fme
import fmeobjects
from PyQt5.QtWidgets import (QApplication, QWidget, QInputDialog)
 
class StreetNameDialog(QWidget):
    
    def __init__(self, items):
        super().__init__()
        self.text = ''
        self.showDialog(items)
 
    def showDialog(self, items):
        text, ok = QInputDialog.getItem(self, 'Street', 'Street name:', items, editable=False)
        if ok:
            self.text = str(text)
 
class SelectStreet(object):
    def __init__(self):
        pass
 
    def input(self, feature):
        app = QApplication([])
        list_items = ["MGA : "+feature.getAttribute('SFIBER_MGA_display_name'), "OSM : "+feature.getAttribute('SFIBER_OSM_display_name')]
        dlg = StreetNameDialog(list_items)
        feature.setAttribute('Street', dlg.text)
        
        self.pyoutput(feature)
                               
    def close(self):
        pass

Merci

Hors ligne

 

Pied de page des forums

Powered by FluxBB