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

カーソルは、データベースプログラマがデータベースシステムクエリによって返される個々の行を処理するために使用されます。


2
以前のバージョンと比較して、データアクセスカーソルのパフォーマンスはどのように向上していますか?
データアクセスモジュールは、ArcGISバージョン10.1で導入されました。ESRIは、データアクセスモジュールを次のように記述します(ソース): データアクセスモジュールarcpy.daは、データを操作するためのPythonモジュールです。編集セッションの制御、編集操作、改善されたカーソルサポート(高速パフォーマンスを含む)、テーブルとフィーチャクラスのNumPy配列との変換、バージョン管理、レプリカ、ドメイン、サブタイプのワークフローのサポートが可能になります。 ただし、カーソルのパフォーマンスが以前の世代のカーソルよりも向上した理由に関する情報はほとんどありません。 添付の図は、新しいdaメソッドUpdateCursorと古いUpdateCursorメソッドのベンチマークテストの結果を示しています。基本的に、スクリプトは次のワークフローを実行します。 ランダムポイント(10、100、1000、10000、100000)を作成します 正規分布からランダムにサンプリングし、カーソルを使用してランダムポイント属性テーブルの新しい列に値を追加します 新しいUpdateCursorメソッドと古いUpdateCursorメソッドの両方について、各ランダムポイントシナリオを5回繰り返し、平均値をリストに書き込みます 結果をプロットする daカーソルのパフォーマンスを図に示されている程度まで改善するために、更新カーソルを使用して舞台裏で何が行われていますか? import arcpy, os, numpy, time arcpy.env.overwriteOutput = True outws = r'C:\temp' fc = os.path.join(outws, 'randomPoints.shp') iterations = [10, 100, 1000, 10000, 100000] old = [] new = [] meanOld = [] meanNew = [] for x in iterations: arcpy.CreateRandomPoints_management(outws, 'randomPoints', '', …

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 = …

3
辞書内包内のSearchCursorで使用されるカーソルを削除しますか?
withステートメントを使用してカーソルを開き、削除されていることを確認するのが最善の場合は、次のようにします。 with arcpy.da.UpdateCursor(fc,fields) as cursor: 次に、カーソルが次のような内包表記で反復可能オブジェクトとして使用される場合: d = {k:v for (k,v) in arcpy.da.SearchCursor(fc,fields)} 理解に使用した後、カーソルを削除する必要がありますか?
12 arcpy  cursor 

1
Pythonで属性テーブルを変更する最速の方法は?
少し前に、属性テーブルをPython辞書に変換するための簡単なPython関数を作成しました。キーはユーザー指定の一意のIDフィールド(通常はOIDフィールド)から取得されます。さらに、デフォルトではすべてのフィールドが辞書にコピーされますが、サブセットのみを指定できるようにするパラメーターが含まれています。 def make_attribute_dict(fc, key_field, attr_list=['*']): dict = {} fc_field_objects = arcpy.ListFields(fc) fc_fields = [field.name for field in fc_field_objects if field.type != 'Geometry'] if attr_list == ['*']: valid_fields = fc_fields else: valid_fields = [field for field in attr_list if field in fc_fields] if key_field not in valid_fields: cursor_fields = valid_fields + …

4
ArcGIS Python SearchCursorファイルのロック?
シェイプファイルのフィールドから値を取得してユーザーに返すスクリプトがあります。 arcpy.SearchCursorが呼び出されると、ArcMap 10.0がファイルをロックし、スクリプトの実行が終了した後も削除されないようです。ロックを解除するには、ArcMapを閉じる必要があります。スクリプトでは、SearchCursorオブジェクトと行オブジェクトを使用した後に削除します。 スクリプトを機能させる方法は、以降の実行でワークスペースフォルダーを削除しようとしますが、ロックのためにできないことです...もちろん、ArcMapを閉じるまでです。 このロックを解除するためのアドバイスはありますか?

2
datetime.date.today()から今日の日付で日付フィールドを計算していますか?
arcpy.CalculateField_managementを使用して現在の日付を属性テーブルに追加するツールの一部に取り組んでいます。私はインターウェブをずっとさまよいましたが、この問題の解決策を見つけることができません。 このコードを使用すると、「12:00:00 AM」という値が返されます input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013' today = datetime.date.today() dte = today.strftime('%m/%d/%Y') arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON") このコードを使用すると、今日の日付「10/07/2014」から値「06/19/1905」を取得します input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013' today = datetime.date.today() dte = str(today) arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON") 私が間違っていることについて何か考えはありますか?更新カーソルの使用を避けたいのですが、それが最後のオプションであればそうします。

5
大きなテーブルを持つPythonでArcGISカーソルを使用するときにパフォーマンスを向上させる方法は?
ファイルジオデータベースにかなり大きなポイントフィーチャクラスがあります(最大4 000 000レコード)。これは、100mの解像度を持つ通常の点のグリッドです。 このレイヤーで一種の一般化を行う必要があります。このために、各ポイントが4つの「古い」ポイントの中央にある新しいグリッドを作成します。 * * * * o o o * * * * o o o * * * * [*] =元のグリッドのポイント-[o] =新しいグリッドのポイント 新しい各ポイントの属性値は、古いグリッドの4つの近傍の重み付けされた値に基づいて計算されます。したがって、新しいグリッドのすべてのポイントでループし、それらのそれぞれについて、(属性テーブルのXとYの値を比較することによって)隣人を見つけるために、古いグリッドのすべてのポイントでループします。4つのネイバーが見つかったら、ループから抜け出します。 ここには方法論的な複雑さはありませんが、私の問題は、私の最初のテストに基づいて、このスクリプトが完了するまで数週間続くことです... それをより効率的にする可能性はありますか?私の頭の上のいくつかのアイデア: フィールドXとYにインデックスを付ける=>私はそうしましたが、大きなパフォーマンスの変化に気づきませんでした 属性ベースのクエリではなく、空間クエリを実行して近傍を検索します。それは実際に役立ちますか?ArcGISのどの空間関数がその仕事をするべきですか?たとえば、新しい各ポイントをバッファリングすることがより効率的であるとは思えない フィーチャクラスをNumPy配列に変換します。それは役に立ちますか?私はこれまでNumPyをあまり使用していないので、誰かが処理時間を短縮するのに本当に役立つと私に言わない限り、それについて詳しく知りたくありません。 他に何か?

6
ArcPyまたはModelBuilderを使用してポイントの位置を移動/オフセットしますか?
テキスト注釈機能を持つ、地理参照されていないCADレイヤー(この質問を参照)がいくつかあります。テキストをポイントに変換するモデルを作成しましたが、アノテーションをポイントフィーチャクラスに変換した後、CADテキストのアンカーポイントがCADテキストの中心(ポイントが属する場所)と一致しないことがわかります。 したがって、プログラムで(ArcPyまたはModelBuilderを使用して)提供するX、Yの測定値を使用して、現在の位置(デルタx、y)を基準にフィーチャを移動します。 これにより、オフセットCADアンカーポイントの代わりに、GISポイントをそれらが属する場所に戻すことができます。 このタスクを実行するにはどうすればよいですか? @PolyGeoはSHAPE @ XY IN 10.1 を使用して優れた答えを出しましたが、現在10.0を実行しています。10.0のアイデアは?


1
ArcPyのカーソル/行オブジェクトを削除する理由
誰かがこのコードの最後の2行が何をするかを理解するのを手伝ってくれませんか? import arcpy arcpy.env.workspace = "c:/esripress/python/data/exercise07" arcpy.env.overwriteOutput = True copy = arcpy.CopyFeatures_management("airports.shp","Results/airports.shp") fc = "Results/airports.shp" cursor = arcpy.da.UpdateCursor(fc, ["STATE"], ' "STATE" <> \'AK\'') for row in cursor: row[0] = "AK" cursor.updateRow(row) del row del cursor ループ関数が「AK」の値を持たない各レコードを通過し、そのレコードに「AK」の値を与えることを理解しています。しかし、私は理解していないことは何であるdel rowとdel cursor行うことを意味しています。
8 arcpy  cursor 

3
ArcPyを使用してX、Y座標からポリゴンフィーチャクラスを作成しますか?
次の座標を持つ単一(正方形)のポリゴンを含む新しいポリゴンフィーチャクラスを作成するスクリプトを記述しようとしています:(0、0)、(0、1,000)、(1,000、0)、および(1,000、1,000) 。 import arcpy import fileinput import string import os from arcpy import env env.workspace = "D:/UW/Winter_2016/501/w5_more_arcpy8_9_10/ex8" env.overwriteOutput = True infile = "D:/UW/Winter_2016/501/w5_more_arcpy8_9_10/ex8/coordinatesEx8.txt" for line in fileinput.FileInput(infile): ID, X, Y = string.split(line, " ") array.add(arcpy.Point(X, Y)) cursor.insertRow([arcpy.Polygon(array)]) fileinput.close() outpath = "D:/UW/Winter_2016/501/w5_more_arcpy8_9_10/ex8" newfc = "newFeatureClassEx8.shp" arcpy.CreateFeatureclass_management(outpath, newfc, "Polygon") cursor = arcpy.da.InsertCursor(newfc, …

5
カーソルで隣接する行にアクセスする方法は?
添付のスクリーンショットでは、属性に2つの対象フィールド「a」と「b」が含まれています。いくつかの計算を行うために、隣接する行にアクセスするスクリプトを記述したいと思います。単一の行にアクセスするには、次のUpdateCursorを使用します。 fc = r'C:\path\to\fc' with arcpy.da.UpdateCursor(fc, ["a", "b"]) as cursor: for row in cursor: # Do something たとえば、OBJECTID 4の場合、OBJECTID 4行に隣接するフィールド「a」の行の値の合計(つまり、1 + 3)を計算し、その値を「b」フィールドのOBJECTID 4行に追加します。カーソルで隣接する行にアクセスして、このような計算をするにはどうすればよいですか?

3
ArcPyカーソルの背後で使用されているテクノロジーは何ですか?
ArcGIS Server 10.0を使用しています。arcpy検索、更新、カーソル挿入を使用したジオプロセシングがあります。これらのカーソルの背後にあるテクノロジーについて詳しく知りたいのですが。 データベースへの接続にドライバーまたはプールを使用していますか(Oracle 11gを使用しています)? カーソルの作成時に一度DBへの接続を開き、カーソルが削除されるとそれを閉じますか?トランザクションはどうですか? 行が更新または挿入されるたびに、カーソルは新しい接続とDBへのトランザクションを開きますか?

2
arcpy.da.SearchCursorを使用して2番目のフィールドの一意の値を取得しますか?
フィーチャクラスがあり、arcpy.da.SearchCursorを使用して、フィールドの一意の値(名前など)を取得しています。このメソッドを使用して、別のフィールド(diffフィールド= Name2)の関連する行の値を取得するにはどうすればよいですか? これまでのところ、これを使用して、フィールド名のみで一意の値を取得します。 values = [row[0] for row in arcpy.da.SearchCursor(fc, ("Name"))] uniqueValues = set(values) for value in uniqueValues: フィーチャクラスを検索するときに、別のフィールド(フィールドName2)の値も取得するにはどうすればよいですか?
8 arcpy  cursor 

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