2017-04-12 6 views
-1

フォルダを介した空間結合の繰り返しを試みています。次に、最初の空間結合の2番目の空間結合を繰り返します。ArcPyを使用した空間結合のパラメータの認識エラー

これは私の最初のスクリプトです:

import arcpy, os, sys, glob 

'''This script loops a spatial join through all the feature classes 
in the input folder, then performs a second spatial join on the output 
files''' 


#set local variables 

input = "C:\\Users\\Ryck\\Test\\test_Input" 
boundary = "C:\\Users\\Ryck\\Test\\area_Input\\boundary_Test.shp" 
admin = "C:\\Users\\Ryck\\Test\\area_Input\\admi_Boundary_Test.shp" 
outloc = "C:\\Users\\Ryck\\Test\\join_02" 

#overwrite any files with the same name 
arcpy.env.overwriteOutput = True 

#perform spatial joins 

for fc in input: 
    outfile = outloc + fc 
    join1 = [arcpy.SpatialJoin_analysis(fc,boundary,outfile) for fc in 
      input] 

    for fc in join1: 
     arcpy.SpatialJoin_analysis(fc,admin,outfile) 

私はError00732受信し続ける:ターゲットの特徴:データセットCが存在しないか、サポートされていません。

これは単純なエラーだと確信していますが、このエラーを解決するためにこれまでに推奨されていたソリューションでは、結果を自分のフォルダに出力することはできません。任意の提案を事前に

おかげで

+1

ArcPyについては、[gis.se] Stack Exchangeで研究/尋ねる方がはるかに良いと思います。 – PolyGeo

+0

@ PolyGeo謝罪します。私は今これを理解している。方向をありがとう。 – beauxgeo

答えて

0

あなたは、空間上の結合を実行する、指定したディレクトリをループしようとしているように見える(シェープファイルを?)そこに含まれます。

しかし、この構文が問題である:

input = "C:\\Users\\Ryck\\Test\\test_Input" 
for fc in input: 
    # do things to fc 

この場合は、forループがiterating over a stringです。だから毎回ループを通過するたびに1文字ずつ取り込まれます:最初にC、次に:、そして\ ...そしてもちろんarcpy関数は文字入力ではなくファイルパスを必要とするため、この入力に失敗します。したがって、エラー:ターゲット機能:データセットCは存在しません...


ファイルご入力ディレクトリ内通じ代わりにループするには、カップルの余分なステップを必要とします。 Build a list of filesを入力し、そのリストを反復処理します。

arcpy.env.workspace = input   # sets "workspace" to input directory, for next tool 
shp_list = arcpy.ListFiles("*.shp") # list of all shapefiles in workspace 
for fc in shp_list: 
    # do things to fc 

(参考文献GIS.SE.上this answer

+0

ありがとうございました!私はこれがGIS Stack Exchangeにもっと適していたことに気付きました。 – beauxgeo

+0

Python固有の質問がGIS.SEやStackOverflowにうまく収まっているかどうかは少し怪しいです。この場合、エラーはPythonの問題でしたが、解決策はArcPyツールです:) – Erica

0

いくつかのねじれを通じて勤務した後、および@ericaのアドバイスのおかげで、私は、forループの入れ子になった私のオリジナルのコンセプトを放棄することを決めた、とより簡単にアプローチします。私はまだ変数に割り当てられ、空間結合のパラメータとして使用できるシステム引数を作成するGUIに取り組んでいますが、今のところこれが私が試した解決策です。

import arcpy 

input = "C:\\Users\\Ryck\\Test\\test_Input\\" 
boundary = "C:\\Users\\Ryck\\Test\\area_Input\\boundary_Test.shp" 
outloc = "C:\\Users\\ryck\\Test\\join_01" 
admin = "C:\\Users\\Ryck\\Test\\area_Input\\admin_boundary_Test.shp" 
outloc1 = "C:\\Users\\Ryck\\Test\\join_02" 

arcpy.env.workspace = input 
arcpy.env.overwriteOutput = True 

shp_list = arcpy.ListFeatureClasses() 

print shp_list 

for fc in shp_list: 
    join1 = 
arcpy.SpatialJoin_analysis(fc,boundary,"C:\\Users\\ryck\\Test\\join_01\\" + 
          fc) 

arcpy.env.workspace = outloc 

fc_list = arcpy.ListFeatureClasses() 

print fc_list 

for fc in fc_list: 
    arcpy.SpatialJoin_analysis(fc,admin,"C:\\Users\\ryck\\Test\\join_02\\" + 
           fc) 

複数の環境を設定し、実際のパスを使用すると、気が利いているように感じますが、この時点で私にとってはうまくいきます。

関連する問題