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?
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
la source
Réponses:
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 .
la source