public normalization(IFunctionRasterDataset ReferenceRaster, IFunctionRasterDataset TransformRaster, int PercentChange = 20, rasterUtil rasterUtility = null) { referenceRaster = ReferenceRaster; IRasterBandCollection rsBc = (IRasterBandCollection)referenceRaster; rsType = referenceRaster.RasterInfo.PixelType; cellCount = new int[rsBc.Count]; minArray = new double[rsBc.Count]; maxArray = new double[rsBc.Count]; sumX2Array = new double[rsBc.Count]; sumXArray = new double[rsBc.Count]; sumXYArray = new double[rsBc.Count]; sumYArray = new double[rsBc.Count]; sumY2Array = new double[rsBc.Count]; coef = new double[rsBc.Count][]; blockCellCount = new int[rsBc.Count]; difDic = new Dictionary<double, int>[rsBc.Count]; for (int i = 0; i < rsBc.Count; i++) { difDic[i] = new Dictionary<double, int>(); } transformRaster = TransformRaster; pChange = System.Convert.ToDouble(PercentChange) / 200d; rsUtil = rasterUtility; }
public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.transType transType) { IRasterBandCollection rsbci = (IRasterBandCollection)inRaster; IRasterBandCollection rsbco = (IRasterBandCollection)outRaster; for (int i = 0; i < rsbci.Count; i++) { IRasterBand rsBi = rsbci.Item(i); IRasterBand rsBo = rsbco.Item(i); IRasterStatistics rsBStatsi = rsBi.Statistics; IRasterStatistics rsBStatso = rsBo.Statistics; if (rsBStatsi == null) { continue; } if (rsBStatso == null) { rsBStatso = new RasterStatistics(); } switch (transType) { case rasterUtil.transType.LOG10: rsBStatso.Maximum = Math.Log10(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Log10(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Log10(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Log10(rsBStatsi.Mean); break; case rasterUtil.transType.LN: rsBStatso.Maximum = Math.Log(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Log(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Log(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Log(rsBStatsi.Mean); break; case rasterUtil.transType.EXP: rsBStatso.Maximum = Math.Exp(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Exp(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Exp(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Exp(rsBStatsi.Mean); break; case rasterUtil.transType.EXP10: rsBStatso.Maximum = Math.Pow(10,rsBStatsi.Maximum); rsBStatso.Minimum = Math.Pow(10, rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Pow(10, rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Pow(10, rsBStatsi.Mean); break; case rasterUtil.transType.ABS: rsBStatso.Maximum = Math.Abs(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Abs(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Abs(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Abs(rsBStatsi.Mean); break; case rasterUtil.transType.SIN: rsBStatso.Maximum = Math.Sin(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Sin(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Sin(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Sin(rsBStatsi.Mean); break; case rasterUtil.transType.COS: rsBStatso.Maximum = 1; rsBStatso.Minimum = -1; rsBStatso.StandardDeviation = Math.Cos(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Cos(rsBStatsi.Mean); break; case rasterUtil.transType.TAN: rsBStatso.Maximum = Math.Tan(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Tan(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Tan(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Tan(rsBStatsi.Mean); break; case rasterUtil.transType.ASIN: rsBStatso.Maximum = Math.Asin(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Asin(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Asin(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Asin(rsBStatsi.Mean); break; case rasterUtil.transType.ACOS: rsBStatso.Maximum = Math.Acos(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Acos(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Acos(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Acos(rsBStatsi.Mean); break; case rasterUtil.transType.ATAN: rsBStatso.Maximum = Math.Atan(rsBStatsi.Maximum); rsBStatso.Minimum = Math.Atan(rsBStatsi.Minimum); rsBStatso.StandardDeviation = Math.Atan(rsBStatsi.StandardDeviation); rsBStatso.Mean = Math.Atan(rsBStatsi.Mean); break; case rasterUtil.transType.RADIANS: rsBStatso.Maximum = rsBStatsi.Maximum*Math.PI/180; rsBStatso.Minimum = rsBStatsi.Minimum * Math.PI / 180; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation * Math.PI / 180; rsBStatso.Mean = rsBStatsi.Mean * Math.PI / 180; break; default: break; } } }
public polytomousLogisticRaster(ref rasterUtil rasterUtility) { rsUtil = rasterUtility; }
public IRaster convertFeatureClassToRaster(IFeatureClass featureClass, rasterUtil.rasterType rasterType, IWorkspace outWorkSpace, string outName, double cellSize, IRasterDataset snapRaster, IEnvelope extent) { ESRI.ArcGIS.GeoAnalyst.IConversionOp convOp = new ESRI.ArcGIS.GeoAnalyst.RasterConversionOpClass(); ESRI.ArcGIS.GeoAnalyst.IRasterAnalysisEnvironment rasterAnalysisEnvironment = (ESRI.ArcGIS.GeoAnalyst.IRasterAnalysisEnvironment)convOp; rasterAnalysisEnvironment.OutSpatialReference = ((IGeoDataset)featureClass).SpatialReference; rasterAnalysisEnvironment.OutWorkspace = outWorkSpace; object cellS = cellSize; object ext = ((IGeoDataset)featureClass).Extent; object snap = Type.Missing; if(snapRaster!=null) { snap = snapRaster; } if (extent != null) { ext = extent; } rasterAnalysisEnvironment.SetCellSize(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellS); rasterAnalysisEnvironment.SetExtent(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, ref ext,ref snap); string fmt = rasterType.ToString(); if (fmt == "IMAGINE") { fmt = "IMAGINE image"; if (!outName.ToLower().EndsWith(".img")) outName = outName + ".img"; } IRasterDataset geoDset = convOp.ToRasterDataset((IGeoDataset)featureClass, fmt, outWorkSpace, outName); IGeoDatasetSchemaEdit2 geoSch = (IGeoDatasetSchemaEdit2)geoDset; if (geoSch.CanAlterSpatialReference) geoSch.AlterSpatialReference(rasterAnalysisEnvironment.OutSpatialReference); return returnRaster(geoDset); }
private static Dictionary<string, double[][]> getDictionaryValues(ESRI.ArcGIS.Geodatabase.IFeatureClass pointFtr, ESRI.ArcGIS.Geodatabase.IField[] fldsToSummarize, IFunctionRasterDataset strataRaster, geoDatabaseUtility geoUtil, rasterUtil rsUtil) { IRaster2 rs2 = (IRaster2)rsUtil.createRaster(strataRaster); int[] ptfldIndex = new int[fldsToSummarize.Length]; for (int i = 0; i < ptfldIndex.Length; i++) { ptfldIndex[i] = pointFtr.FindField(fldsToSummarize[i].Name); } Dictionary<string, double[][]> outDic = new Dictionary<string, double[][]>(); IFeatureCursor sCur = pointFtr.Search(null, true); IFeature sFtr = sCur.NextFeature(); while (sFtr != null) { IGeometry geo = sFtr.Shape; IPoint pnt = (IPoint)geo; int clm, rw; rs2.MapToPixel(pnt.X, pnt.Y,out clm, out rw); object strataVlObj = rs2.GetPixelValue(0, clm, rw); if(strataVlObj!=null) { string strataVl = strataVlObj.ToString(); double[][] vlArr; if (outDic.TryGetValue(strataVl, out vlArr)) { for (int i = 0; i < ptfldIndex.Length; i++) { object vlObj = sFtr.get_Value(ptfldIndex[i]); if (vlObj != null) { double vl = System.Convert.ToDouble(vlObj); vlArr[i][0] += vl; vlArr[i][1] += (vl * vl); vlArr[i][2] += 1; } } } else { vlArr = new double[fldsToSummarize.Length][]; for (int i = 0; i < ptfldIndex.Length; i++) { double[] vlSumArr = new double[3]; object vlObj =sFtr.get_Value(ptfldIndex[i]); if (vlObj != null) { double vl = System.Convert.ToDouble(vlObj); vlSumArr[0] = vl; vlSumArr[1] = (vl * vl); vlSumArr[2] = 1; } vlArr[i] = vlSumArr; } outDic[strataVl] = vlArr; } } sFtr = sCur.NextFeature(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(sCur); return outDic; }
public batchCalculations(rasterUtil rasterUtility, esriUtil.Forms.RunningProcess.frmRunningProcessDialog runningDialog) { rsUtil = rasterUtility; if (rp != null) rp = runningDialog; }
private static double iterValues(double[] doubleArr, rasterUtil.localType localType) { double outVl = 0; foreach (double d in doubleArr) { switch (localType) { case rasterUtil.localType.MULTIPLY: outVl = outVl * d; break; case rasterUtil.localType.DIVIDE: outVl = outVl / d; break; case rasterUtil.localType.SUBTRACT: outVl = outVl - d; break; case rasterUtil.localType.POWER: outVl = Math.Pow(outVl, d); break; default: break; } } return outVl; }
public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.localType localType) { IRasterBandCollection rsbci = (IRasterBandCollection)inRaster; double[] bMaxArr = new double[rsbci.Count]; double[] bMinArr = new double[rsbci.Count]; double[] bMeanArr = new double[rsbci.Count]; double[] bStdArr = new double[rsbci.Count]; double[] bModeArr = new double[rsbci.Count]; double[] bMedianArr = new double[rsbci.Count]; IRasterBandCollection rsbco = (IRasterBandCollection)outRaster; IRasterStatistics rsStatso = rsbco.Item(0).Statistics; if (rsStatso == null) { rsStatso = new RasterStatistics(); } for (int i = 0; i < rsbci.Count; i++) { IRasterBand rsBi = rsbci.Item(i); IRasterStatistics rsBStatsi = rsBi.Statistics; if (rsBStatsi == null) { continue; } bMaxArr[i] = rsBStatsi.Maximum; bMinArr[i] = rsBStatsi.Minimum; bMeanArr[i] = rsBStatsi.Mean; bStdArr[i] = rsBStatsi.StandardDeviation; } switch (localType) { case rasterUtil.localType.MAX: rsStatso.Maximum = bMaxArr.Max(); rsStatso.Minimum = bMinArr.Max(); rsStatso.Mean = bMeanArr.Max(); rsStatso.StandardDeviation = bStdArr.Max(); break; case rasterUtil.localType.MIN: rsStatso.Maximum = bMaxArr.Min(); rsStatso.Minimum = bMinArr.Min(); rsStatso.Mean = bMeanArr.Min(); rsStatso.StandardDeviation = bStdArr.Min(); break; case rasterUtil.localType.MAXBAND: case rasterUtil.localType.MINBAND: rsStatso.Maximum = rsbci.Count; rsStatso.Minimum = 1; rsStatso.Mean = rsbci.Count/2; rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3; break; case rasterUtil.localType.SUM: rsStatso.Mean = bMeanArr.Sum(); rsStatso.Maximum = bMaxArr.Sum(); rsStatso.Minimum = bMinArr.Sum(); rsStatso.StandardDeviation = bStdArr.Sum(); break; case rasterUtil.localType.MULTIPLY: rsStatso.Mean = iterValues(bMeanArr,localType); rsStatso.Maximum = iterValues(bMeanArr, localType); rsStatso.Minimum = iterValues(bMeanArr, localType); rsStatso.StandardDeviation = iterValues(bMeanArr, localType); break; case rasterUtil.localType.DIVIDE: rsStatso.Mean = iterValues(bMeanArr, localType); rsStatso.Maximum = iterValues(bMeanArr, localType); rsStatso.Minimum = iterValues(bMeanArr, localType); rsStatso.StandardDeviation = iterValues(bMeanArr, localType); break; case rasterUtil.localType.SUBTRACT: rsStatso.Mean = iterValues(bMeanArr, localType); rsStatso.Maximum = iterValues(bMeanArr, localType); rsStatso.Minimum = iterValues(bMeanArr, localType); rsStatso.StandardDeviation = iterValues(bMeanArr, localType); break; case rasterUtil.localType.POWER: rsStatso.Mean = iterValues(bMeanArr, localType); rsStatso.Maximum = iterValues(bMeanArr, localType); rsStatso.Minimum = iterValues(bMeanArr, localType); rsStatso.StandardDeviation = iterValues(bMeanArr, localType); break; case rasterUtil.localType.MEAN: rsStatso.Mean = bMeanArr.Average(); rsStatso.Maximum = bMaxArr.Average(); rsStatso.Minimum = bMinArr.Average(); rsStatso.StandardDeviation = bStdArr.Average(); break; case rasterUtil.localType.VARIANCE: double stdMean = bStdArr.Average(); rsStatso.Mean = Math.Pow(stdMean,2); rsStatso.Maximum = Math.Pow(stdMean*1.65,2); rsStatso.Minimum = Math.Pow(stdMean-(stdMean*0.65),2); rsStatso.StandardDeviation = Math.Pow(stdMean*.21666666,2); break; case rasterUtil.localType.STD: rsStatso.Mean = bStdArr.Average(); rsStatso.Maximum = rsStatso.Mean*1.65; rsStatso.Minimum = rsStatso.Mean - (rsStatso.Mean*0.65); rsStatso.StandardDeviation = rsStatso.Mean*.21666666; break; case rasterUtil.localType.MODE: rsStatso.Mean = bModeArr.Average(); rsStatso.Maximum = bModeArr.Max(); rsStatso.Minimum = bModeArr.Min(); rsStatso.StandardDeviation = rsStatso.Mean * 0.2166666; break; case rasterUtil.localType.MEDIAN: rsStatso.Mean = bMedianArr.Average(); rsStatso.Maximum = bMedianArr.Max(); rsStatso.Minimum = bMedianArr.Min(); rsStatso.StandardDeviation = rsStatso.Mean * 0.2166666; break; case rasterUtil.localType.UNIQUE: rsStatso.Maximum = rsbci.Count; rsStatso.Minimum = 1; rsStatso.Mean = rsbci.Count/2; rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3; break; case rasterUtil.localType.ENTROPY: rsStatso.Maximum = (-1*0.4*Math.Log(0.4))*(rsbci.Count*.4); rsStatso.Minimum = 0; rsStatso.Mean = (rsStatso.Maximum-rsStatso.Minimum)/2; rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3; break; default: break; } }
public string fillDbRaster(IImageServerLayer imSvLyr, IWorkspace wks,ESRI.ArcGIS.Geometry.IEnvelope ext,ISpatialReference sr, out IRaster outrs) { if (ext.SpatialReference.FactoryCode != sr.FactoryCode) { ext.Project(sr); } StringBuilder msg = new StringBuilder(); if (wks == null) { wks = servWks; } outrs = null; Forms.RunningProcess.frmRunningProcessDialog rp = new Forms.RunningProcess.frmRunningProcessDialog(false); rp.addMessage("Downloading images please be patient..."); rp.Show(); //rp.showInSepperateProcess(); rp.TopMost = true; rp.stepPGBar(10); rp.Refresh(); DateTime dtS = DateTime.Now; try { rasterUtil rsUtil = new rasterUtil(); int minX = System.Convert.ToInt32(ext.XMin); int maxX = System.Convert.ToInt32(ext.XMax); int minY = System.Convert.ToInt32(ext.YMin); int maxY = System.Convert.ToInt32(ext.YMax); int xDiff = System.Convert.ToInt32(ext.Width); int yDiff = System.Convert.ToInt32(ext.Height); int tile = 1; IRaster rast = rsUtil.createRaster(((IRaster2)imSvLyr.Raster).RasterDataset); ISaveAs saveas = (ISaveAs)rast; IRasterProps rasterProps = (IRasterProps)rast; imSvLyr.SpatialReference = sr; string nm = "T" + System.Guid.NewGuid().ToString().Substring(0, 3); string svImgNm = imSvLyr.ServiceInfo.Name; string rNm = nm; int mCols = System.Convert.ToInt32(imSvLyr.ServiceInfo.MaxNCols * .90); int mRows = System.Convert.ToInt32(imSvLyr.ServiceInfo.MaxNRows * .90); if (xDiff < mCols) mCols = xDiff; if (yDiff < mRows) mRows = yDiff; List<IRaster> tileLst = new List<IRaster>(); for (int i = minX; i < maxX; i += mRows) { for (int j = minY; j < maxY; j += mCols) { IEnvelope clipEnvelope = new EnvelopeClass(); clipEnvelope.PutCoords(i, j, i + mRows, j + mCols); rasterProps.Extent = clipEnvelope; rasterProps.Width = mRows; rasterProps.Height = mCols; rasterProps.SpatialReference = sr; string r = rNm + tile.ToString(); if (r.Length > 12) { rp.addMessage("Too many tiles. Ending at Tile: " + tile); msg.AppendLine("Too many tiles. Ending at Tile: " + tile); //outrs = rsUtil.mosaicRastersFunction(wks, rNm, tileLst.ToArray(),esriMosaicMethod.esriMosaicNone,rstMosaicOperatorType.MT_FIRST,true,true,false,true); return msg.ToString(); } if (((IWorkspace2)wks).get_NameExists(esriDatasetType.esriDTRasterDataset, r)) { r = rsUtil.getSafeOutputName(wks, r); //Console.WriteLine("Deleting Raster " + r); //((IRasterWorkspaceEx)wks).DeleteRasterDataset(r); } rp.addMessage("Creating tile " + r); rp.stepPGBar(5); rp.Refresh(); //Console.WriteLine("TestLength = " + testLng.ToString()); tileLst.Add(rsUtil.returnRaster((IRasterDataset)saveas.SaveAs(r, wks, "GDB"))); msg.AppendLine("Added Tile " + r); tile++; } } rp.addMessage("Merging rasters..."); rp.Refresh(); //outrs = rsUtil.mosaicRastersFunction(wks, rNm, tileLst.ToArray(), esriMosaicMethod.esriMosaicNone, rstMosaicOperatorType.MT_FIRST, true, true, false, true); } catch (Exception e) { string x = e.ToString(); msg.AppendLine(x); Console.WriteLine("Error: " + x); } finally { DateTime dtE = DateTime.Now; TimeSpan ts = dtE.Subtract(dtS); msg.AppendLine("Finished process in " + ts.TotalMinutes + " minutes."); rp.addMessage("Finished process in " + ts.TotalMinutes + " minutes."); rp.stepPGBar(100); rp.enableClose(); rp.TopMost = false; rp.Close(); } return msg.ToString(); }
private static void runRawPixel(IFunctionRasterDataset fDset, IPnt pSize, IPnt pLoc, rasterUtil rsUtil) { IRasterBandCollection rsBc = (IRasterBandCollection)fDset; for (int b = 0; b < 1; b++) { IRasterBand rsb = rsBc.Item(b); IRawPixels rP = (IRawPixels)rsb; IPixelBlock pb = rP.CreatePixelBlock(pSize); rP.Read(pLoc, pb); for (int r = 0; r < pb.Height; r++) { for (int c = 0; c < pb.Width; c++) { object vl = pb.GetVal(0, c, r); } } } }
private static void runRawBlock(IFunctionRasterDataset fDset, IPnt pSize, IPnt pLoc, rasterUtil rsUtil) { IRaster2 rs2 = (IRaster2)rsUtil.createRaster(fDset); for (int b = 0; b < 1; b++) { object vl = rs2.GetPixelValue(b, 100, 100); } //IRawBlocks rPb = (IRawBlocks)fDset; //IPixelBlock pb = rPb.CreatePixelBlock(); //int bEndc = (int)Math.Ceiling(pSize.X / pb.Width); //int bEndr = (int)Math.Ceiling(pSize.Y / pb.Height); //for (int rb = 0; rb < bEndr; rb += (int)pSize.Y) //{ // for (int cb = 0; cb < bEndc; cb += (int)pSize.X) // { // for (int b = 0; b < rPb.RasterInfo.BandCount; b++) // { // Console.WriteLine("Band " + b.ToString()); // rPb.ReadBlock(100, 100, b, pb); // for (int r = 0; r < pb.Height; r++) // { // for (int c = 0; c < pb.Width; c++) // { // object vl = pb.GetVal(0, c, r); // } // } // } // } //} }
private static void runRasterPb(IFunctionRasterDataset fDset, IPnt pSize, IPnt pLoc, rasterUtil rsUtil) { IRaster rs = rsUtil.createRaster(fDset); IPixelBlock pb = rs.CreatePixelBlock(pSize); rs.Read(pLoc, pb); for (int b = 0; b < 1; b++) { Console.WriteLine("PixelBlock type = " + pb.PixelType[b].ToString()); Console.WriteLine("fDset type = " + fDset.RasterInfo.PixelType.ToString()); for (int r = 0; r < pb.Height; r++) { for (int c = 0; c < pb.Width; c++) { object vl = pb.GetVal(b, c, r); //if (vl == null) Console.WriteLine("VL = null for r,c " + r.ToString() + ", " + c.ToString()); //else Console.WriteLine("VL = " + vl.ToString()); } } } }
static void Main(string[] args) { //ESRI License Initializer generated code. m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeAdvanced}, new esriLicenseExtensionCode[] {}); System.DateTime dt = System.DateTime.Now; System.DateTime dt2; TimeSpan ts; rasterUtil rsUtil = new rasterUtil(); geoDatabaseUtility geoUtil = new geoDatabaseUtility(); featureUtil ftrUtil = new featureUtil(); string zones = @"C:\Users\jshogland\Documents\JOHN\Requests\TaceyFrescino\forFIESTA\test.gdb\utcobnd"; string values = @"C:\Users\jshogland\Documents\JOHN\Requests\TaceyFrescino\forFIESTA\test.gdb\AdminBoundary"; string[] flds = { "m_BAA_all_1" }; IFeatureClass zonesFtr = geoUtil.getFeatureClass(zones); IFeatureClass valuesFtr = geoUtil.getFeatureClass(values); ftrUtil.weightFieldValuesByAreaLength(valuesFtr, flds, zonesFtr); //string ftpSite = @"ftp://rockyftp.cr.usgs.gov/vdelivery/Datasets/Staged/NAIP/mt_2013/"; //List<string> fNames = getFileNames(ftpSite); //string outDir = @"E:\Helena\NAIP\Bulk Order 421750\NAIP JPG2000"; //List<string> exNames = getExistingNames(outDir); //List<string> tiles = getTiles(); //for (int i = 0; i < fNames.Count; i++) //{ // string fName = fNames[i]; // string lfn = fName.Substring(0, 7); // if (tiles.Contains(lfn.ToLower())) // { // if (!exNames.Contains(fName)) // { // Console.WriteLine("Total number of files = " + fNames.Count.ToString()); // Console.WriteLine("Downloading " + fName); // bool gotFile = Download(ftpSite, outDir, fName); // Console.WriteLine("Got File " + fName + " " + gotFile.ToString()); // } // } //} dt2 = System.DateTime.Now; ts = dt2.Subtract(dt); Console.WriteLine("Total Seconds RawBlock= " + ts.TotalSeconds.ToString()); m_AOLicenseInitializer.ShutdownApplication(); }
/// <summary> /// LocalStatistics /// </summary> /// <param name="inRaster">string, IRasterDataset, or Raster</param> /// <returns>IRaster</returns> public IFunctionRasterDataset localStatisticsfunction(object inRaster, rasterUtil.localType op) { string tempAr = funcDir + "\\" + FuncCnt + ".afr"; IFunctionRasterDataset frDset = new FunctionRasterDatasetClass(); IFunctionRasterDatasetName frDsetName = new FunctionRasterDatasetNameClass(); frDsetName.FullName = tempAr; frDset.FullName = (IName)frDsetName; IRasterFunction rsFunc = null; switch (op) { case localType.MAX: rsFunc = new FunctionRasters.localMaxFunctionDataset(); break; case localType.MIN: rsFunc = new FunctionRasters.localMinFunctionDataset(); break; case localType.SUM: rsFunc = new FunctionRasters.localSumFunctionDataset(); break; case localType.MULTIPLY: rsFunc = new FunctionRasters.localMultiplyFunctionDataset(); break; case localType.DIVIDE: rsFunc = new FunctionRasters.localDividFunctionDataset(); break; case localType.SUBTRACT: rsFunc = new FunctionRasters.localSubtractFunctionDataset(); break; case localType.POWER: rsFunc = new FunctionRasters.localPowFunctionDataset(); break; case localType.MEAN: rsFunc = new FunctionRasters.localMeanFunctionDataset(); break; case localType.VARIANCE: rsFunc = new FunctionRasters.localVarianceFunctionDataset(); break; case localType.STD: rsFunc = new FunctionRasters.localStandardDeviationFunctionDataset(); break; case localType.MODE: rsFunc = new FunctionRasters.localModeFunctionDataset(); break; case localType.MEDIAN: rsFunc = new FunctionRasters.localMedianFunctionDataset(); break; case localType.UNIQUE: rsFunc = new FunctionRasters.localUniqueValuesFunctionDataset(); break; case localType.ENTROPY: rsFunc = new FunctionRasters.localEntropyFunctionDataset(); break; case localType.MAXBAND: rsFunc = new FunctionRasters.localMaxBandFunction(); break; case localType.MINBAND: rsFunc = new FunctionRasters.localMinBandFunction(); break; case localType.ASM: rsFunc = new FunctionRasters.localAsmFunctionDataset(); break; default: break; } FunctionRasters.LocalFunctionArguments args = new FunctionRasters.LocalFunctionArguments(this); IFunctionRasterDataset inRs = createIdentityRaster(inRaster); args.InRaster = inRs; frDset.Init(rsFunc, args); return frDset; }
public IFunctionRasterDataset localRescalefunction(object inRaster, rasterUtil.localRescaleType op) { string tempAr = funcDir + "\\" + FuncCnt + ".afr"; IFunctionRasterDataset frDset = new FunctionRasterDatasetClass(); IFunctionRasterDatasetName frDsetName = new FunctionRasterDatasetNameClass(); frDsetName.FullName = tempAr; frDset.FullName = (IName)frDsetName; IRasterFunction rsFunc = null; switch (op) { case localRescaleType.PrcTile: rsFunc = new FunctionRasters.localPrctileDataset(); break; default: break; } FunctionRasters.LocalRescaleFunctionArguments args = new FunctionRasters.LocalRescaleFunctionArguments(this); IFunctionRasterDataset inRs = createIdentityRaster(inRaster); args.InRaster = inRs; frDset.Init(rsFunc, args); return frDset; }
public functionModel() { rsUtil = new rasterUtil(); }
public functionModel(rasterUtil rasterUtility) { rsUtil = rasterUtility; }
public segmentation(rasterUtil rasterUtility, IRaster inRaster, double maximumArea, double minimumArea, int sensitivity, IWorkspace OutputWorkspace=null, string OutputFeatureClassName="segPoly", bool SmoothPolygon = false) { rsUtil = rasterUtility; inputRaster = inRaster; bCnt = ((IRasterBandCollection)inputRaster).Count; ftrMeans = new double[bCnt]; maxArea = maximumArea; minArea = minimumArea; specificity = sensitivity; OutName = OutputFeatureClassName; if (OutputWorkspace == null) { IRaster2 rs2 = (IRaster2)inRaster; IDataset dSet = (IDataset)rs2.RasterDataset; OutWorkSpace = dSet.Workspace; } else { OutWorkSpace = OutputWorkspace; } Smooth = SmoothPolygon; }
public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.focalType statType,double cells) { IRasterBandCollection rsbci = (IRasterBandCollection)inRaster; IRasterBandCollection rsbco = (IRasterBandCollection)outRaster; for (int i = 0; i < rsbci.Count; i++) { IRasterBand rsBi = rsbci.Item(i); IRasterBand rsBo = rsbco.Item(i); IRasterStatistics rsBStatsi = rsBi.Statistics; IRasterStatistics rsBStatso = rsBo.Statistics; if (rsBStatsi == null) { continue; } if (rsBStatso == null) { rsBStatso = new RasterStatistics(); } switch (statType) { case rasterUtil.focalType.MAX: rsBStatso.Maximum = rsBStatsi.Maximum; rsBStatso.Minimum = rsBStatsi.Minimum; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation; rsBStatso.Mean = rsBStatsi.Mean; break; case rasterUtil.focalType.MIN: rsBStatso.Maximum = rsBStatsi.Maximum; rsBStatso.Minimum = rsBStatsi.Minimum; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation; rsBStatso.Mean = rsBStatsi.Mean; break; case rasterUtil.focalType.SUM: rsBStatso.Maximum = rsBStatsi.Maximum*cells; rsBStatso.Minimum = rsBStatsi.Minimum*cells; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation*cells; rsBStatso.Mean = rsBStatsi.Mean*cells; break; case rasterUtil.focalType.MEAN: rsBStatso.Maximum = rsBStatsi.Maximum; rsBStatso.Minimum = rsBStatsi.Minimum; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation; rsBStatso.Mean = rsBStatsi.Mean; break; case rasterUtil.focalType.MODE: rsBStatso.Maximum = rsBStatsi.Maximum; rsBStatso.Minimum = rsBStatsi.Minimum; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation; rsBStatso.Mean = rsBStatsi.Mean; break; case rasterUtil.focalType.MEDIAN: rsBStatso.Maximum = rsBStatsi.Maximum; rsBStatso.Minimum = rsBStatsi.Minimum; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation; rsBStatso.Mean = rsBStatsi.Mean; break; case rasterUtil.focalType.VARIANCE: rsBStatso.Maximum = rsBStatsi.Maximum; rsBStatso.Minimum = rsBStatsi.Minimum; rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation; rsBStatso.Mean = rsBStatsi.Mean; break; case rasterUtil.focalType.STD: rsBStatso.Mean = rsBStatsi.StandardDeviation; rsBStatso.Maximum = rsBStatso.Mean*1.96; rsBStatso.Minimum = rsBStatso.Mean-(rsBStatso.Maximum-rsBStatso.Mean); rsBStatso.StandardDeviation = (rsBStatso.Maximum-rsBStatso.Mean)/3; break; case rasterUtil.focalType.UNIQUE: rsBStatso.Maximum = cells; rsBStatso.Minimum = 1; rsBStatso.Mean = cells / 2; rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3; break; case rasterUtil.focalType.ENTROPY: rsBStatso.Maximum = cells*0.4*(-1*0.4*Math.Log(0.4)); rsBStatso.Minimum = 0; rsBStatso.Mean = rsBStatso.Maximum / 2; rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3; break; case rasterUtil.focalType.ASM: rsBStatso.Maximum = 1; rsBStatso.Minimum = 0; rsBStatso.Mean = rsBStatso.Maximum / 2; rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3; break; default: break; } } }
public segmentation() { rsUtil = new rasterUtil(); }
public batchCalculations() { rsUtil = new rasterUtil(); //rp.Show(); }
public void summarizeRelatedTable(ITable pTable, ITable rTable, string plinkField, string rlinkField, string[] summaryFlds, string[] groupFlds, rasterUtil.focalType[] stats,string pWhere="", string rWhere="") { bool needCatDic = false; if(stats.Contains(rasterUtil.focalType.ASM)||stats.Contains(rasterUtil.focalType.ENTROPY)||stats.Contains(rasterUtil.focalType.MEDIAN)||stats.Contains(rasterUtil.focalType.MODE)||stats.Contains(rasterUtil.focalType.UNIQUE))needCatDic=true; HashSet<string> uGroups; //Console.WriteLine("Summarizing values"); Dictionary<string,Dictionary<string, object[][]>> sumDic = getRelatedSummary(pTable, rTable, plinkField, rlinkField, summaryFlds, groupFlds, needCatDic, pWhere, rWhere, out uGroups);//<link,<group,[6][number of fields to summarize]> foreach (string s in sumDic.Keys) { //Console.WriteLine("ID key:" + s); } foreach (string s in uGroups) { //Console.WriteLine("Group:" + s); } //Console.WriteLine("Updating parent"); int[] newFldNameIndex = new int[summaryFlds.Length * uGroups.Count * (stats.Length+1)]; string[] newFldNameString = new string[summaryFlds.Length * uGroups.Count * (stats.Length+1)]; int IndexCnt = 0; //int nIndex = pTable.FindField(geoUtil.createField(pTable,"n",esriFieldType.esriFieldTypeDouble,false)); int linkIndex = pTable.FindField(plinkField); for (int i = 0; i < summaryFlds.Length; i++) { string fldNm = summaryFlds[i]; foreach(string k in uGroups) { string fldNm2 = fldNm + "_" + k; string newFldName = geoUtil.createField(pTable, fldNm2 + "_N", esriFieldType.esriFieldTypeInteger, false); newFldNameString[IndexCnt] = newFldName; newFldNameIndex[IndexCnt] = pTable.FindField(newFldName); IndexCnt += 1; for (int j = 0; j < stats.Length; j++) { string fldNm3 = fldNm2 + "_" + stats[j]; newFldName = geoUtil.createField(pTable, fldNm3, esriFieldType.esriFieldTypeDouble, false); newFldNameString[IndexCnt]=newFldName; newFldNameIndex[IndexCnt] = pTable.FindField(newFldName); IndexCnt += 1; } } } IQueryFilter pQf = new QueryFilterClass(); if (!String.IsNullOrEmpty(pWhere)) pQf.WhereClause = pWhere; ICursor cur = pTable.Update(pQf, true); IRow rw = cur.NextRow(); while (rw != null) { string lnk = rw.get_Value(linkIndex).ToString(); Dictionary<string,object[][]> d; if (sumDic.TryGetValue(lnk, out d)) { //Console.WriteLine("Found dictionary value " + lnk); object n = 0; for (int i = 0; i < newFldNameString.Length; i++) { string fldNameC = newFldNameString[i]; string[] fldnameArr = fldNameC.Split(new char[] { '_' }); string fld = fldnameArr[0]; string grp = fldnameArr[1]; for (int k = 1; k < groupFlds.Length; k++) { grp = grp + "_" + fldnameArr[1 + k]; } string st = fldnameArr[fldnameArr.Length-1]; object[][] vlFldArr; if (d.TryGetValue(grp, out vlFldArr)) { //Console.WriteLine("Found Group value " + grp); object uVl = 0; int clIndex = System.Array.IndexOf(summaryFlds, fld); object[] vlArr = vlFldArr[clIndex]; n = vlArr[0]; if (st != "N") { rasterUtil.focalType sType = (rasterUtil.focalType)Enum.Parse(typeof(rasterUtil.focalType), st); //Console.WriteLine(sType.ToString()); switch (sType) { case rasterUtil.focalType.SUM: uVl = vlArr[1]; break; case rasterUtil.focalType.MIN: uVl = vlArr[3]; break; case rasterUtil.focalType.MAX: uVl = vlArr[4]; break; case rasterUtil.focalType.MEAN: uVl = System.Convert.ToDouble(vlArr[1]) / System.Convert.ToDouble(n); break; case rasterUtil.focalType.STD: uVl = Math.Sqrt((System.Convert.ToDouble(vlArr[2]) - (System.Convert.ToDouble(vlArr[1]) / System.Convert.ToDouble(n))) / (System.Convert.ToDouble(n) - 1)); break; case rasterUtil.focalType.MODE: uVl = getMode((Dictionary<string, int>)vlArr[5]); break; case rasterUtil.focalType.MEDIAN: uVl = getMedian((Dictionary<string, int>)vlArr[5]); break; case rasterUtil.focalType.VARIANCE: uVl = (System.Convert.ToDouble(vlArr[2]) - (System.Convert.ToDouble(vlArr[1]) / System.Convert.ToDouble(n))) / (System.Convert.ToDouble(n) - 1); break; case rasterUtil.focalType.UNIQUE: uVl = ((Dictionary<string, int>)vlArr[5]).Keys.Count; break; case rasterUtil.focalType.ENTROPY: uVl = getEntropy((Dictionary<string, int>)vlArr[5]); break; case rasterUtil.focalType.ASM: uVl = getASM((Dictionary<string, int>)vlArr[5]); break; default: break; } } else { uVl = n; } rw.set_Value(newFldNameIndex[i], uVl); } else { //Console.WriteLine("Could not find Group " + grp); rw.set_Value(newFldNameIndex[i], 0); } } } else { for (int i = 0; i < newFldNameString.Length; i++) { rw.set_Value(newFldNameIndex[i], 0); } } cur.UpdateRow(rw); rw = cur.NextRow(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(cur); }
public static void summarizeBiomassPolygon(IFeatureClass pointFtr, IField[] fldsToSummarize, IFunctionRasterDataset strataRaster, IFeatureClass standsFtr, geoDatabaseUtility geoUtil = null, rasterUtil rsUtil = null) { if (geoUtil == null) geoUtil = new geoDatabaseUtility(); if(rsUtil == null) rsUtil = new rasterUtil(); int cnt = 0; //need to work on calculating N Dictionary<string,double[][]> vlDic = getDictionaryValues(pointFtr, fldsToSummarize, strataRaster, geoUtil, rsUtil); //Strata: SummaryFields [{sum,sum2,cnt},...] int[] meanFldIndex = new int[fldsToSummarize.Length]; int[] varFldIndex = new int[fldsToSummarize.Length]; int[] cntFldIndex = new int[fldsToSummarize.Length]; //string cntName = geoUtil.createField(standsFtr, "n", esriFieldType.esriFieldTypeInteger, false); //int cntIndex = standsFtr.FindField(cntName); foreach (IField fld in fldsToSummarize) { string sName = geoUtil.createField(standsFtr, "v_" + fld.Name, esriFieldType.esriFieldTypeDouble, false); varFldIndex[cnt] = standsFtr.FindField(sName); string mName = geoUtil.createField(standsFtr, "m_" + fld.Name, esriFieldType.esriFieldTypeDouble, false); meanFldIndex[cnt] = standsFtr.FindField(mName); string cntName = geoUtil.createField(standsFtr, "n_" + fld.Name, esriFieldType.esriFieldTypeDouble, false); cntFldIndex[cnt] = standsFtr.FindField(cntName); cnt++; } IFeatureCursor uCur = standsFtr.Update(null, true); IFeature uFtr = uCur.NextFeature(); while (uFtr != null) { ESRI.ArcGIS.Geometry.IGeometry geo = uFtr.Shape; IFunctionRasterDataset cRs = rsUtil.clipRasterFunction(strataRaster, geo, esriRasterClippingType.esriRasterClippingOutside); //Console.WriteLine("Clipping raster"); Dictionary<string, double> rsStrataPropDic = getStrataProportion(cRs,rsUtil); //Strata: proportion of area //int tn = 0; //double[] tn = new double[meanFldIndex.Length]; double[][] updateValuesArr = new double[meanFldIndex.Length][]; for (int i = 0; i < meanFldIndex.Length; i++) { updateValuesArr[i] = new double[3]; } foreach (KeyValuePair<string, double> kvp in rsStrataPropDic) { string stratum = kvp.Key; double proportion = kvp.Value; //Console.WriteLine(stratum + " = " + proportion.ToString()); double[][] vlDicArr; if (vlDic.TryGetValue(stratum, out vlDicArr)) { //double n = vlDicArr[0][2]; //tn += System.Convert.ToInt32(n); for (int i = 0; i < meanFldIndex.Length; i++) { double[] dArr = vlDicArr[i]; double n = dArr[2]; //tn[i] += n; double s=dArr[0]; double s2=dArr[1]; updateValuesArr[i][0] += (s/n) * proportion;//mean updateValuesArr[i][1] += (s2-Math.Pow(s,2)/n)/(n-1) * proportion;//variance updateValuesArr[i][2] += n; } } } //uFtr.set_Value(cntIndex, tn); for (int i = 0; i < meanFldIndex.Length; i++) { uFtr.set_Value(meanFldIndex[i], updateValuesArr[i][0]); uFtr.set_Value(varFldIndex[i], updateValuesArr[i][1]); uFtr.set_Value(cntFldIndex[i], updateValuesArr[i][2]); } uCur.UpdateFeature(uFtr); uFtr = uCur.NextFeature(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(uCur); }
public polytomousLogisticRaster() { rsUtil = new rasterUtil(); }
private static Dictionary<string, double> getStrataProportion(IFunctionRasterDataset strataRaster,rasterUtil rsUtil) { IRaster2 rs2 = (IRaster2)rsUtil.createRaster(strataRaster); Dictionary<string, double> outDic = new Dictionary<string, double>(); IRasterCursor rsCur = rs2.CreateCursorEx(null); //Console.WriteLine(((IRasterProps)rs2).Height.ToString() + ((IRasterProps)rs2).Height.ToString()); int n = 0; do { IPixelBlock pb = rsCur.PixelBlock; //Console.WriteLine("PixelBLock w_h = " + pb.Width.ToString() + "_" + pb.Height.ToString()); for (int r = 0; r < pb.Height; r++) { for (int c = 0; c < pb.Width; c++) { object vlObj = pb.GetVal(0, c, r); if (vlObj != null) { string vl = vlObj.ToString(); double vlCnt; if (outDic.TryGetValue(vl, out vlCnt)) { outDic[vl] = vlCnt + 1; } else { outDic.Add(vl, 1); } n += 1; } else { //Console.WriteLine("VL Null"); } } } } while (rsCur.Next() == true); //Console.WriteLine("OutDic Count = " + outDic.Count.ToString()); System.Runtime.InteropServices.Marshal.ReleaseComObject(rsCur); foreach (string s in outDic.Keys.ToArray()) { double vl = outDic[s]; outDic[s] = vl / n; } return outDic; }
public IRaster convertFeatureClassToRaster(IFeatureClass featureClass, rasterUtil.rasterType rasterType, IWorkspace outWorkSpace, string outName, double cellSize, IRasterDataset snapRaster) { return convertFeatureClassToRaster(featureClass, rasterType, outWorkSpace, outName, cellSize, snapRaster, null); }