ArcPy Cost Path AnalysisツールがArcObjectsよりも高速である理由を理解できますか?[閉まっている]


15

Pythonを使用してジオプロセシングスクリプト/サービスを作成しましたが、ArcObjectsを使用して同等の操作を実行するとパフォーマンスが向上するという印象を受けました。

私が投稿したのArcGIS ServerのGPサービス- RasterIO.dllクラッシュのArcSOC.exeをし、ArcGISのジオプロセシングスクリプトは、デスクトップに罰金を実行しますが、ジオプロセシングサービスとしてクラッシュしますか?Spatial Analystツールを使用してジオプロセシングサービスとして機能するジオプロセシングスクリプトを取得する方法について、過去数日間にわたって説明しました。私の締め切りはすぐに近づいているので、希望の機能を達成するためにSOEルートに行くことにしました。

.NET ESRI.ArcGIS.SpatialAnalyst.RasterDistanceOpClass、特にCostDistanceFull()およびCostPath()メソッドを使用すると、ArcObjectsでコストパス分析を取得するのは比較的簡単でした。

私が物事をどのように行っているかのコードスニペット:

Python

# Get Cost Path Origin and Destination Points
inputPointsShp = 'D:/RasterStuff/test_points.shp'
arcpy.MakeFeatureLayer_management(inputPointsShp,"origin",' "TYPE" = \'ORIGIN\' ')
arcpy.MakeFeatureLayer_management(inputPointsShp,"destination",' "TYPE" = \'DESTINATION\' ')

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# Execute CostDistance
outCostDistance = CostDistance("origin",SOURCE_RASTER,"#","backlink")

# Execute CostPath
outCostPath = CostPath("destination", outCostDistance,"backlink")

# Convert Result to Polyline
arcpy.RasterToPolyline_conversion(outCostPath, "leastCostPath")
featSet = arcpy.FeatureSet("leastCostPath")

C#

IDistanceOp distanceOp = new RasterDistanceOpClass();
IRasterBandCollection costDistanceRaster = (IRasterBandCollection)distanceOp.CostDistanceFull((IGeoDataset)sourceFc, (IGeoDataset)raster, true, true, false);
IRasterBand distanceRaster = costDistanceRaster.Item(0);
IRasterBand backLinkRaster = costDistanceRaster.Item(1);

IGeoDataset costPath = distanceOp.CostPath((IGeoDataset)destFc, (IGeoDataset)distanceRaster, (IGeoDataset)backLinkRaster, ESRI.ArcGIS.SpatialAnalyst.esriGeoAnalysisPathEnum.esriGeoAnalysisPathForEachCell);

ArcPyでのコストパス分析(sa.CostDistanceおよびsa.CostPathを使用)には約15〜20秒かかります。まったく同じ入力を使用すると、ArcObjectsベースのルーチンは55〜60秒かかります。.NET Geoprocessorを使用しても、arcpyよりも大幅に遅くなります。

私の質問は次のとおりです。

  1. ArcPyとArcObjectsの実装は、同じコードベースを指しますか(Pythonと.NETラッパーを使用)?
  2. ArcObjectベースのコストパス分析を最適化するためのヒントはありますか?

2
どの呼び出しが最も時間がかかっているかを正確に見つけるためにコードのプロファイルを作成しましたか?コードスニペットを表示できますか?
ラギヤセルバーフム

私の理解では、ArcPyはArcObjectsの単なるラッパーなので、それは興味深いものです。これが関連するかどうかはわかりませんが、ここに1つの答えがあります: gis.stackexchange.com/questions/171304/… .. GUIツールと比較して、GeoProcessingツールをロードする必要があるという注意。そのため、ArcPyが関連するコードを事前にインスタンス化するか、ToolBox関数の代わりにGUI関数をラップすると、セットアップ時間が一部省略される場合があります。データセットが大きい場合に速度のギャップが減少するかどうかを確認するだけで簡単に確認できます。
アンセルGIS

ツアーごとに、質問ごとに質問は1つだけにしてください。
PolyGeo

回答:


0

これは、PythonがArcPyを使用して、64ビットプロセスで実行されているジオプロセシングタスクを呼び出すためだと考えています。ArcObjectsは32ビットプロセスで発生します


2
この投稿には、これらの仮定を立てるのに十分な情報がありません。それでも、サーバーは64ビットであるか、64ビットBGがインストールされている場合は、サーバーに対して関数ツールを実行できます。ただし、思考を楽しませるために、32ビットから64ビットに単純に変更しても、パフォーマンスは向上しません。64ビットが32ビットよりも「速い」場合/非常に状況的です。
KHibma

OPは、これらの仮定がベースから外れているかどうかを明確にすることができます。私が提供したリンクは、より多くのシステムリソースへのアクセスがあるためパフォーマンスが向上するなどの仮定をサポートしています。最近ではほとんどのOSが64ビットである理由があります。したがって、すべてが等しく、特に大量の計算処理では、64ビットプロセスは32ビットプロセスを実行します。
alexGIS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.