Хоча я використовую python для створення сценаріїв / служб для геообробки, у мене склалося враження, що використання ArcObjects для виконання еквівалентних операцій матиме кращі показники.
Я розмістив сервіс GP ArcGIS Server - збій RasterIO.dll ArcSOC.exe і сценарій геопроцедури ArcGIS працює на робочому столі добре, але працює як послуга геопроцесори? за останні кілька днів про те, як отримати сценарії геообробки, які використовують засоби просторової аналітики для роботи в якості геопроцесорних служб. Мій термін швидко наближається, тому я вирішив пройти маршрут ДП для досягнення бажаної функціональності.
Аналіз траєкторії витрат у 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?