私はユーザーにいくつかの情報(ID、名前、住所、郵便番号など)を最初に入力するように要求するArcPyツールを構築しようとしています。私のアドインインターフェイスを以下に示します。ユーザーがIDを入力すると、他のすべての関連情報(名前、住所など)が別の既知のテーブルに存在する場合、それらは次の空白に表示されます。同時に、ユーザーにすべてを入力させる代わりに。
つまり、ArcPyは、結果ウィンドウではなく、アドインインターフェイスでフォームに入力できますか?
検証は機能しますが、160,000レコードを超える.dbfで検索カーソルを実行すると、非常に遅くなります。以下のコードをどのように改善できますか、またはPythonスクリプトツールを使用する以外のより良い解決策はありますか?他の無関係な空白を入力した後でも、フォームが再びカーソルを通過するようです。
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
4
あなたが見てきましたカスタムツールの検証?他のフィールドに基づいてフィールドを設定するために使用できます。
—
バルバロッサ
古いスタイルのカーソルを使用しており、daモジュールで新しく高速な検索カーソルを使用したい場合、これにより速度の問題が解決されます。
—
Hornbydd 14年
あなたの提案をありがとう!テーブルを.csvファイルとして変換し、SearchCursor(arcpy.da)を使用すると、完全に機能します。
—
エネルギッシュなタラ魚14年
以前の投稿ですが、アドインを構築しているときに同様の問題が発生しました。searchcursorの.daフレーバーを使用し、csvやxlsxなどのよりシステムフレンドリーなデータ形式を使用することもできます。
—
COCO 2016年