ArcGIS ModelBuilderのCollect Values出力からデータをエクスポートしますか?


11

現在、ModelBuilderで遊んでいます。現在持っているモデルの写真を追加しました。

このモデルは現在6つのシェープファイルを反復しているため、「出力値」のそれぞれにはリストに6つの数字が含まれています。これらのリストからテーブル/テキストファイルなどに値を抽出する方法が見つかりません。

これを行う方法はありますか?

モデル

これは、モデルの実行後に「出力値」を開いたときに表示されるものです。 ここに画像の説明を入力してください

どういうわけかこの6つの数字を取得したいだけです...


これは基本的にあなたがここで正しいと尋ねているのと同じことですか?gis.stackexchange.com/questions/25922/…値の収集はまさにそれを行います。ヘルプを読むと、別のツールに渡すことができる値を収集していることがわかります。それで、あなたは値をどうしようとしていますか?ファイルに記録するだけですか、それともさらに処理するために必要ですか?
-theJones

それらをファイルに記録したいだけです。出力値を抽出するためにモデルビルダーに出力値を入力するツールが見つかりません。
JPD

回答:


17

これを行うには、計算(データ管理)ツールといくつかのPythonマジックを使用します。この関連質問も参照してください:Arcgisモデルビルダーに任意のコードを追加しますか?

多値変数は、値のちょうどセミコロンで区切られた文字列であるので、どのようなmultivaluesToCsv以下の機能がありませんがリストに多値変数を分割し、その後に書かれている行にそれらを転置されるCSV(カンマ区切り値)テキストファイル。

モデル反復子は、モデル内のすべてのプロセスを反復ごとに1回実行します。これは、値の計算ツールでは望ましくありません。これを実現するには、別の外側モデルを作成して、元の内側モデルをラップします。これは、ヘルプトピック「モデル内でのモデルの統合」で説明されています。

そのため、これを機能させるために必要なことは次のとおりです。

内部モデル -フィーチャクラスの反復、処理、値の収集:

  1. 「内部」モデルとなる元のモデルで、別の値の収集ツールを追加してName変数の値を収集し、距離統計値を対応するフィーチャクラス名にマッピングできるようにします。
  2. 入力および出力変数をモデルパラメーターとして公開します(楕円を右クリックして、[モデルパラメーター]をオンにします)。値の収集ツールの各出力、および入力ワークスペースなどの必要な入力パラメーターごとにこれを実行します。
  3. 内部モデルを保存して閉じます。

外側のモデル -内側のモデルを実行し、内側のモデルが完了したときに値の計算ツールを1回だけ実行します。

  1. 新しいモデルを作成します-これが「外部」モデルになります。
  2. タイプの変数を追加して、出力CSVファイルを作成Folderする場所を指定できるようにします。
  3. タイプの変数を追加して、出力CSVファイルの名前Stringを指定できるようにします。
  4. 内部モデルを新しいモデルに追加します(ArcToolboxからドラッグアンドドロップするか、データまたはツールを右クリックして追加し、内部モデルを参照して[追加]をクリックします)
  5. 入力ワークスペースなど、外部モデルから設定できるようにする内部モデルのパラメーターの変数を作成します(内部モデルを右クリックして、[変数からパラメーターを作成]を選択します)。
  6. 新しいモデルに値の計算ツールを追加します
  7. [値の計算]ツールの適切なボックスに次を貼り付けます。

    表現

    multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
    • これは、インライン変数置換を使用して、モデル変数を関数に渡します。モデル変数名に一致するように調整します。
    • r"%Output CSV File Location%"重要である:これは、これがあることを示している生の文字列。通常、Windowsファイルシステムのパスにはバックスラッシュ(Pythonのエスケープ文字)が含まれているため、これを使用して、Pythonがバックスラッシュと後続の文字を特殊文字シーケンスとして誤って解釈しないようにする必要があります。
    • インライン変数は引用符で囲む必要があります。引用符がないと、Pythonは文字列ではなく識別子と見なします。

    コードブロック:

    import os, csv
    
    def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
        ext = 'csv' # Define output file extension (e.g. csv or txt)
        header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
    
        # Join CSV file path and name, adding extension if necessary
        csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
    
        # Open text file for writing
        with open(csvfile, 'wb') as f:
            w = csv.writer(f)
            w.writerow(header) # Write header row
            rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
            w.writerows(rows)
        return csvfile
    
  8. (オプション)モデルのツールダイアログから実行したり、他のモデル/スクリプトとチェーンしたりできるようにしたい場合は、入力変数と出力変数をモデルパラメーターとして公開します。外部モデルの唯一の出力はCSVファイルです。

  9. (オプション)入力変数と内部モデル出力を前提条件として[値の計算]ツールに接続します。私はこれが実際に何の効果も持っているとは思わない、それは単に何が起こっているかを視覚的に明確にするだけだ。

これをModelBuilderでテストし、動作させました(スクリーンショットを参照)。

内部モデル内部モデル

外側モデル: 外側モデル

内部モデルはすべてのプロセスをフィーチャクラスごとに1回実行し、その後、値の計算ツールを最後に1回実行してCSVファイルを1回だけ出力します。


こんにちは、返信に多大な労力を費やしていただき、返信が遅くなりましたことをおologiesび申し上げます。説明したとおりにモデルを実行しようとしていますが、CSVで問題が発生しています。Excelで空のCSVファイルを作成して保存し、モデルにロードしました。エラー000539:式の実行エラー:multivaluesToCsv(r "%CSV File%"、 "%FC Name Values%"、 "%Minimum Values%"、 "%Average Values%"、 "%Maximum Values%")<type 'exceptions .IOError '>:[Errno 13]許可が拒否されました:u'%CSV File% 'の実行に失敗しました(値の計算)。このエラーが引き続き発生します。CSVはCSVFile.csvと呼ばれます。
JPD

1
ちょうどそれを修正-これは完璧なソリューションです。ご協力ありがとうございます!
JPD

PythonコードがCSVファイルを作成します。事前に作成する必要はありません。これまで見てきたように、Excelでファイルを開くと、ファイルがロックされ、閉じるまでPythonによって書き込むことができません。
blah238

2
参考までに、ネストされたモデルを使用して値の計算が複数回実行されるのを回避し、テキストファイルが事前に存在しなければならない問題を修正するように、手順とスクリーンショットを更新しました(2つの別個のパラメーターとして出力場所とファイル名を指定するようになりました)。
-blah238

素晴らしい答えです!Geostatistical Layer Cross Validation統計をcsvファイルに出力する同様の問題を解決するのに役立ちました。ありがとう@ blah238!
コットン。ロックウッド16

1

モデルが記述する出力は、属性テーブルで更新された値にすぎませんか?更新されたシェープファイルに関連付けられた.dbfファイルを単純に開くことはできませんか?

これに失敗すると、テーブル選択(分析ツール>抽出)がSQLクエリで機能するはずです。


こんにちは、返信ありがとうございます。各シェープファイルの.dbfファイルは更新されないのではないかと思います。「最小/平均/最大距離」または「出力値」をツールの入力として接続できないため、モデルビルダーに「テーブル選択」を追加しても機能しません。
JPD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.