1

まず、私はPythonを初めて使用し、ArcGIS9.3に取り組んでいます。

「Select_Analysis」ツールでループを実現したいと思います。確かに、私は都市のすべてのバス停で構成される層の「駅」を持っています。レイヤーには、ステーションが配置されている回線を説明するフィールド「rte_id」があります。

そして、「rte_id」= 1のすべてのステーション、「rte_id」=2のステーションなどを個別のレイヤーに保存したいと思います。したがって、ツールselect_analysisを使用します。

そこで、ループを作成することにしました(70の異なる「rte_id」があります.... 70の異なるレイヤーを作成します!)。しかし、それは機能せず、私は完全に迷子になっています!

これが私のコードです:

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

私の問題を解決するためのアイデアはありますか?

前もって感謝します!ジュリアン

4

2 に答える 2

1

必要な処理を行うには、このコードに大幅な変更を加える必要があります。まったく同じことを行う ArcGIS online から属性コードによるレイヤーの分割をダウンロードすることもできます。

于 2012-01-21T18:55:25.020 に答える
1

ここでの主な問題は文字列にあります。文字 for i in field: 列を反復しようとしています - フィールド名 ("rte_id")。

これは正しくありません。フィールド「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"

より洗練された解決策: GROUP BY を実行するには、SQL の観点からフィールド "rte_id" のすべての一意の値のリストを取得する必要があります。

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

SearchCursor を使用して、すべての機能を反復処理し、フィールドの一意の値のリストを生成できます。しかし、これはより複雑な作業です。

もう 1 つの方法は、ArcMap のシェープファイル テーブルで [集計] オプションを使用することです (テーブルを開き、列ヘッダーを右クリックします)。スクリプトで読み取ることができる一意の値を持つ dbf テーブルを取得します。

はじめるきっかけになれば幸いです!

現在、ArcGIS を持っていないため、スクリプトを作成して確認することはできません。

于 2012-01-19T23:08:19.000 に答える