タグ付けされた質問 「arcpy」

Esriによって作成されたサイトパッケージで、ArcGIS Desktop(ArcMapおよびArcGIS Pro)のジオプロセシング、マッピングなどをPythonに公開します。

1
ArcMapのPythonスクリプト内の面積を計算する
Pythonスクリプト内でポリゴンの面積を計算しようとしています。2つのポリゴンをマージして新しいポリゴンを作成し、結果のポリゴンの領域を出力ファイルのフィールドに追加します。ポリゴンは通常のシェープファイルに保存され、投影されます。できればマップ単位の面積。 これは非常に一般的で簡単な作業だと思っていましたが、Googleの多くにもかかわらず、今のところ有効なソリューションを見つけることができませんでした。 arcpy.updateCursor値を計算したら挿入することを計画していました(この段階ではFCに機能は1つしかありません)ので、変数として返すことができるのが最も簡単です。同じタスクを実行する(面積値を正しいフィールドに取得する)代替ソリューションも機能します。 Pythonのフィールド計算機も試しました。ヘルプページから変更したものは、次のように動作すると思いましたが、これまでのところ運はありません。 arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE') exp = "float(!SHAPE.AREA!.split())" arcpy.CalculateField_management(tempPgs, "Shape_area", exp) Windows 7でPython 2.7を使用してArcGIS Basic 10.1 SP1を実行する。 現在のコードの関連部分は次のようになります。 #/.../ arcpy.Copy_management(inpgs, outpgs) arcpy.AddField_management(outpgs, 'Shape_area', 'LONG') fields = AM.FieldLst(outpgs) #/.../ # Identify and search for shapes smaller than minimum area where1 = '"' + 'Shape_Area' + '" < ' + …

5
ArcPyを使用して1600万件のレコードをループしますか?
8つの列と1670万件のレコードを持つテーブルがあります。列に対してif-else方程式のセットを実行する必要があります。UpdateCursorモジュールを使用してスクリプトを記述しましたが、数百万件のレコードを記録した後、メモリが不足します。これらの1670万レコードを処理するより良い方法があるかどうか疑問に思っていました。 import arcpy arcpy.TableToTable_conversion("combine_2013", "D:/mosaic.gdb", "combo_table") c_table = "D:/mosaic.gdb/combo_table" fields = ['dev_agg', 'herb_agg','forest_agg','wat_agg', 'cate_2'] start_time = time.time() print "Script Started" with arcpy.da.UpdateCursor(c_table, fields) as cursor: for row in cursor: # row's 0,1,2,3,4 = dev, herb, forest, water, category #classficiation water = 1; herb = 2; dev = 3; forest = …

2
タスクスケジューラでPythonスクリプトを実行しています-スクリプトは実行されません
スクリプトを開いて実行する必要なく、毎月定期的に実行したいスクリプトがあります。Windowsタスクスケジューラで見つけることができるすべてのWebページを参照し、その指示に従いました。ただし、タスクスケジューラからスクリプトを実行すると、スクリプトはPythonでのみ開かれ、実行されません。 タスクスケジューラの実行ウィンドウで、スクリプトのみへのパスと、Pythonプログラムへのパスを含むスクリプトへのパスの両方を入力しようとしました。このブログ投稿で提案されているように、スクリプトとして引数としてスクリプトを使用して、Pythonプログラムへのパスを入力しようとしました。私のスクリプトはハードコーディングされているため、引数を追加する必要はないと思います。 明らかな何かが欠けていますか? PythonコマンドラインではなくPythonプログラムへのパスを使用していたため、問題が発生していました。つまり、「C:\ Python27 \ ArcGIS10.1 \ python.exe」を使用する必要があるときに、「C:\ Python27 \ ArcGIS10.1 \ Lib \ site-packages \ pythonwin \ Pythonwin.exe」を使用していました。


4
ArcPyを使用してジオメトリをWKTに変換しますか?
PythonおよびArcPy(非ArcPyモジュールなし)を使用したジオプロセシング操作中に、ArcGISレイヤーの単一のフィーチャ(または潜在的に多くのフィーチャ)をWell Known Text(WKT)形式に変換できるようにしたいと思います。その目的は、WKTをSQL Server Spatialに渡し、ArcGIS GPツールセットの外部で追加の処理を行うことです。ArcGISジオメトリフィーチャをArcPy経由でWKTに変換する方法はありますか? 私は自分が何を求めているのかを見つけることなく、すでに以下を読んでいます: シェープファイルからテキスト(非推奨の「サンプル」ツールボックスのツールを参照) ESRIジオメトリとWKT間の変換(ArcObjectsまたは非ArcPyモジュールを使用) シェープファイルをWKTに変換する方法は?(QGISとOGRを使用) どうやら「と呼ばれるツールがありました書き込みは、テキストファイルに機能サンプルツールボックスにあった(Pythonのスクリプトのように見える)」が、そのツールボックスがされたバージョン10で非推奨と私はサンプルツールボックス(のコピーを見つけることができませんマシンにv10.0)があります。現在の解決策がない場合、誰かが私にサンプルのコピーを指し示すことができれば、そのツールを使用してもまったく問題ありません。
13 arcpy  convert  wkt 

