यह समझना कि आर्कपी की तुलना में आर्कपी कॉस्ट पाथ एनालिसिस टूल क्यों तेज है? [बन्द है]


15

हालांकि मैं जियोप्रोसेसिंग स्क्रिप्ट / सेवाओं को बनाने के लिए अजगर का उपयोग करता हूं, लेकिन मैं इस धारणा के तहत था कि समान संचालन (ओं) को करने के लिए ArcObjects का उपयोग करने से बेहतर प्रदर्शन होगा।

मैंने ArcGIS सर्वर GP सेवा पोस्ट की है - RasterIO.dll क्रैश करने वाली ArcSOC.exe और ArcGIS जियोप्रोसेसिंग स्क्रिप्ट डेस्कटॉप में ठीक चलती है, लेकिन Geoprocessing Service के रूप में क्रैश हो जाती है? जियोप्रोसेसिंग स्क्रिप्ट प्राप्त करने के बारे में पिछले कुछ दिनों से, जो जियोप्रोसेसिंग सेवाओं के रूप में काम करने के लिए स्पेसियल एनालिस्ट टूल का उपयोग करते हैं। मेरी समय सीमा तेजी से आ रही है, इसलिए मैंने वांछित कार्यक्षमता प्राप्त करने के लिए 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 सेकंड लेता है। ठीक उसी इनपुट का उपयोग करते हुए, आर्कोबजेक्ट्स आधारित दिनचर्या में 55-60 सेकंड लगते हैं। यहां तक ​​कि .NET जियोप्रोसेसर का उपयोग करना भी आर्कपी की तुलना में काफी धीमा है।

मुझे लगता है कि मेरे सवाल यहाँ हैं:

  1. क्या ArcPy और ArcObjects कार्यान्वयन समान कोड आधार (उनके पायथन और .NET रैपर के माध्यम से) की ओर इशारा करते हैं?
  2. आर्कोबजेक्ट आधारित लागत पथ विश्लेषण का अनुकूलन करने के लिए कोई सुझाव?

2
क्या आपने अपने कोड को iut खोजने के लिए ठीक से देखा है कि कौन सी कॉल सबसे लंबी है? क्या आप एक कोड स्निपेट दिखा सकते हैं?
रागी यासर बुरहुम

मेरी समझ आरकेपी सिर्फ आर्कबजेक्ट्स के आसपास एक आवरण थी, ताकि उत्सुक हो। मुझे नहीं पता कि यह प्रासंगिक है, लेकिन यहां एक उत्तर है: gis.stackexchange.com/questions/171304/… .. जीओआई उपकरण की तुलना में जियोप्रोसेसिंग टूल को लोड करने की आवश्यकता है। इसलिए, अगर आर्कपी संबंधित कोड को पहले से इंस्टेंट कर देता है या टूलबॉक्स फ़ंक्शन के बजाय GUI फ़ंक्शन को लपेटता है, तो यह कुछ सेट अप समय को छोड़ सकता है। यह देखने के लिए पर्याप्त है कि बड़े डेटासेट के साथ गति अंतराल कम हो जाता है या नहीं।
एंसरगिस

के अनुसार यात्रा केवल एक ही सवाल सवाल प्रति पूछा होना चाहिए।
PolyGeo

जवाबों:


0

मेरा मानना ​​है कि क्योंकि आपका पायथन जियोप्रोसेसिंग कार्यों को कॉल करने के लिए आर्कपी का उपयोग कर रहा है, जो 64-बिट प्रक्रियाओं में चल रहे हैं । ArcObjects 32-बिट प्रक्रियाओं में होता है


2
उन मान्यताओं को बनाने के लिए इस पोस्ट में पर्याप्त जानकारी नहीं है। फिर भी, सर्वर 64 बिट है या यदि वह 64 बिट बीजी स्थापित है तो वह इसके खिलाफ अपने फ़ंक्शन टूल को निष्पादित कर सकता है। हालाँकि, विचार के मनोरंजन के लिए, बस 32 से 64 बिट पर जाने से प्रदर्शन में वृद्धि नहीं होती है। यह बहुत अधिक स्थितिजन्य है जब / अगर 64 बिट 32 बिट की तुलना में 'तेज' है।
कहिम्बा

ओपी स्पष्ट कर सकता है कि ये धारणाएं आधार से दूर हैं या नहीं। मैंने जो लिंक प्रदान किए हैं वे मान्यताओं का समर्थन करते हैं, जैसे प्रदर्शन बेहतर होना क्योंकि अधिक सिस्टम संसाधनों तक पहुंच होना, आदि एक कारण है कि इन दिनों अधिकांश OS 64 बिट के हैं, और एक बड़े का प्रदर्शन बढ़ता है। तो सभी चीजें बराबर हो रही हैं, विशेष रूप से भारी संख्या में क्रंचिंग के साथ, 64 बिट प्रक्रियाएं 32 बिट प्रक्रियाएं करेंगी।
एलेक्सजिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.