แม้ว่าฉันจะใช้หลามเพื่อสร้างสคริปต์ / บริการประมวลผลเชิงภูมิศาสตร์ แต่ฉันก็รู้สึกว่าการใช้ ArcObjects เพื่อทำงานที่เทียบเท่าจะมีประสิทธิภาพที่ดีขึ้น
ฉันได้โพสต์ArcGIS Server GP Service แล้ว - RasterIO.dll crashing ArcSOC.exeและArcGIS Geoprocessing Script ทำงานได้ดีในเดสก์ท็อป แต่ล่มเป็น Geoprocessing Service? ในช่วงสองสามวันที่ผ่านมาเกี่ยวกับการรับสคริปต์ประมวลผลทางภูมิศาสตร์ที่ใช้เครื่องมือวิเคราะห์เชิงพื้นที่เพื่อทำงานเป็นบริการประมวลผลเชิงภูมิศาสตร์ กำหนดเส้นตายของฉันใกล้เข้ามาอย่างรวดเร็วดังนั้นฉันจึงตัดสินใจที่จะใช้เส้นทาง SOE เพื่อให้สามารถใช้งานได้ตามที่ต้องการ
การรับการวิเคราะห์เส้นทางต้นทุนใน ArcObjects นั้นค่อนข้างตรงไปตรงมาโดยใช้. NET ESRI.ArcGISSpatialAnalyst.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 วินาที การใช้อินพุตเดียวกันแน่นอนชุดคำสั่งที่ใช้ ArcObjects จะใช้เวลา 55-60 วินาที แม้แต่การใช้. NET Geoprocessor ก็ช้ากว่าอาร์คpyอย่างมาก
ฉันเดาคำถามของฉันที่นี่:
- การใช้งาน ArcPy และ ArcObjects ชี้ไปที่ฐานรหัสเดียวกัน (ผ่าน Python และ. NET wrappers) หรือไม่
- เคล็ดลับใด ๆ ในการเพิ่มประสิทธิภาพการวิเคราะห์เส้นทางต้นทุน ArcObject?