private IFunctionRasterDataset createBarrierRaster() { IFeatureClassDescriptor ftrDesc = new FeatureClassDescriptorClass(); IQueryFilter qf = new QueryFilterClass(); ftrDesc.Create(BarriersFeatureClass, qf, BarriersFeatureClass.OIDFieldName); IConversionOp convOp = new RasterConversionOpClass(); IRasterAnalysisEnvironment rasterAnalysisEnvironment = (IRasterAnalysisEnvironment)convOp; IRasterAnalysisGlobalEnvironment rasterAnalysisGlobalEnvironment = (IRasterAnalysisGlobalEnvironment)convOp; rasterAnalysisGlobalEnvironment.AvoidDataConversion = true; rasterAnalysisEnvironment.OutSpatialReference = sp; rasterAnalysisEnvironment.OutWorkspace = OutWorkspace; //object cells = Dem.RasterInfo.CellSize; object ext = ((IGeoDataset)Dem).Extent; object snap = ((IGeoDataset)Dem); rasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, Dem); rasterAnalysisEnvironment.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ext, Dem); string outRdName = rsUtil.getSafeOutputName(OutWorkspace, "sBarrier"); IRasterDataset geoDset = convOp.ToRasterDataset((IGeoDataset)ftrDesc, "GRID", OutWorkspace, outRdName); IGeoDatasetSchemaEdit2 geoSch = (IGeoDatasetSchemaEdit2)geoDset; if (geoSch.CanAlterSpatialReference) { geoSch.AlterSpatialReference(rasterAnalysisEnvironment.OutSpatialReference); } return(rsUtil.createIdentityRaster(geoDset)); }
private void buildPathAllocation() { IDistanceOp2 dOp = new RasterDistanceOpClass(); IRasterAnalysisEnvironment rasterAnalysisEnvironment = (ESRI.ArcGIS.GeoAnalyst.IRasterAnalysisEnvironment)dOp; rasterAnalysisEnvironment.OutSpatialReference = ((IGeoDataset)Dem).SpatialReference; rasterAnalysisEnvironment.OutWorkspace = OutWorkspace; object ext = ((IGeoDataset)RoadFeatureClass).Extent; object snap = ((IGeoDataset)Dem); rasterAnalysisEnvironment.SetCellSize(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, Dem); rasterAnalysisEnvironment.SetExtent(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, ext, Dem); IRasterAnalysisGlobalEnvironment analysisGlobalEnv = (IRasterAnalysisGlobalEnvironment)dOp; analysisGlobalEnv.AvoidDataConversion = true; IRasterOpBase rasOpBase = (IRasterOpBase)dOp; IRasterDatasetName rasDatasetName; rasDatasetName = new RasterDatasetNameClass(); IDatasetName datasetName; datasetName = (IDatasetName)rasDatasetName; datasetName.WorkspaceName = (IWorkspaceName)((IDataset)OutWorkspace).FullName; string onRoadNm = rsUtil.getSafeOutputName(OutWorkspace, "onRoadHr"); datasetName.Name = onRoadNm; rasOpBase.AddOutputDatasetName(0, datasetName); object noVl = Type.Missing; IFunctionRasterDataset cr1 = rsUtil.calcArithmaticFunction(RoadRaster, speedConFactor, esriRasterArithmeticOperation.esriRasterMultiply); IFunctionRasterDataset costRs = rsUtil.calcArithmaticFunction(1, cr1, esriRasterArithmeticOperation.esriRasterDivide); IGeoDataset rpdOut = dOp.PathDistance((IGeoDataset)FacilityFeatureClass, costRs, Dem, noVl, noVl, noVl, noVl, noVl, noVl);//outputs in hours FunctionAccumulatedPathDistance = rsUtil.createIdentityRaster((IRaster)rpdOut); // Use FunctonAccumulated Path Distance (hours) for allocation string frRoadDist = rsUtil.getSafeOutputName(OutWorkspace, "offRoadHr"); datasetName.Name = frRoadDist; string frRoadAllo = rsUtil.getSafeOutputName(OutWorkspace, "onRoadAllo"); IRasterDatasetName rasDatasetName2 = new RasterDatasetNameClass(); IDatasetName datasetName2 = (IDatasetName)rasDatasetName2; datasetName2.WorkspaceName = (IWorkspaceName)((IDataset)OutWorkspace).FullName; datasetName2.Name = frRoadAllo; string frRoadBack = rsUtil.getSafeOutputName(OutWorkspace, "offRoadBack"); IRasterDatasetName rasDatasetName3 = new RasterDatasetNameClass(); IDatasetName datasetName3 = (IDatasetName)rasDatasetName3; datasetName3.WorkspaceName = (IWorkspaceName)((IDataset)OutWorkspace).FullName; datasetName3.Name = frRoadBack; rasOpBase.AddOutputDatasetName(0, datasetName); rasOpBase.AddOutputDatasetName(1, datasetName3); rasOpBase.AddOutputDatasetName(2, datasetName2); IFunctionRasterDataset costRS = null; //add in barriers to costRS if (OffRoadSpeedRaster != null) { IFunctionRasterDataset c1 = rsUtil.calcArithmaticFunction(OffRoadSpeedRaster, speedConFactor, esriRasterArithmeticOperation.esriRasterMultiply); costRS = rsUtil.calcArithmaticFunction(1, c1, esriRasterArithmeticOperation.esriRasterDivide); } else { costRS = rsUtil.constantRasterFunction(FunctionAccumulatedPathDistance, 1 / (OffRoadSpeed * speedConFactor)); } //add in barriers to costRs IFunctionRasterDataset rdCs = null;//rsUtil.calcArithmaticFunction(FunctionAccumulatedPathDistance, 1000, esriRasterArithmeticOperation.esriRasterMultiply, rstPixelType.PT_LONG); if (BarriersFeatureClass != null) { IFunctionRasterDataset[] rslt = addBarrierRasters(costRS, FunctionAccumulatedPathDistance); costRS = rslt[0]; rdCs = rslt[1]; } else { rdCs = rsUtil.calcArithmaticFunction(FunctionAccumulatedPathDistance, 1000, esriRasterArithmeticOperation.esriRasterMultiply, rstPixelType.PT_LONG); } IGeoDataset rpdOut2 = dOp.PathDistanceFull((IGeoDataset)rdCs, true, false, true, costRS, Dem, noVl, noVl, noVl, noVl, noVl, rdCs); IRasterBandCollection rsbc = (IRasterBandCollection)rpdOut; FunctionAccumulatedFromPathDistance = rsUtil.getBand((IRaster)rpdOut2, 0); FunctionAccumulatedPathAllocation = rsUtil.getBand((IRaster)rpdOut2, 1); }