Mặc dù tôi sử dụng python để tạo các kịch bản / dịch vụ xử lý địa lý, tôi có ấn tượng rằng việc sử dụng ArcObjects để thực hiện các thao tác tương đương sẽ có hiệu suất tốt hơn.
Tôi đã đăng ArcGIS Server GP Service - RasterIO.dll gặp sự cố ArcSOC.exe và ArcGIS Geoprocessing Script chạy tốt trên Desktop nhưng gặp sự cố khi Dịch vụ xử lý địa lý? trong vài ngày qua về việc nhận các tập lệnh xử lý địa lý sử dụng các công cụ Phân tích không gian để làm việc như các dịch vụ xử lý địa lý. Hạn chót của tôi đang đến rất nhanh, vì vậy tôi đã quyết định đi theo con đường SOE để đạt được chức năng mong muốn.
Việc phân tích đường dẫn chi phí trong ArcObjects tương đối đơn giản khi sử dụng các Phương thức .NET ESRI.ArcGIS.SpatialAnalyst.RasterDistanceOpClass , cụ thể là Phương thức CostDistanceFull () và CostPath ().
Một số đoạn mã về cách tôi đang làm:
Con trăn
# 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);
Một phân tích đường dẫn chi phí trong ArcPy (sử dụng sa.CostDistance và sa.CostPath) mất khoảng 15-20 giây. Sử dụng cùng các đầu vào chính xác, thói quen dựa trên ArcObjects mất 55-60 giây. Ngay cả khi sử dụng .NET Geoprocessor cũng chậm hơn đáng kể so với arcpy.
Tôi đoán câu hỏi của tôi ở đây là:
- Các triển khai ArcPy và ArcObjects có cùng cơ sở mã không (thông qua các trình bao bọc Python và .NET của chúng)?
- Bất kỳ mẹo nào để tối ưu hóa phân tích Đường dẫn chi phí dựa trên ArcObject?