尽管我使用python创建地理处理脚本/服务,但给我的印象是,使用ArcObjects进行等效操作将具有更好的性能。
我已经发布了ArcGIS Server GP服务-RasterIO.dll崩溃了,ArcSOC.exe和ArcGIS 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慢得多。
我想我的问题是:
- ArcPy和ArcObjects实现是否指向相同的代码库(通过它们的Python和.NET包装器)?
- 有什么技巧可以优化基于ArcObject的成本路径分析?
2
您是否配置了代码以准确找到哪个通话花费的时间最长?您可以显示一个代码段吗?
—
拉吉·亚瑟(Ragi Yaser Burhum)2012年
我的理解是ArcPy只是ArcObjects的包装,这很奇怪。我不知道这是否相关,但这里有一个答案: gis.stackexchange.com/questions/171304 / ... ..与GUI工具相比,注意到GeoProcessing工具需要加载。因此,如果ArcPy预先实例化相关代码或包装了GUI函数而不是ToolBox函数,则它可能会跳过一些设置时间。通过查看速度差距是否随着较大的数据集减小而变得足够容易地进行检查。
—
AnserGIS '16