파이썬을 사용하여 지오 프로세싱 스크립트 / 서비스를 만들었지 만 ArcObjects를 사용하여 동등한 작업을 수행하면 성능이 향상 될 것이라는 인상을 받았습니다.
내가 게시 한 는 ArcGIS 서버 GP 서비스 - RasterIO.dll 충돌 ArcSOC.exe 와 는 ArcGIS 지오 프로세싱 스크립트가 바탕 화면에 벌금을 실행하지만, 지오 프로세싱 서비스로 충돌? 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")
씨#
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 지오 프로세서를 사용해도 arcpy보다 훨씬 느립니다.
내 질문은 다음과 같습니다.
- ArcPy 및 ArcObjects 구현은 Python 및 .NET 래퍼를 통해 동일한 코드 기반을 가리키고 있습니까?
- ArcObject 기반 비용 경로 분석을 최적화하기위한 팁이 있습니까?