2016-04-04 19 views
1

フィーチャクラスをジオデータベースにコピーしようとしています。私はフォルダ内のすべてのフィーチャクラスをループし、ポリゴンフィーチャクラスのみをコピーしています。私の問題は、最初のポリゴンフィーチャクラスをコピーすると、それが 'shp'という名前に変更され、2番目の 'shp'も同様に名前を付けることになります。変数fcnameは、コピー機能の外で完全なフィーチャクラス名( 'counties.shp'と 'new_mexico.shp')を返しますが、関数内では正しく機能しません。Pyrhon変数が関数の外で動作していますが、内部にはありません

fcname変数をテストするために、以下のコードにコメントアウトして実行したい機能があります。フォルダには5つのフィーチャクラスがあり、そのうちの2つはポリゴンフィーチャクラスです。コメントを外すと、コードは最初のポリゴンフィーチャクラスを通過し、fcnameは 'counties.shp'ではなく 'shp'になります。これは、 'shp'が既にgdbに存在するため、エラーになる2番目のフィーチャクラスに対しても同じことを行います。

import arcpy 

# Set initial variables with different pathnames available 
# whether I am working on my home or work computer 

pathhome = "G:/ESRIScriptArcGIS/Python/Data/Exercise06" 
pathwork = "C:/ESRIPress/Python/Data/Exercise06" 
arcpy.env.workspace = pathwork 
gdbname ="NewDatabase.gdb" 

fclist = arcpy.ListFeatureClasses() 

# Create new gdb 
##arcpy.management.CreateFileGDB(path, gdbname) 
newgdb = path + "/" + gdbname 

# Loop through list 
for fc in fclist: 
    desc = arcpy.Describe(fc) 
    fcname = desc.name 
    outpath = newgdb + "/" + fcname 

    # Check for polygon then copy 
    if desc.shapeType == "Polygon": 
     ##arcpy.management.CopyFeatures(fcname,outpath) 
     ##print fcname + "copied." 
     print fcname 
    else: 
     print "Not a polygon feature class" 

ありがとうございました!

+0

「fcname」はあなたが投稿したコードには完全にファイルですが、一旦 'CopyFeatures'に入ると切り詰められますか?または、他の何か? –

+0

ちょうどshpに切り捨てられていました。 –

答えて

1

コードに誤りがある可能性があります。しかし、私はあなたのアプローチの誤りをより明白に見る。

クラスをシェイプでフィルタリングする場合は、関数で受け入れられる引数feature_typeを使用できます。

は、マニュアルを参照してください:http://pro.arcgis.com/en/pro-app/arcpy/functions/listfeatureclasses.htm

あなたはループのためにあなたのデータをフィルタリングするために、それ以上を使用する必要はありません。

2

問題の答えが見つかりました。 CopyFeaturesは、引数out_feature_classに完全なファイルパスを必要としません。私はファイルパスの終わりから ".shp"を取り除き、それはうまくいった。

また、私はHectorのアドバイスを受け取り、ListFeatureClasses引数のポリゴンだけにフィルタをかけましたが、結果のリストを歩き回り、各フィーチャクラスをコピーするループが必要でした。

ここでは、結果として得られたコードがあります。

import arcpy 

# Set initial variables with different pathnames available 
# whether I am working on my home or work computer 

pathhome = "G:/ESRIScriptArcGIS/Python/Data/Exercise06" 
pathwork = "C:/ESRIPress/Python/Data/Exercise06" 
arcpy.env.workspace = pathwork 
gdbname ="NewDatabase.gdb" 

fclist = arcpy.ListFeatureClasses("", "Polygon") 

# Create new gdb 
arcpy.management.CreateFileGDB(pathwork, gdbname) 
newgdb = pathwork + "/" + gdbname 

# Loop through list 
for fc in fclist: 
    desc = arcpy.Describe(fc) 
    fcname = str(desc.name) 
    outpath = newgdb + "/" + fcname.replace(".shp","") 



    arcpy.management.CopyFeatures(fcname,outpath) 
    print fcname + " has been copied."