2
arcpy.RasterToNumPyArrayを使用して空間参照を保持しますか?
ArcGIS 10.1を使用していて、2つの既存のラスターに基づいて新しいラスターを作成したい。RasterToNumPyArrayは私が適応したい良い例があります。 import arcpy import numpy myArray = arcpy.RasterToNumPyArray('C:/data/inRaster') myArraySum = myArray.sum(1) myArraySum.shape = (myArray.shape[0],1) myArrayPerc = (myArray * 1.0)/ myArraySum newRaster = arcpy.NumPyArrayToRaster(myArrayPerc) newRaster.save("C:/output/fgdb.gdb/PercentRaster") 問題は、空間参照とセルサイズを削除することです。arcpy.envを実行する必要があると考えましたが、入力ラスターに基づいてそれらを設定するにはどうすればよいですか?私はそれを把握することはできません。 ルークの答えを取り上げると、これは私の暫定的な解決策です。 Lukeのソリューションはどちらも、空間参照、範囲、セルサイズを正しく設定しました。ただし、最初の方法では配列内のデータが正しく伝達されず、出力ラスタにはどこでもnodataが入力されます。彼の2番目の方法はほとんど動作しますが、nodataの大きな領域がある場合は、ブロック状のゼロと255で埋められます。これは、nodataセルをどのように処理したかに関係している可能性があります。私が話していることの画像を含めました。 #Setting the raster properties directly import arcpy import numpy inRaster0='C:/workspace/test0.tif' inRaster1='C:/workspace/test1.tif' outRaster='C:/workspace/test2.tif' dsc=arcpy.Describe(inRaster0) sr=dsc.SpatialReference ext=dsc.Extent ll=arcpy.Point(ext.XMin,ext.YMin) # sorry that i modify calculation …

3
ArcGIS Pythonコードを共有するためのファイル構成
ArcGIS Pythonコードとジオプロセシングツールを共有するための最適な組織構造は何ですか?または、コードの共有とツールの共有は別々の質問ですか? Esriには、Arcgis 9.3および10.0向けに公開されているツール構造の配布方法があります。 しかし、他の場所Also do avoid distributing your code the way its done in Arc Scripts or Code Galleriesでは、ネイティブpython Distutilsを好むようなことを言っています。Esriには10.1(ref)に対応する配布ツールの記事がないようで、反論にある程度の重みを与えています。 GIS.seとは何ですか? 更新:おそらく遅すぎるかもしれませんが、この質問の核心は、共有に使用されるツール(arcgis online、googleドライブ、dropbox、github、bitbucketなど)が登場する前のファイルおよびフォルダー構造のベストプラクティスに関するものです。演奏する。 Update2:そして、見かけ上孤児のdistutilsアプローチについて誰も発言しませんか?

1
Pythonを使用してTOCにレイヤーを追加します
しばらくの間、TOCにレイヤーを追加することに取り組んでいます。追加したレイヤーを1つに管理しましたが、フォルダーをループしてすべてのレイヤーを追加する必要があります。シェープファイルをまったく追加できません。レイヤーファイルのみ。以下は私がいる場所のコードです: for layer in shp_List: mxd = arcpy.mapping.MapDocument("CURRENT") dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0] outlayer = lyr layerfile = os.path.join(base_Folder, lyr + ".lyr") arcpy.MakeFeatureLayer_management(layer, outlayer) arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE") addlayer = arcpy.mapping.Layer(layerfile) arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM") #addLayer = arcpy.mapping.Layer(layer) #arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM") #arcpy.RefreshTOC() #arcpy.RefreshActiveView() del addlayer, mxd 上記のコードは各レイヤーを目次に追加し、イライラさせてそれを削除し、次のレイヤーを追加します。スクリプト全体が終了すると、TOCには何も残りません。このスクリプトをモデルに追加し、派生した出力パラメーターを作成して、「表示に追加」をオンにしてモデルパラメーターとして追加しようとしました。また、ジオプロセシングオプションをチェックして、表示に追加するボックスがオンになっていることを確認しました。Arc 10を実行しています(サービスパックなし)。誰でも助けることができますか?

3
Pythonリストにある場合、属性によって機能を選択しますか?
Pythonで属性による選択を完了しようとしていますが、属性がリストに存在するかどうかのクエリに基づいています。 そのような最も単純なクエリは、次のようになります。 qry = " \"OBJECTID\" in oid_list" arcpy.SelectLayersByAttribute_management(inft, "NEW_SELECTION", qry) しかし、そのアプローチは無効な式エラーを返します。 過去には、このタイプのクエリには、次のようなより複雑な構文を使用する必要がありました。 sqlQuery2 = "nid in (" + ','.join(["'"+x+"'" for x in delta_list]) +")" しかし、このスニペットの適応も私にとってはうまくいかないようです。 "OBJECTID_1 in (" + ','.join(["'"+str(x)+"'" for x in oid_list]) +")" ここで何が欠けていますか?

