Coğrafi işlem komut dosyaları / hizmetleri oluşturmak için python kullanmama rağmen, eşdeğer işlemleri yapmak için ArcObjects kullanmanın daha iyi performans göstereceği izlenimi altındaydım.
Yayınladığım ArcGIS Sunucu GP Servisi - RasterIO.dll Çökme ArcSOC.exe ve ArcGIS Geoprocessing Senaryo Masaüstünde cezası çalışır ancak Geoprocessing Servisi olarak çöküyor? son birkaç gün içinde, coğrafi işleme hizmetleri olarak çalışmak için Mekansal Analist araçlarını kullanan coğrafi işlem komut dosyaları alma hakkında. Son teslim tarihim hızla yaklaşıyor, bu yüzden istenen işlevselliği elde etmek için SOE yoluna gitmeye karar verdim.
ArcObjects'te bir maliyet yolu analizi elde etmek, .NET ESRI.ArcGIS.SpatialAnalyst.RasterDistanceOpClass , özellikle CostDistanceFull () ve CostPath () Yöntemleri kullanılarak nispeten basitti .
Bazı kod parçacıkları nasıl yapıyorum nasıl:
piton
# 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'de bir maliyet yolu analizi (sa.CostDistance ve sa.CostPath kullanarak) yaklaşık 15-20 saniye sürer. Aynı girişleri kullanan ArcObjects tabanlı rutin 55-60 saniye sürer. .NET Geoprocessor kullanımı bile arcpy'den önemli ölçüde yavaştır.
Sanırım burada sorularım:
- ArcPy ve ArcObjects uygulamaları aynı kod tabanını mı gösteriyor (Python ve .NET sarmalayıcıları aracılığıyla)?
- ArcObject tabanlı Maliyet Yolu analizini optimize etmek için herhangi bir ipucu var mı?