web-dev-qa-db-fra.com

Comment concevoir des scripts configurables pour les non-programmeurs

J'ai un script python qui permet aux utilisateurs de analyser les adresses lors de l'édition par lots d'une table.

Le script permet à l'utilisateur de choisir de renvoyer le numéro de maison ou le nom de la rue au champ (en mettant en commentaire la ligne ReturnType non applicable).

Malheureusement, les interfaces utilisateur traditionnelles ne sont pas possibles dans outil de calculatrice de champ que nous utilisons. La seule façon dont je sais que l'utilisateur peut configurer un script est d'ajuster manuellement le code.

def addressParser(inString):

    ###Note to users: 
    ###Comment-out the ReturnType option that does not apply. 
    returnType = "House Number"
    #returnType = "Street Name"

    splitString = inString.split(' ',1)
    houseNumber = splitString[0]
    streetName = splitString[1]

    if returnType == "House Number":
        if houseNumber.isdigit():
            return houseNumber
        else:
            return
    if returnType == "Street Name":
        return streetName
    else:
        return
__esri_field_calculator_splitter__
addressParser(!ADDRESS!)

Le script me semble assez simple, en tant que programmeur débutant.

Cependant, lorsque j'écris les notes de publication du script, cela commence à sembler terriblement compliqué pour quelque chose qui est vraiment assez simple.

L'étape # 3 est celle qui me préoccupe le plus.

Notes de version:

J'ai créé un outil de calcul de champ (python) qui peut être utilisé pour analyser les champs d'adresse. L'outil fonctionne de façon similaire à la façon dont nous utilisons outil Texte vers colonnes dans Excel pour analyser les adresses.

Par exemple, 123 Main St E peut être analysé pour renvoyer le numéro de la maison ou le nom de la rue:

  • 123
  • Main St E

L'outil fonctionne en divisant le texte à la première occurrence d'un espace (‘’).

Pas:

  1. Chargez l'outil dans la calculatrice de champ en cliquant sur le bouton Charger.
  2. Basculez le mode Field Calculator de VB Script vers Python.
  3. Spécifiez la partie de l'adresse (numéro de maison ou nom de rue) que l'outil retournera dans votre champ en supprimant ou en ajoutant le signe numérique (#) devant la ligne appropriée.

    • Astuce: le signe numérique (#) est le symbole "commenter/annuler la sortie" en python.
    • Exemple: Pour renvoyer le numéro de la maison, vous laisseriez le code tel quel:

      returnType = "House Number"
      #returnType = "Street Name"
      

      Ou, pour retourner le nom de la rue, vous devez basculer le signe numérique (#) de la ligne du nom de la rue vers la ligne du numéro de la maison:

      #returnType = "House Number" 
      returnType = "Street Name"
      
  4. Spécifiez le champ d'où provient l'adresse non analysée:

    • Exemple: modifiez addressParser( !YourUnparsedAddressFieldHere!)
    • À addressParser( !ADDRESS!)
  5. Cliquez sur OK pour exécuter l'outil.

Comment puis-je rendre ce script configurable plus convivial pour les non-programmeurs?

  • Modifier le script pour faciliter la configuration?
  • Modifier les instructions?
1
Wilson

(Je préfère vous répondre sur Gis.se, mais je répondrai ici que ce n'est pas illogique concernant le côté utilisateur final que vous devez améliorer)

Je vous suggère de jeter un œil à Python Toolboxes pour Arcgis, ou dans le cas où vous utilisez QGIS, Écriture de nouveaux algorithmes de traitement en tant que python. Vous verrez que les paramètres de votre script peuvent également être provenant d'interfaces gui que vous pouvez générer à partir de votre code. Vous pourrez alors utiliser des listes de valeurs ou des cases à cocher par exemple. Ces cases à cocher aideraient à passer des variables dans votre script au lieu de les mettre en dur dans le code.

Si vous avez des problèmes avec la façon de créer des scripts, veuillez lire ces documents connexes et creuser le sujet en suivant cette piste, essayez des choses dans votre logiciel puis publiez à nouveau (peut-être plutôt dans GIS.SE car il est lié à arcpy) pour votre question précise sur l'objet.

Pour une réponse plus générale qui correspond à cette zone SE, l'important est que vous devez trouver un moyen de créer une GUI (Interface utilisateur graphique) avec des outils externes ou des outils intégrés et passez le paramètre à l'intérieur de votre code, selon ce que l'utilisateur a choisi.

Votre script aura alors plus d'un paramètre, par exemple:

def addressParser(inString,  returnType):

Après cela, vous pourrez utiliser votre "if .... then:" type condition check pour savoir quelle valeur a été choisie par l'utilisateur avant pour exécuter le code.

1
gisnside