हालांकि मैं जियोप्रोसेसिंग स्क्रिप्ट / सेवाओं को बनाने के लिए अजगर का उपयोग करता हूं, लेकिन मैं इस धारणा के तहत था कि समान संचालन (ओं) को करने के लिए 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 जियोप्रोसेसर का उपयोग करना भी आर्कपी की तुलना में काफी धीमा है।
मुझे लगता है कि मेरे सवाल यहाँ हैं:
- क्या ArcPy और ArcObjects कार्यान्वयन समान कोड आधार (उनके पायथन और .NET रैपर के माध्यम से) की ओर इशारा करते हैं?
- आर्कोबजेक्ट आधारित लागत पथ विश्लेषण का अनुकूलन करने के लिए कोई सुझाव?