理解为什么ArcPy成本路径分析工具比ArcObjects更快?[关闭]


15

尽管我使用python创建地理处理脚本/服务,但给我的印象是,使用ArcObjects进行等效操作将具有更好的性能。

我已经发布了ArcGIS Server GP服务-RasterIO.dll崩溃了ArcSOC.exeArcGIS Geoprocessing Script在桌面上运行良好,但崩溃了,成为Geoprocessing Service?在过去的两天内,有关获取使用Spatial Analyst工具用作地理处理服务的地理处理脚本的信息。我的截止日期快到了,所以我决定走SOE路线以实现所需的功能。

获得在ArcObjects的成本路径分析是相对直接使用.NET ESRI.ArcGIS.SpatialAnalyst.RasterDistanceOpClass,特别是CostDistanceFull()和CostPath()方法。

有关我的工作方式的一些代码片段:

蟒蛇

# 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
您是否配置了代码以准确找到哪个通话花费的时间最长?您可以显示一个代码段吗?
拉吉·亚瑟(Ragi Yaser Burhum)2012年

我的理解是ArcPy只是ArcObjects的包装,这很奇怪。我不知道这是否相关,但这里有一个答案: gis.stackexchange.com/questions/171304 / ... ..与GUI工具相比,注意到GeoProcessing工具需要加载。因此,如果ArcPy预先实例化相关代码或包装了GUI函数而不是ToolBox函数,则它可能会跳过一些设置时间。通过查看速度差距是否随着较大的数据集减小而变得足够容易地进行检查。
AnserGIS '16

根据巡回赛,每个问题只能提出一个问题。
PolyGeo

Answers:


0

我相信这是因为您的Python正在使用ArcPy调用在64位进程中运行的Geoprocessing任务。ArcObjects发生在32位进程中


2
这篇文章中没有足够的信息来做出这些假设。即使这样,Server是64位的,或者如果他安装了64位的BG,则可以针对它执行其功能工具。但是,为了娱乐起见,仅将32位设置为64位并不能提高性能。当/如果64位比32位“更快”,这是非常情况。
基希马

OP可以阐明这些假设是否不合理。我提供的链接支持这些假设,例如由于可以访问更多的系统资源而使性能更好等。这是有原因的,为什么现在大多数OS都是64位的,而其中最大的一个就是性能的提高。因此,在所有条件都相同的情况下,尤其是在处理大量数据时,64位进程将执行32位进程。
alexGIS '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.