本文整理汇总了C#中IRaster.Save方法的典型用法代码示例。如果您正苦于以下问题:C# IRaster.Save方法的具体用法?C# IRaster.Save怎么用?C# IRaster.Save使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IRaster
的用法示例。
在下文中一共展示了IRaster.Save方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Surface
public IRaster Surface(IRaster raster)
{
int nr = raster.NumRows;
int nc = raster.NumColumns;
for (int row = 0; row < nr; row++)
{
for (int col = 0; col < nc; col++)
{
raster.Value[row, col] = data[col, row];
}
}
raster.Save();
raster.Close();
return raster;
}
示例2: Execute
/// <summary>
/// Executes the Erase Opaeration tool programaticaly.
/// Ping deleted static for external testing 01/2010
/// </summary>
/// <param name="input1">The input raster.</param>
/// <param name="input2">The input raster.</param>
/// <param name="output">The output raster.</param>
/// <param name="cancelProgressHandler">The progress handler.</param>
/// <returns></returns>
public bool Execute(IRaster input1, IFeatureSet input2, IRaster output, ICancelProgressHandler cancelProgressHandler)
{
//Validates the input and output data
if (input1 == null || input2 == null || output == null)
{
return false;
}
double cellWidth = input1.CellWidth;
double cellHeight = input1.CellHeight;
//Calculate the Intersect Envelope
IEnvelope envelope1 = input1.Bounds.Envelope;
IEnvelope envelope2 = input2.Envelope;
envelope1 = envelope1.Intersection(envelope2);
int noOfCol = Convert.ToInt32(envelope1.Height / cellHeight);
int noOfRow = Convert.ToInt32(envelope1.Width / cellWidth);
//create output raster
output = Raster.Create(output.Filename, "", noOfCol, noOfRow, 1, typeof(int), new[] { "" });
RasterBounds bound = new RasterBounds(noOfRow, noOfCol, envelope1);
output.Bounds = bound;
output.NoDataValue = input1.NoDataValue;
RcIndex v1;
// MapWindow.Analysis.Topology.Algorithm.PointLocator pointLocator1 = new MapWindow.Analysis.Topology.Algorithm.PointLocator();
int previous = 0;
int max = (output.Bounds.NumRows + 1);
for (int i = 0; i < output.Bounds.NumRows; i++)
{
for (int j = 0; j < output.Bounds.NumColumns; j++)
{
Coordinate cellCenter = output.CellToProj(i, j);
//test if the coordinate is inside of the polygon
bool isInside = false;
IFeature pointFeat = new Feature(new Point(cellCenter));
foreach (IFeature f in input2.Features)
{
if (f.Contains(pointFeat))
{
//output.Value[i, j] = val1;
isInside = true;
break;
}
}
if (isInside)
{
v1 = input1.ProjToCell(cellCenter);
double val1;
if (v1.Row <= input1.EndRow && v1.Column <= input1.EndColumn && v1.Row > -1 && v1.Column > -1)
val1 = input1.Value[v1.Row, v1.Column];
else
val1 = output.NoDataValue;
output.Value[i, j] = val1;
}
else
{
output.Value[i, j] = output.NoDataValue;
}
if (cancelProgressHandler.Cancel)
return false;
}
int current = Convert.ToInt32(Math.Round(i * 100D / max));
//only update when increment in percentage
if (current > previous)
cancelProgressHandler.Progress("", current, current + TextStrings.progresscompleted);
previous = current;
}
//output = Temp;
output.Save();
return true;
}
示例3: Execute
/// <summary>
/// Executes the ReSample Opaeration tool programaticaly
/// Ping deleted the static property for external testing
/// </summary>
/// <param name="input1">The input raster</param>
/// <param name="oldCellSize">The size of the cells Hight</param>
/// <param name="newCellSize">The size of the cells Width</param>
/// <param name="output">The output raster</param>
/// <param name="cancelProgressHandler">The progress handler</param>
/// <returns></returns>
public bool Execute(IRaster input1, double newCellHeight, double newCellWidth, IRaster output, ICancelProgressHandler cancelProgressHandler)
{
//Validates the input and output data
if (input1 == null || newCellWidth == 0 || output == null)
{
return false;
}
IEnvelope envelope = input1.Bounds.Envelope;
//Calculate new number of columns and rows
int noOfCol = Convert.ToInt32(Math.Abs(envelope.Width / newCellWidth));
int noOfRow = Convert.ToInt32(Math.Abs(envelope.Height / newCellHeight));
int previous = 0;
//************OLD Method
////Create the new raster with the appropriate dimensions
//Raster Temp = new Raster();
////Temp.CreateNew(output.Filename, noOfRow, noOfCol, input1.DataType);
//Temp.CreateNew(output.Filename, "", noOfCol, noOfRow, 1, input1.DataType, new string[] { "" });
//Temp.CellWidth = newCellSize;
//Temp.CellHeight = oldCellSize;
//Temp.Xllcenter = input1.Bounds.Envelope.Minimum.X + (Temp.CellWidth / 2);
//Temp.Yllcenter = input1.Bounds.Envelope.Minimum.Y + (Temp.CellHeight / 2);
//***************
//create output raster
output = Raster.Create(output.Filename, "", noOfCol, noOfRow, 1, input1.DataType, new[] { "" });
RasterBounds bound = new RasterBounds(noOfRow, noOfCol, envelope);
output.Bounds = bound;
output.NoDataValue = input1.NoDataValue;
RcIndex index1;
//Loop throug every cell for new value
int max = (output.Bounds.NumRows + 1);
for (int i = 0; i < output.Bounds.NumRows; i++)
{
for (int j = 0; j < output.Bounds.NumColumns; j++)
{
//Projet the cell position to Map
Coordinate cellCenter = output.CellToProj(i, j);
index1=input1.ProjToCell(cellCenter);
double val;
if (index1.Row <= input1.EndRow && index1.Column <= input1.EndColumn && index1.Row > -1 && index1.Column > -1)
{
if (input1.Value[index1.Row, index1.Column] == input1.NoDataValue)
val = output.NoDataValue;
else
val = input1.Value[index1.Row, index1.Column];
}
else
val = output.NoDataValue;
output.Value[i, j] = val;
if (cancelProgressHandler.Cancel)
return false;
}
int current = Convert.ToInt32(Math.Round(i * 100D / max));
//only update when increment in persentage
if (current > previous)
cancelProgressHandler.Progress("", current, current + TextStrings.progresscompleted);
previous = current;
}
//output = Temp;
output.Save();
return true;
}
示例4: Slope
/// <summary>
/// Executes the slope generation raster.
/// </summary>
/// <param name="ras">The input altitude raster.</param>
/// <param name="inZFactor">The multiplicitive scaling factor for elveation.</param>
/// <param name="slopeInPercent">Boolean that is true if the slope values should be returned as percentages.</param>
/// <param name="result">The output slope raster.</param>
/// <param name="cancelProgressHandler">The progress handler.</param>
/// <returns>Boolean, true if the method was successful.</returns>
private static bool Slope(
ref IRaster ras,
double inZFactor,
bool slopeInPercent,
ref IRaster result,
ICancelProgressHandler cancelProgressHandler)
{
// Validates the input and output data
if (ras == null || result == null)
{
return false;
}
try
{
int noOfCol = ras.NumColumns;
int noOfRow = ras.NumRows;
// Create the new raster with the appropriate dimensions
IRaster temp = Raster.CreateRaster(
"SlopeRaster.bgd", string.Empty, noOfCol, noOfRow, 1, typeof(double), new[] { string.Empty });
temp.NoDataValue = ras.NoDataValue;
temp.Bounds = ras.Bounds;
for (int i = 0; i < temp.NumRows; i++)
{
for (int j = 0; j < temp.NumColumns; j++)
{
if (i > 0 && i < temp.NumRows - 1 && j > 0 && j < temp.NumColumns - 1)
{
double z1 = ras.Value[i - 1, j - 1];
double z2 = ras.Value[i - 1, j];
double z3 = ras.Value[i - 1, j + 1];
double z4 = ras.Value[i, j - 1];
double z5 = ras.Value[i, j + 1];
double z6 = ras.Value[i + 1, j - 1];
double z7 = ras.Value[i + 1, j];
double z8 = ras.Value[i + 1, j + 1];
// 3rd Order Finite Difference slope algorithm
double dZdX = inZFactor * ((z3 - z1) + 2 * (z5 - z4) + (z8 - z6)) / (8 * ras.CellWidth);
double dZdY = inZFactor * ((z1 - z6) + 2 * (z2 - z7) + (z3 - z8)) / (8 * ras.CellHeight);
double slope = Math.Atan(Math.Sqrt((dZdX * dZdX) + (dZdY * dZdY))) * (180 / Math.PI);
// change to radious and in persentage
if (slopeInPercent)
{
slope = Math.Tan(slope * Math.PI / 180) * 100;
}
temp.Value[i, j] = slope;
if (cancelProgressHandler.Cancel)
{
return false;
}
}
else
{
temp.Value[i, j] = temp.NoDataValue;
}
if (cancelProgressHandler.Cancel)
{
return false;
}
}
}
result = temp;
if (result.IsFullyWindowed())
{
result.Save();
return true;
}
return false;
}
catch (Exception ex)
{
// throw new SystemException("Error in Slope: ", ex);
throw new SystemException(ex.ToString());
}
}
示例5: Execute
/// <summary>
/// Executes the Erase Opaeration tool programaticaly.
/// </summary>
/// <param name="input1">The input raster.</param>
/// <param name="input2">The input raster.</param>
/// <param name="output">The output raster.</param>
/// <param name="cancelProgressHandler">The progress handler.</param>
/// <returns></returns>
public bool Execute(IRaster input1, IFeatureSet input2, IRaster output, MapWindow.Tools.ICancelProgressHandler cancelProgressHandler)
{
//Validates the input and output data
if (input1 == null || input2 == null || output == null)
{
return false;
}
int noOfCol = input1.NumColumns;
int noOfRow = input1.NumRows;
//Calculate the Intersect Envelope
IEnvelope envelope1 = new Envelope() as IEnvelope;
IEnvelope envelope2 = new Envelope() as IEnvelope;
envelope1 = input1.Bounds.Envelope;
envelope2 = input2.Envelope;
envelope1 = envelope1.Intersection(envelope2);
//Create the new raster with the appropriate dimensions
IRaster Temp = Raster.Create(output.Filename, "", noOfCol, noOfRow, 1, input1.DataType, new string[] { });
//Temp.CreateNew(output.Filename, noOfRow, noOfCol, input1.DataType);
Temp.CellWidth = input1.CellWidth;
Temp.CellHeight = input1.CellHeight;
Temp.Xllcenter = envelope1.Minimum.X + (Temp.CellWidth / 2);
Temp.Yllcenter = envelope1.Minimum.Y + (Temp.CellHeight / 2);
MapWindow.Geometries.ICoordinate I1 = new MapWindow.Geometries.Coordinate() as MapWindow.Geometries.ICoordinate;
RcIndex v1 = new RcIndex();
// MapWindow.Analysis.Topology.Algorithm.PointLocator pointLocator1 = new MapWindow.Analysis.Topology.Algorithm.PointLocator();
double val1;
int previous = 0;
int current = 0;
int max = (Temp.Bounds.NumRows + 1);
for (int i = 0; i < Temp.Bounds.NumRows; i++)
{
for (int j = 0; j < Temp.Bounds.NumColumns; j++)
{
I1 = Temp.CellToProj(i, j);
v1 = input1.ProjToCell(I1);
if (v1.Row <= input1.EndRow && v1.Column <= input1.EndColumn && v1.Row > -1 && v1.Column > -1)
val1 = input1.Value[v1.Row, v1.Column];
else
val1 = Temp.NoDataValue;
//test if the coordinate is inside of the polygon
bool isInside = false;
IFeature pointFeat = new Feature(new Point(I1)) as IFeature;
foreach (IFeature f in input2.Features)
{
if (f.Contains(pointFeat))
{
Temp.Value[i, j] = val1;
isInside = true;
break;
}
}
if (isInside == false)
{
Temp.Value[i, j] = Temp.NoDataValue;
}
if (cancelProgressHandler.Cancel == true)
return false;
}
current = Convert.ToInt32(Math.Round(i * 100D / max));
//only update when increment in percentage
if (current > previous)
cancelProgressHandler.Progress("", current, current.ToString() + "% progress completed");
previous = current;
}
output = Temp;
output.Save();
return true;
}
示例6: Execute
/// <summary>
/// Executes the RasterFromLAS tool.
/// </summary>
/// <param name="filenameLAS">The string filename of the LAS file to convert.</param>
/// <param name="outputExtent">The extent of the output raster.</param>
/// <param name="numRows">The integer number of rows of the output raster.</param>
/// <param name="numColumns">The integer number of columns.</param>
/// <param name="output">The output raster.</param>
/// <param name="cancelProgressHandler">The progress handler.</param>
/// <returns>Boolean, true if the method was successful.</returns>
public bool Execute(
string filenameLAS,
Extent outputExtent,
int numRows,
int numColumns,
IRaster output,
ICancelProgressHandler cancelProgressHandler)
{
// create output raster
output = Raster.CreateRaster(
output.Filename, string.Empty, numColumns, numRows, 1, typeof(int), new[] { string.Empty });
RasterBounds bound = new RasterBounds(numRows, numColumns, outputExtent);
output.Bounds = bound;
output.NoDataValue = int.MinValue;
ProgressMeter pm = new ProgressMeter(
cancelProgressHandler,
TextStrings.ConvertingLAS + filenameLAS + TextStrings.Progresstoraster + "...",
numRows);
for (int row = 0; row < numRows; row++)
{
for (int j = 0; j < output.Bounds.NumColumns; j++)
{
// TO DO: PING CAN ADD LAS READING AND CELL ASSIGNMENT HERE
if (cancelProgressHandler.Cancel)
{
return false;
}
}
pm.CurrentValue = row;
}
// output = Temp;
output.Save();
return true;
}
示例7: Execute
/// <summary>
/// Executes the slope generation raster.
/// </summary>
/// <param name="ras">The input altitude raster.</param>
/// <param name="inZFactor">A multiplicative scaling factor to be applied to the elevation values before calculating the slope.</param>
/// <param name="slopeInPercent">If this is true, the resulting slopes are returned as percentages.</param>
/// <param name="output">The output slope raster.</param>
/// <param name="cancelProgressHandler">The progress handler.</param>
/// <returns>True if the method worked.</returns>
public bool Execute(
IRaster ras,
double inZFactor,
bool slopeInPercent,
IRaster output,
ICancelProgressHandler cancelProgressHandler)
{
// Validates the input and output data
if (ras == null || output == null)
{
return false;
}
try
{
int noOfCol = ras.NumColumns;
int noOfRow = ras.NumRows;
output = Raster.CreateRaster(
output.Filename, string.Empty, noOfCol, noOfRow, 1, typeof(double), new[] { string.Empty });
output.NoDataValue = ras.NoDataValue;
// output.Bounds = ras.Bounds.Copy();
output.Bounds = ras.Bounds;
int previous = 0;
for (int i = 0; i < output.NumRows; i++)
{
int current = Convert.ToInt32(Math.Round(i * 100D / output.NumRows));
// only update when increment in percentage
if (current > previous)
{
cancelProgressHandler.Progress(string.Empty, current, current + TextStrings.progresscompleted);
}
previous = current;
for (int j = 0; j < output.NumColumns; j++)
{
if (i > 0 && i < output.NumRows - 1 && j > 0 && j < output.NumColumns - 1)
{
double z1 = ras.Value[i - 1, j - 1];
double z2 = ras.Value[i - 1, j];
double z3 = ras.Value[i - 1, j + 1];
double z4 = ras.Value[i, j - 1];
double z5 = ras.Value[i, j + 1];
double z6 = ras.Value[i + 1, j - 1];
double z7 = ras.Value[i + 1, j];
double z8 = ras.Value[i + 1, j + 1];
// 3rd Order Finite Difference slope algorithm
double dZdX = inZFactor * ((z3 - z1) + 2 * (z5 - z4) + (z8 - z6)) / (8 * ras.CellWidth);
double dZdY = inZFactor * ((z1 - z6) + 2 * (z2 - z7) + (z3 - z8)) / (8 * ras.CellHeight);
double slope = Math.Atan(Math.Sqrt((dZdX * dZdX) + (dZdY * dZdY))) * (180 / Math.PI);
// change to radious and in persentage
if (slopeInPercent)
{
slope = Math.Tan(slope * Math.PI / 180) * 100;
}
output.Value[i, j] = slope;
if (cancelProgressHandler.Cancel)
{
return false;
}
}
else
{
output.Value[i, j] = output.NoDataValue;
}
if (cancelProgressHandler.Cancel)
{
return false;
}
}
}
// output = Temp;
if (output.IsFullyWindowed())
{
output.Save();
return true;
}
return false;
}
catch (Exception ex)
//.........这里部分代码省略.........
示例8: Execute
/// <summary>
/// Executes the slope generation raster.
/// </summary>
/// <param name="ras">The input altitude raster.</param>
/// <param name="output">The output slope raster.</param>
/// <param name="cancelProgressHandler">The progress handler.</param>
/// <returns></returns>
public bool Execute(IRaster ras,double inZFactor, bool slopeInPercent,IRaster output, MapWindow.Tools.ICancelProgressHandler cancelProgressHandler)
{
//Validates the input and output data
if (ras == null || output == null)
{
return false;
}
double z1, z2, z3, z4, z5, z6, z7, z8, dZ_dx, dZ_dy, slope;
int current, previous;
try
{
int noOfCol = ras.NumColumns;
int noOfRow = ras.NumRows;
IEnvelope envelope1 = new Envelope() as IEnvelope;
envelope1 = ras.Bounds.Envelope;
output = Raster.Create(output.Filename, "", noOfCol, noOfRow, 1, typeof(double), new string[] { "" });
output.NoDataValue = ras.NoDataValue;
//output.Bounds = ras.Bounds.Copy();
output.Bounds = ras.Bounds;
previous = 0;
for (int i = 0; i < output.NumRows; i++)
{
current = Convert.ToInt32(Math.Round(i * 100D / output.NumRows));
//only update when increment in percentage
if (current > previous)
cancelProgressHandler.Progress("", current, current.ToString() + TextStrings.progresscompleted);
previous = current;
for (int j = 0; j < output.NumColumns; j++)
{
if (i > 0 && i < output.NumRows - 1 && j > 0 && j < output.NumColumns - 1)
{
z1 = ras.Value[i - 1, j - 1];
z2 = ras.Value[i - 1, j];
z3 = ras.Value[i - 1, j + 1];
z4 = ras.Value[i, j - 1];
z5 = ras.Value[i, j + 1];
z6 = ras.Value[i + 1, j - 1];
z7 = ras.Value[i + 1, j];
z8 = ras.Value[i + 1, j + 1];
//3rd Order Finite Difference slope algorithm
dZ_dx = inZFactor * ((z3 - z1) + 2 * (z5 - z4) + (z8 - z6)) / (8 * ras.CellWidth);
dZ_dy = inZFactor * ((z1 - z6) + 2 * (z2 - z7) + (z3 - z8)) / (8 * ras.CellHeight);
slope = Math.Atan(Math.Sqrt((dZ_dx * dZ_dx) + (dZ_dy * dZ_dy))) * (180 / Math.PI);
//change to radious and in persentage
if (slopeInPercent)
slope = (Math.Tan(slope * Math.PI / 180)) * 100;
output.Value[i, j] = slope;
if (cancelProgressHandler.Cancel == true)
return false;
}
else
output.Value[i, j] = output.NoDataValue;
if (cancelProgressHandler.Cancel == true)
return false;
}
}
//output = Temp;
if (output.IsFullyWindowed())
{
output.Save();
return true;
}
else
return false;
}
catch (Exception ex)
{
//throw new SystemException("Error in Slope: ", ex);
throw new SystemException(ex.ToString());
}
}
示例9: GetSlope
/// <summary>
/// Executes the slope generation raster.
/// </summary>
/// <param name="raster">The input altitude raster.</param>
/// <param name="inZFactor">The double precision multiplicative scaling factor for elevation values.</param>
/// <param name="slopeInPercent">A boolean parameter that clarifies the nature of the slope values. If this is true, the values represent percent slope.</param>
/// <param name="result">The output slope raster.</param>
/// <param name="cancelProgressHandler">The progress handler.</param>
/// <returns>A boolean value, true if the process was successful.</returns>
public static bool GetSlope(IRaster raster, double inZFactor, bool slopeInPercent, ref IRaster result,
ICancelProgressHandler cancelProgressHandler)
{
//Validates the input and output data
if (raster == null || result == null)
{
return false;
}
int noOfCol = raster.NumColumns;
int noOfRow = raster.NumRows;
//Create the new raster with the appropriate dimensions
IRaster temp = Raster.CreateRaster("SlopeRaster.bgd", string.Empty, noOfCol, noOfRow, 1, typeof(double),
new[] { string.Empty });
temp.NoDataValue = raster.NoDataValue;
temp.Bounds = raster.Bounds;
temp.Projection = raster.Projection;
ProgressMeter progMeter = null;
try
{
if (cancelProgressHandler != null)
progMeter = new ProgressMeter(cancelProgressHandler, "Calculating Slope", temp.NumRows);
for (int i = 0; i < temp.NumRows; i++)
{
if (cancelProgressHandler != null)
{
progMeter.Next();
if ((i % 100) == 0)
{
progMeter.SendProgress();
// HACK: DoEvents messes up the normal flow of your application.
System.Windows.Forms.Application.DoEvents();
}
}
for (int j = 0; j < temp.NumColumns; j++)
{
if (i > 0 && i < temp.NumRows - 1 && j > 0 && j < temp.NumColumns - 1)
{
double z1 = raster.Value[i - 1, j - 1];
double z2 = raster.Value[i - 1, j];
double z3 = raster.Value[i - 1, j + 1];
double z4 = raster.Value[i, j - 1];
double z5 = raster.Value[i, j + 1];
double z6 = raster.Value[i + 1, j - 1];
double z7 = raster.Value[i + 1, j];
double z8 = raster.Value[i + 1, j + 1];
//3rd Order Finite Difference slope algorithm
double dZdX = inZFactor * ((z3 - z1) + (2 * (z5 - z4)) + (z8 - z6)) / (8 * raster.CellWidth);
double dZdY = inZFactor * ((z1 - z6) + (2 * (z2 - z7)) + (z3 - z8)) / (8 * raster.CellHeight);
double slope = Math.Atan(Math.Sqrt((dZdX * dZdX) + (dZdY * dZdY))) * (180 / Math.PI);
//change to radius and in percentage
if (slopeInPercent)
{
slope = (Math.Tan(slope * Math.PI / 180)) * 100;
}
temp.Value[i, j] = slope;
if (cancelProgressHandler != null && cancelProgressHandler.Cancel)
{
return false;
}
}
else
{
temp.Value[i, j] = temp.NoDataValue;
}
if (cancelProgressHandler != null && cancelProgressHandler.Cancel)
{
return false;
}
}
}
result = temp;
if (result.IsFullyWindowed())
{
result.Save();
return true;
}
return false;
}
//.........这里部分代码省略.........
示例10: Execute
/// <summary>
/// Executes the Erase Opaeration tool programaticaly
/// Ping Yang deleted static for external testing 01/2010
/// </summary>
/// <param name="input">The input raster</param>
/// <param name="oldValue">The original double value representing no-data</param>
/// <param name="newValue">The new double value representing no-data</param>
/// <param name="output">The output raster</param>
/// <param name="cancelProgressHandler">The progress handler</param>
/// <returns></returns>
public bool Execute(
IRaster input,
double oldValue,
double newValue,
IRaster output,
ICancelProgressHandler cancelProgressHandler)
{
// Validates the input and output data
if (input == null || newValue == 0 || output == null)
{
return false;
}
Extent envelope = input.Bounds.Extent;
int noOfCol = input.NumColumns;
int noOfRow = input.NumRows;
int previous = 0;
Type dataType = input.DataType;
// create output raster
output = Raster.CreateRaster(
output.Filename, string.Empty, noOfCol, noOfRow, 1, dataType, new[] { string.Empty });
RasterBounds bound = new RasterBounds(noOfRow, noOfCol, envelope);
output.Bounds = bound;
output.NoDataValue = newValue;
// Loop throug every cell
int max = output.Bounds.NumRows + 1;
for (int i = 0; i < output.Bounds.NumRows; i++)
{
for (int j = 0; j < output.Bounds.NumColumns; j++)
{
if (input.Value[i, j] == oldValue)
{
output.Value[i, j] = newValue;
}
else
{
output.Value[i, j] = input.Value[i, j];
}
if (cancelProgressHandler.Cancel)
{
return false;
}
}
int current = Convert.ToInt32(Math.Round(i * 100D / max));
// only update when increment in persentage
if (current > previous)
{
cancelProgressHandler.Progress(string.Empty, current, current + TextStrings.progresscompleted);
}
previous = current;
}
// output = Temp;
output.Save();
return true;
}
示例11: Execute
/// <summary>
/// Executes the Erase Opaeration tool programaticaly
/// </summary>
/// <param name="input1">The input raster</param>
/// <param name="input2">The input raster</param>
/// <param name="output">The output raster</param>
/// <param name="cancelProgressHandler">The progress handler</param>
/// <returns></returns>
public bool Execute(IRaster input1, IRaster input2, IRaster output, MapWindow.Tools.ICancelProgressHandler cancelProgressHandler)
{
//Validates the input and output data
if (input1 == null || input2 == null || output == null)
{
return false;
}
IEnvelope envelope = new Envelope() as IEnvelope;
envelope = UnionEnvelope(input1, input2);
int noOfCol;
int noOfRow;
//Figures out which raster has smaller cells
IRaster smallestCellRaster;
if (input1.CellWidth < input2.CellWidth) smallestCellRaster = input1;
else smallestCellRaster = input2;
//Given the envelope of the two rasters we calculate the number of columns / rows
noOfCol = Convert.ToInt32(Math.Abs(envelope.Width / smallestCellRaster.CellWidth));
noOfRow = Convert.ToInt32(Math.Abs(envelope.Height / smallestCellRaster.CellHeight));
//Create the new raster with the appropriate dimensions
Raster Temp = new Raster();
//Temp.CreateNew(output.Filename, noOfRow, noOfCol, input1.DataType);
Temp.CreateNew(output.Filename, "", noOfCol, noOfRow, 1, input1.DataType, new string[] { "" });
Temp.CellWidth = smallestCellRaster.CellWidth;
Temp.CellHeight = smallestCellRaster.CellHeight;
Temp.Xllcenter = envelope.Minimum.X + (Temp.CellWidth / 2);
Temp.Yllcenter = envelope.Minimum.Y + (Temp.CellHeight / 2);
MapWindow.Geometries.ICoordinate I1 = new MapWindow.Geometries.Coordinate() as MapWindow.Geometries.ICoordinate;
RcIndex v1 = new RcIndex();
RcIndex v2 = new RcIndex();
double val1;
double val2;
int previous=0;
int current=0;
int max = (Temp.Bounds.NumRows + 1);
for (int i = 0; i < Temp.Bounds.NumRows; i++)
{
for (int j = 0; j < Temp.Bounds.NumColumns; j++)
{
I1 = Temp.CellToProj(i, j);
v1 = input1.ProjToCell(I1);
if (v1.Row <= input1.EndRow && v1.Column <= input1.EndColumn && v1.Row > -1 && v1.Column > -1)
val1 = input1.Value[v1.Row, v1.Column];
else
val1 = input1.NoDataValue;
v2 = input2.ProjToCell(I1);
if (v2.Row <= input2.EndRow && v2.Column <= input2.EndColumn && v2.Row > -1 && v2.Column > -1)
val2 = input2.Value[v2.Row, v2.Column];
else
val2 = input2.NoDataValue;
if (val1 == input1.NoDataValue && val2 == input2.NoDataValue)
{
Temp.Value[i, j] = Temp.NoDataValue;
}
else if (val1 != input1.NoDataValue && val2 == input2.NoDataValue)
{
Temp.Value[i, j] = val1;
}
else if (val1 == input1.NoDataValue && val2 != input2.NoDataValue)
{
Temp.Value[i, j] = val2;
}
else
{
Temp.Value[i, j] = val1;
}
if (cancelProgressHandler.Cancel == true)
return false;
}
current = Convert.ToInt32(Math.Round(i * 100D / max));
//only update when increment in persentage
if(current>previous)
cancelProgressHandler.Progress("", current, current.ToString() + "% progress completed");
previous = current;
}
output = Temp;
output.Save();
return true;
}
示例12: Execute
/// <summary>
/// Generates a new raster given the specified featureset. Values will be given to
/// each cell that coincide with the values in the specified field of the attribute
/// table. If the cellSize is 0, then it will be automatically calculated so that
/// the smaller dimension (between width and height) is 256 cells.
/// Ping Yang delete static for external testing 01/2010
/// </summary>
/// <param name="source">The featureset to convert into a vector format</param>
/// <param name="cellSize">A double giving the geographic cell size.</param>
/// <param name="fieldName">The string fieldName to use</param>
/// <param name="output">The raster that will be created</param>
/// <param name="cancelProgressHandler">A progress handler for handling progress messages</param>
/// <returns></returns>
public bool Execute(IFeatureSet source, double cellSize, string fieldName, IRaster output, ICancelProgressHandler cancelProgressHandler)
{
//Validates the input and output data
if (source == null || output == null)
{
return false;
}
output = MapWindow.Analysis.VectorToRaster.ToRaster(source, ref cellSize, fieldName, output.Filename, "", new string[]{}, cancelProgressHandler);
output.Save();
return true;
}
示例13: Execute
//.........这里部分代码省略.........
// *******************************************************************
lastUpdate = 0;
for (int row = numRows - 2; row > 0; row--)
{
for (int col = numColumns - 2; col > 0; col--)
{
int val = aSqDist[row][col];
// Continue processing only if the current cell is not a target
if (val == targetVal)
{
continue;
}
// read the values of the cell's neighbours
aNcels[0] = aSqDist[row][col + 1]; // E
aNcels[1] = aSqDist[row + 1][col + 1]; // SE
aNcels[2] = aSqDist[row + 1][col]; // S
aNcels[3] = aSqDist[row + 1][col - 1]; // SW
// calculate the squared euclidean distances to each neighbouring cell and to the nearest target cell
aDiff[0] = (aNcels[0] < infD) ? aNcels[0] + 2 * aRx[row][col + 1] + 1 : infD;
aDiff[1] = (aNcels[1] < infD)
? aNcels[1] + 2 * (aRx[row + 1][col + 1] + aRy[row + 1][col + 1] + 1)
: infD;
aDiff[2] = (aNcels[2] < infD) ? aNcels[2] + 2 * aRy[row + 1][col] + 1 : infD;
aDiff[3] = (aNcels[3] < infD)
? aNcels[3] + 2 * (aRx[row + 1][col - 1] + aRy[row + 1][col - 1] + 1)
: infD;
// find neighbouring cell with minimum distance difference
int minDiff = aDiff[0];
int minDiffCell = 0;
for (int i = 1; i < 4; i++)
{
if (aDiff[i] < minDiff)
{
minDiff = aDiff[i];
minDiffCell = i;
}
}
// if a neighbouring cell with known distance smaller than current known distance was found:
if (minDiff < val)
{
// assign the minimum euclidean distance
aSqDist[row][col] = minDiff;
// update the (rX, rY) cell-to-nearest-target vector
switch (minDiffCell)
{
case 0: // E
aRx[row][col] = aRx[row][col + 1] + 1;
aRy[row][col] = aRy[row][col + 1];
break;
case 1: // SE
aRx[row][col] = aRx[row + 1][col + 1] + 1;
aRy[row][col] = aRy[row + 1][col + 1] + 1;
break;
case 2: // S
aRx[row][col] = aRx[row + 1][col];
aRy[row][col] = aRy[row + 1][col] + 1;
break;
case 3: // SW
aRx[row][col] = aRx[row + 1][col - 1] + 1;
aRy[row][col] = aRy[row + 1][col - 1] + 1;
break;
}
}
// end of update (rX, rY) cell-to-nearest-target vector
}
// Write row to output raster
WriteOutputRow(outRaster, row, aSqDist[row]);
// Report progress
int percent = (int)(row / (double)numRows * 100f);
if (percent > lastUpdate)
{
lastUpdate += 1;
cancelProgressHandler.Progress(
string.Empty, lastUpdate, TextStrings.Pass2 + lastUpdate + TextStrings.progresscompleted);
if (cancelProgressHandler.Cancel)
{
return false;
}
}
}
}
// *******************************************************************
// end of second pass proximity calculation loop
// *******************************************************************
// save output raster
output.Save();
return true;
}
示例14: RasterMath
public bool RasterMath(IRaster input1, IRaster input2, IRaster output, ICancelProgressHandler cancelProgressHandler)
{
// Validates the input and output data
if (input1 == null || input2 == null || output == null)
{
return false;
}
Extent envelope = UnionEnvelope(input1, input2);
// Figures out which raster has smaller cells
IRaster smallestCellRaster = input1.CellWidth < input2.CellWidth ? input1 : input2;
// Given the envelope of the two rasters we calculate the number of columns / rows
int noOfCol = Convert.ToInt32(Math.Abs(envelope.Width / smallestCellRaster.CellWidth));
int noOfRow = Convert.ToInt32(Math.Abs(envelope.Height / smallestCellRaster.CellHeight));
// create output raster
output = Raster.CreateRaster(
output.Filename, string.Empty, noOfCol, noOfRow, 1, typeof(int), new[] { string.Empty });
RasterBounds bound = new RasterBounds(noOfRow, noOfCol, envelope);
output.Bounds = bound;
output.NoDataValue = input1.NoDataValue;
RcIndex v1;
RcIndex v2;
int previous = 0;
int max = output.Bounds.NumRows + 1;
for (int i = 0; i < output.Bounds.NumRows; i++)
{
for (int j = 0; j < output.Bounds.NumColumns; j++)
{
Coordinate cellCenter = output.CellToProj(i, j);
v1 = input1.ProjToCell(cellCenter);
double val1;
if (v1.Row <= input1.EndRow && v1.Column <= input1.EndColumn && v1.Row > -1 && v1.Column > -1)
{
val1 = input1.Value[v1.Row, v1.Column];
}
else
{
val1 = input1.NoDataValue;
}
v2 = input2.ProjToCell(cellCenter);
double val2;
if (v2.Row <= input2.EndRow && v2.Column <= input2.EndColumn && v2.Row > -1 && v2.Column > -1)
{
val2 = input2.Value[v2.Row, v2.Column];
}
else
{
val2 = input2.NoDataValue;
}
if (val1 == input1.NoDataValue && val2 == input2.NoDataValue)
{
output.Value[i, j] = output.NoDataValue;
}
else if (val1 != input1.NoDataValue && val2 == input2.NoDataValue)
{
output.Value[i, j] = output.NoDataValue;
}
else if (val1 == input1.NoDataValue && val2 != input2.NoDataValue)
{
output.Value[i, j] = output.NoDataValue;
}
else
{
output.Value[i, j] = Operation(val1, val2);
}
if (cancelProgressHandler.Cancel)
{
return false;
}
}
int current = Convert.ToInt32(Math.Round(i * 100D / max));
// only update when increment in persentage
if (current > previous)
{
cancelProgressHandler.Progress(string.Empty, current, current + TextStrings.progresscompleted);
}
previous = current;
}
// output = Temp;
output.Save();
return true;
}
示例15: Execute
//.........这里部分代码省略.........
return false;
//double CellSize = poly.Envelope.Width / 255;
//int noOfRow = Convert.ToInt32(poly.Envelope.Height / CellSize);
//int noOfCol = Convert.ToInt32(poly.Envelope.Width / CellSize);
output=Raster.Create(output.Filename,"",noOfCol,noOfRow,1,typeof(int),new string[] { "" });
RasterBounds bound = new RasterBounds(noOfRow, noOfCol, poly.Envelope);
output.Bounds=bound;
output.NoDataValue = -1;
int current, previous = 0;
double area = 0.0, previousArea = 0.0;
double hCellWidth = output.CellWidth / 2;
double hCellHeight = output.CellHeight / 2;
ICoordinate[] coordinateCell=new Coordinate[4];
int polyIndex = -1;
bool cover = false;
//IEnvelope env=null;
for (int i = 0; i < output.NumRows; i++)
{
current = Convert.ToInt32(i*100 / output.NumRows);
//only update when increment in percentage
if (current > previous+5)
{
cancelProgressHandler.Progress("", current, current.ToString() + "% progress completed");
previous = current;
}
for (int j = 0; j < output.NumColumns; j++)
{
polyIndex = -1;
area = 0.0;
previousArea = 0.0;
cover=false;
ICoordinate cordinate=null;
cordinate = output.CellToProj(i, j);
//make the center of cell as point geometry
IPoint pt=new Point(cordinate);
for(int f=0;f<poly.Features.Count;f++)
{
if (selectionIndex == 0)
{
if (poly.Features[f].Covers(pt))
{
output.Value[i, j] = f;
cover = true;
break;
}
if (cancelProgressHandler.Cancel == true)
return false;
}
else //process area based selection
{
ICoordinate tempCo = new Coordinate(cordinate.X - hCellWidth, cordinate.Y - hCellHeight);
coordinateCell[0] = tempCo;
tempCo = new Coordinate(cordinate.X + hCellWidth, cordinate.Y - hCellHeight);
coordinateCell[1] = tempCo;
tempCo = new Coordinate(cordinate.X + hCellWidth, cordinate.Y + hCellHeight);
coordinateCell[2] = tempCo;
tempCo = new Coordinate(cordinate.X - hCellWidth, cordinate.Y + hCellHeight);
coordinateCell[3] = tempCo;
List<ICoordinate> ListCellCordinate = new List<ICoordinate>();
ListCellCordinate = coordinateCell.ToList<ICoordinate>();
IFeature cell = new Feature(FeatureTypes.Polygon, ListCellCordinate);
IFeature commonFeature=poly.Features[f].Intersection(cell);
if (commonFeature == null)
continue;
area=commonFeature.Area();
if (area > previousArea)
{
polyIndex = f;
cover = true;
previousArea = area;
}
if (cancelProgressHandler.Cancel == true)
return false;
}
}
if (cover == true)
{
if (selectionIndex == 1)
output.Value[i, j] = polyIndex;
}
else
output.Value[i, j] = output.NoDataValue;
}
}
//output.SaveAs(output.Filename);
output.Save();
//output.SaveAs(output.Filename);
return true;
}