1
ArcGIS 10の「フィールドマッピング」-ArcPy
空間結合といくつかの簡単な計算を行うPythonスクリプトを作成しました。私の問題は、ある特定のフィールドにマージルールを設定し、残りのフィールドをそのままにしておくことです。たとえば、空間の場所で結合されたときに、最初に発生した人口カウントを取得するマージルール「最初」を使用する人口フィールドがあります。別の多角形の空間範囲で見つかったすべての多角形間の人口値を合計するために、マージルールを「合計」に設定できるようにします。 フィールドマップとフィールドマッピングオブジェクトを徹底的にいじくり回しましたが、適切に機能していないようです。具体的には、メソッドpopFieldMap.mergeRule = 'Sum'を使用してmergeRuleを設定しましたが、常に「最初」に戻ります。 空間結合の1つのフィールドのマージルールをプログラムで変更する方法はありますか? ありがとう! ここに私のコードがあります(それは私のデータに非常に固有のものであり、スクリプトの特定の段階をテストする行が含まれていることに注意してください): import arcpy,sys,os #Get the Files involved, set some variables. SectorTable = sys.argv[1] SectorShape = sys.argv[2] MaxDev = sys.argv[3] PopulationFC = sys.argv[4] OutputFC = sys.argv[5] DeviationField ="Angle_Deviation" ID = "SectorID" newID = "BP_ID" mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd)[0] #Check to see if ID …

2
インメモリテーブルビューを削除しますか?
Pythonスクリプトでは、数千のExcelファイルを循環し、arcpy.MakeTableViewを使用して、各ファイルの最初のスプレッドシートからメモリ内にテーブルビューを作成しています。インメモリビューへの参照を削除するにはどうすればよいですか?テーブル名を格納する変数を削除しようとしましたが、役に立ちませんでした。 tblView = sheetName arcpy.MakeTableView_management(excelSheet, tblView, .....) ## Process the table here del tblView 参照を削除する理由は、Excelファイルでシート名が重複する場合があるためです。テーブルビューが「Sheet1」という名前で作成されている場合、同じ名前で別のテーブルビューを作成することはできません。さらに、処理中のExcelファイルの数とサイズが原因で、これらのすべてのテーブルビューがスクリプトの存続期間中保持される場合のパフォーマンスへの影響が心配です。
13 arcpy 

2
マルチプロセッシングエラー-ArcGISの実装
ここのコミュニティの他の誰かが空間分析にマルチプロセッシングを使用しようとしたのではないかと思っていました。つまり、一連のラスターを反復処理し、それぞれに対してマルチプロセッシングジョブを作成し、1つのdef関数内で多数のジオプロセシングステップを実行しようとしています。の線に沿って何か def net(RasterImage, OutFolderDir): arcpy.env.overwriteOutput = True arcpy.env.workspace = OutFolderDir DEM_Prj = DEM_Prj.tif try: arcpy.ProjectRaster_management(RasterImage, DEM_Prj.... FocalStatistics(DEM_prj....) ... if __name__ == '__main__': InputFolder = r'C:\test\somepath' Output = r'C:\test\somepath2' arcpy.env.workspace = InputFolder arcpy.env.scratchWorkspace = r'C:\test.gdb' fcs = arcpy.ListRasters('*') pool = multiprocessing.Pool(4) jobs = [] for fc in fcs: rIn = os.path.join(InputFolder,fc) …

1
ArcPyを使用したファイル検証?
ディレクトリをスキャンし、ファイル名、形式、バンド数などの基本的なラスターデータ情報を出力するスクリプトがあります。ディレクトリにラスターデータが含まれていない場合(つまり、その他のもの)ラスターデータよりも)、ディレクトリに正しいデータタイプがないことを示すメッセージが表示されます。 ArcPyには、Describe()フォルダー内のデータのタイプを判別するために使用できる機能がありますが、その実装方法がわかりません。これは私がこれまでに持っているものです: rasterList = arcpy.ListRasters("*", "ALL") filesType = arcpy.DataType('RasterDataset') # Can use `DatasetType` as well. # I've tested this function to describe # raster data and ArcPy prints out # 'RasterDataset', that is why I have it # there in the brackets. for name in rasterList: if rasterList == filesType: …
13 arcpy 


3
エラーメッセージを表示せずに早期終了するために、arcpyスクリプトでsys.exit(0)を使用するにはどうすればよいですか?
ArcGIS 10.0用のarcpyツールスクリプトには、2つの主要な機能セクションがあります。ユーザーは、2番目のセクションを実行するかどうかを選択できます。ユーザーが2番目のセクションを実行しないことを選択した場合、ツール結果ウィンドウにエラーメッセージを表示せずに、クリーンアップ関数を実行してsys.exit(0)でスクリプトを終了するだけです。 GIS-SEにはarcpyスクリプトの終了に関する2つの主要なスレッドがありますが、そのソリューションはエラーメッセージを具体的に扱っていません。コードの一般的な構造は次のとおりです。 import sys ##import arcpy def CleanUp(): print 'Cleaning up ...\n' def finish(): CleanUp() print 'Exiting ...' sys.exit(0) do_more = False #or True ... input from user #Section 1: do some stuff print 'Doing some stuff ...\n' if not do_more: finish() #Section 2: do more stuff print 'doing …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.