ArcPy Cost Path Analysis 도구가 ArcObject보다 빠른 이유를 이해하고 있습니까? [닫은]


15

파이썬을 사용하여 지오 프로세싱 스크립트 / 서비스를 만들었지 만 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보다 훨씬 느립니다.

내 질문은 다음과 같습니다.

  1. ArcPy 및 ArcObjects 구현은 Python 및 .NET 래퍼를 통해 동일한 코드 기반을 가리키고 있습니까?
  2. ArcObject 기반 비용 경로 분석을 최적화하기위한 팁이 있습니까?

2
어떤 통화가 가장 오래 걸리는지를 찾기 위해 코드를 프로파일 링했습니까? 코드 스 니펫을 보여줄 수 있습니까?
Ragi Yaser Burhum

내 이해는 ArcPy가 ArcObjects를 감싸는 것이므로 궁금합니다. 이것이 관련이 있는지 모르겠지만 여기에 하나의 대답이 있습니다. gis.stackexchange.com/questions/171304/… .. GUI 도구와 비교하여 GeoProcessing 도구를로드해야합니다. 따라서 ArcPy가 관련 코드를 미리 인스턴스화하거나 ToolBox 함수 대신 GUI 함수를 래핑하면 설정 시간을 건너 뛸 수 있습니다. 더 큰 데이터 세트에서 속도 차이가 줄어드는 지 확인하여 쉽게 확인할 수 있습니다.
AnserGIS

당으로 투어 하나의 질문은 질문마다 질문이 있어야합니다.
PolyGeo

답변:


0

파이썬이 ArcPy를 사용하여 64 비트 프로세스 에서 실행되는 Geoprocessing 작업을 호출하기 때문이라고 생각합니다 . ArcObject는 32 비트 프로세스 에서 발생 합니다 .


2
이 게시물에는 그러한 가정을하기에 충분한 정보가 없습니다. 그렇더라도 서버는 64 비트이거나 64 비트 BG가 설치되어 있으면 서버에 대해 기능 도구를 실행할 수 있습니다. 그러나 생각을 즐겁게하기 위해 32 비트에서 64 비트로 만 전환해도 성능이 향상되지는 않습니다. 64 비트가 32 비트보다 '빠른'경우 매우 상황이 심각합니다.
KHibma

OP는 이러한 가정이 근거가 아닌지 명확히 할 수 있습니다. 내가 제공 한 링크는 더 많은 시스템 리소스에 액세스 할 수 있기 때문에 성능이 향상되는 등의 가정을 뒷받침합니다. 요즘 대부분의 OS가 64 비트이고 가장 큰 OS 중 하나가 성능 향상이라는 이유가 있습니다. 따라서 모든 수, 특히 많은 수의 크 런칭과 함께 64 비트 프로세스는 32 비트 프로세스를 수행합니다.
alexGIS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.