2012-01-19 16 views
1

まずはPythonで新しく、私はArc GIS 9.3で作業します。Select_Analysisツール(PythonとArcGIS 9.3)のループ

"Select_Analysis"ツールでループを実現したいと思います。実際、私は街のすべてのバスステーションで構成される「駅」のレイヤーを持っています。 レイヤーには、ステーションがどのラインに位置しているかを説明するフィールド「rte_id」があります。

私は "rte_id" = 1、 "rte_id" = 2などのステーションを持つすべてのステーションを別々のレイヤーに保存したいと思います。したがって、ツールselect_analysisの使用。

私はループを作ることに決めました(私は70の異なる "rte_id"を持っています。しかし、それは動作しません、私は完全に失われています!ここで

は私のコードです:

import arcgisscripting, os, sys, string 
gp = arcgisscripting.create(9.3) 
gp.AddToolbox("C:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx") 
stations = "d:/Travaux/NantesMetropole/Traitements/SIG/stations.shp" 
field = "rte_id" 

for i in field: 
    gp.Select_Analysis (stations, "d:/Travaux/NantesMetropole/Traitements/SIG/stations_" + i + ".shp", field + "=" + i) 
    i = i+1 
    print "ok" 

そしてここでは、エラーメッセージです:

gp.Select_Analysis (stations, "d:/Travaux/NantesMetropole/Traitements/SIG/stations_" + i + ".shp", field + "=" + i) 
TypeError: can only concatenate list (not "str") to list 

あなたは私の問題を解決するための任意のアイデアを持っていますか?

ありがとうございます!フィールド名(「rte_id」) - ここ ジュリアン

答えて

1

主な問題は、あなたが文字列を反復処理しようとしている文字列 for i in field: です。

これは正しくありません。 フィールド "rte_id"のすべての値を反復処理する必要があります。

最も簡単な解決策:あなたはそのフィールド "rte_idを" 知っている値を持っている場合 1 - 70(たとえば)あなたは

for i in range(1, 71): 
     shp_name = "d:/Travaux/NantesMetropole/Traitements/SIG/stations_" + str(i) + ".shp" 
     expression = '{0} = {1}'.format(field, i) 
     gp.Select_Analysis (stations, shp_name , expression) 
     print "ok" 

より洗練されたソリューションを試すことができます: は、あなたが取得する必要がありますSQLの点でフィールド "rte_id"のすべての一意の値のリスト - GROUP BYを実行します。

実際には、1つのツールでSHPファイルに対してGROUP BY操作を実行することはできないと思います。

SearchCursorを使用して、すべての機能を繰り返し、あなたのフィールドの一意の値のリストを生成することができます。しかし、これはより複雑な作業です。

もう1つの方法は、ArcMapのシェープファイルテーブルで[サマライズ]オプションを使用することです(テーブルを開いて、列見出しを右クリックします)。あなたはあなたのスクリプトで読むことができる一意の値を持つdbfテーブルを取得します。

私はあなたが始めるのを助けてくれることを願っています!

現在、ArcGISを使用していないため、スクリプトの書き込みやチェックができません。

+0

ありがとうございました。私は最初の解決策を試しましたが(最も簡単です!)、うまくいきませんでした。私はそのエラーメッセージがあります:式= '{0} = {1}'。format(field、i) AttributeError: 'str'オブジェクトに 'format'属性がありません。それを訂正するために私は何ができますか? – Julien

+0

申し訳ありませんが、フォーマット方法はPython 2.6以降でのみ利用できます。おそらくあなたは2.5を使用しています。あなたは次のようにしてみることができます:expression = field + '=' + str(i) –

+0

私は式でフィールド名を二重引用符で囲む必要があると思います。結果は 'expression = '" rte_id "=' + str(i)' –

1

あなたが望むようにするために、このコードを大幅に変更する必要があります。まったく同じことをArcGISオンラインからSplit Layer By Attributeコードをダウンロードしたいだけかもしれません。