ArcPy peut-il remplir des formulaires dans l'interface du complément?

8

J'essaie de créer un outil ArcPy, qui demandera à l'utilisateur de saisir d'abord certaines informations (ID, nom, adresse, Zip, etc.). Mon interface de complément est illustrée ci-dessous et j'espère implémenter qu'une fois que l'utilisateur saisit l'ID, si toutes les autres informations connexes (nom, adresse, etc.) existent dans une autre table connue, elles pourraient être affichées dans les espaces suivants à en même temps, au lieu de laisser l'utilisateur saisir tout.

En bref, ArcPy peut-il remplir des formulaires dans l'interface du complément, pas dans la fenêtre de résultats?

entrez la description de l'image ici

La validation fonctionne, mais est extrêmement lente lorsque j'exécute un curseur de recherche dans un fichier .dbf qui compte plus de 160 000 enregistrements. Comment puis-je améliorer le code ci-dessous, ou existe-t-il une meilleure solution autre que l'utilisation de l'outil de script python? Il semble que le formulaire passe à nouveau par le curseur même après avoir rempli d'autres blancs non liés.

import arcpy, datetime
import os
import sys
class ToolValidator(object):
  """Class for validating a tool's parameter values and controlling
  the behavior of the tool's dialog."""

  def __init__(self):
    """Setup arcpy and the list of tool parameters."""
    self.params = arcpy.GetParameterInfo()
    fc = "C:\\test\\vectorDBO.dbf"
    field = "PARCEL"
    cursor = arcpy.SearchCursor(fc)
    row = cursor.next()
    n = 0
    while row:
        if row.getValue("PARCEL") == self.params[0].value:
            self.params[1].value = row.getValue("LASTNM")
            self.params[3].value = row.getValue("ADDRESS")
            self.params[4].value = row.getValue("CITY")
            self.params[6].value = row.getValue("ZIPCODE")
            break
        row = cursor.next()

  def initializeParameters(self):
    """Refine the properties of a tool's parameters.  This method is
    called when the tool is opened."""
    self.params[10].value = datetime.datetime.now()
    return

  def updateParameters(self):
    """Modify the values and properties of parameters before internal
    validation is performed.  This method is called whenever a parameter
    has been changed."""
    return

  def updateMessages(self):
    """Modify the messages created by internal validation for each tool
    parameter.  This method is called after internal validation."""
    return
Morue énergique
la source
4
Avez-vous envisagé la validation d'outils personnalisés ? Il peut être utilisé pour remplir des champs en fonction d'autres champs.
Barbarossa
1
Vous utilisez l'ancien curseur de style, vous souhaitez utiliser le nouveau curseur de recherche plus rapide dans le module da , cela devrait résoudre le problème de vitesse.
Hornbydd
Merci pour votre suggestion! Je convertis la table en fichier .csv et utilise SearchCursor (arcpy.da), et cela fonctionne parfaitement!
Morue énergétique
Article plus ancien, mais j'ai rencontré un problème similaire lorsque je construisais un complément. Vous voudrez utiliser la saveur .da du curseur de recherche, et également utiliser un format de données plus convivial pour le système, comme csv ou xlsx.
COCO

Réponses:

4

Je n'ai jamais utilisé d'extensions Python, mais l'interface que vous décrivez est un outil de script. Une discussion sur l'appel des outils de script à partir des compléments se trouve ici . Comme @Barbarossa le commente ci-dessus, vous pouvez utiliser la validation d'outil pour remplir les paramètres. À moins qu'il n'y ait une raison spécifique pour créer un complément Python, je m'en tiendrai probablement à la création d'un outil de script Python .

Hornbydd
la source
1
@EnergeticCodfish Si cela a résolu votre problème, pouvez-vous cliquer sur le bouton vert Accepter, s'il vous plaît?
PolyGeo