ArcPy Maliyet Yolu Analizi aracının neden ArcObjects'ten daha hızlı olduğunu anlıyor musunuz? [kapalı]


15

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:

  1. ArcPy ve ArcObjects uygulamaları aynı kod tabanını mı gösteriyor (Python ve .NET sarmalayıcıları aracılığıyla)?
  2. ArcObject tabanlı Maliyet Yolu analizini optimize etmek için herhangi bir ipucu var mı?

2
tam olarak hangi çağrıyı en uzun sürdüğünü bulmak için kodunuzu belirlediniz mi? Kod pasajı gösterebilir misiniz?
Ragi Yaser Burhum

Anladığım kadarıyla ArcPy sadece ArcObjects'in etrafındaki bir paketti. Bunun alakalı olup olmadığını bilmiyorum ama burada bir cevap: gis.stackexchange.com/questions/171304/… .. GeoIişleme araçlarının GUI araçlarına kıyasla yüklenmesi gerektiğine dikkat edin. Bu nedenle, ArcPy ilgili kodu önceden başlatırsa veya ToolBox işlevi yerine bir GUI işlevini sararsa, bazı kurulum zamanlarını atlayabilir. Daha büyük veri kümeleriyle hız boşluğunun azalıp azalmadığını kontrol ederek yeterince kolay.
AnserGIS

Tur'a göre, her soru için sadece bir soru sorulmalıdır.
PolyGeo

Yanıtlar:


0

Bunun nedeni, Python'unuzun 64 bit işlemlerde çalışan Geoprocessing görevlerini çağırmak için ArcPy kullanıyor olması . ArcObjects 32 bit işlemlerde gerçekleşir .


2
Bu yayında bu varsayımları yapacak yeterli bilgi yok. Buna rağmen, Server 64bit veya 64bit BG kurulu ise fonksiyon aracını buna karşı çalıştırabilir. Ancak, düşünceyi eğlendirmek için sadece 32'den 64 bit'e geçmek performans artışı sağlamaz. 64bit, 32bit'ten 'daha hızlı' olduğunda / varsa çok durumsaldır.
KHibma

OP bu varsayımların temel dışı olup olmadığını açıklığa kavuşturabilir. Sağladığım bağlantılar, performansın daha iyi olması gibi varsayımları destekliyor çünkü daha fazla sistem kaynağına erişim var, vb. Günümüzde çoğu işletim sisteminin 64 bit olması ve en büyüklerinden biri performans artışlarıdır. Bu nedenle, her şey eşit, özellikle ağır sayıdaki çatırdama ile, 64 bit işlemler 32 bit işlemler gerçekleştirecektir.
alexGIS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.