Skip to content
Snippets Groups Projects
Commit 5fd1ba2a authored by Антон Кудряшов's avatar Антон Кудряшов
Browse files

- fixed spacing in main

- fixed checkers for PRM classes
- getters, setters minor changes
parent 4bd177f8
No related branches found
No related tags found
No related merge requests found
......@@ -96,161 +96,182 @@ namespace MES_Wind
private void btnCalcStress_Click(object sender, EventArgs e)
{
//extract prognostic u layer
IMapRasterLayer uRasterLayer = default(IMapRasterLayer);
IMapRasterLayer vRasterLayer = default(IMapRasterLayer);
IMapRasterLayer clim5RasterLayer = default(IMapRasterLayer);
IMapRasterLayer clim10RasterLayer = default(IMapRasterLayer);
IMapRasterLayer clim15RasterLayer = default(IMapRasterLayer);
if (map1.GetRasterLayers().Count() == 1)
{
MessageBox.Show("Please add a raster layer");
return;
}
//this makes raster layers list in map1 ordered!
uRasterLayer = map1.GetRasterLayers()[0];
vRasterLayer = map1.GetRasterLayers()[1];
clim5RasterLayer = map1.GetRasterLayers()[2];
clim10RasterLayer = map1.GetRasterLayers()[3];
clim15RasterLayer = map1.GetRasterLayers()[4];
//get the powerline line layer
IMapLineLayer pwlLayer = default(IMapLineLayer);
if (map1.GetLineLayers().Count() == 0)
const double eps = 0.0001;
const double RasterMissingValue = -9999;
//extract prognostic u layer
IMapRasterLayer uRasterLayer = default(IMapRasterLayer);
IMapRasterLayer vRasterLayer = default(IMapRasterLayer);
IMapRasterLayer clim5RasterLayer = default(IMapRasterLayer);
IMapRasterLayer clim10RasterLayer = default(IMapRasterLayer);
IMapRasterLayer clim15RasterLayer = default(IMapRasterLayer);
if (map1.GetRasterLayers().Count() == 1)
{
MessageBox.Show("Please add a raster layer");
return;
}
//this makes raster layers list in map1 ordered!
uRasterLayer = map1.GetRasterLayers()[0];
vRasterLayer = map1.GetRasterLayers()[1];
clim5RasterLayer = map1.GetRasterLayers()[2];
clim10RasterLayer = map1.GetRasterLayers()[3];
clim15RasterLayer = map1.GetRasterLayers()[4];
//get the powerline line layer
IMapLineLayer pwlLayer = default(IMapLineLayer);
if (map1.GetLineLayers().Count() == 0)
{
MessageBox.Show("Please add powerline shapefile");
return;
}
pwlLayer = map1.GetLineLayers()[0];
//copy line layer FeatureSet
IFeatureSet pwlineSet = pwlLayer.DataSet;
//get the powerstations layer
IMapPointLayer pwstLayer = default(IMapPointLayer);
pwstLayer = map1.GetPointLayers()[0];
// copy point layer FeatureSet
IFeatureSet pwpointsSet = pwstLayer.DataSet;
//Start to cast raster to PRM classes
// prognostic wind massives first
List<List<WindStressPRM.PrognosticCell>> prognosticWind = new List<List<WindStressPRM.PrognosticCell>>();
int rcountPrognostic = uRasterLayer.DataSet.NumRows;
int ccountPrognostic = uRasterLayer.DataSet.NumColumns;
for (int i =0; i< rcountPrognostic; i++)
{
List<WindStressPRM.PrognosticCell> progWindRow = new List<WindStressPRM.PrognosticCell>();
for (int j =0; j< ccountPrognostic; j++ )
{
MessageBox.Show("Please add powerline shapefile");
return;
Coordinate dummyRCoords = uRasterLayer.Bounds.CellCenter_ToProj(i,j);
WindStressPRM.Coordinate cellCoords =new WindStressPRM.Coordinate(dummyRCoords.X,dummyRCoords.Y);
double uValue = uRasterLayer.DataSet.Value[i, j];
double vValue = vRasterLayer.DataSet.Value[i, j];
if (Math.Abs(uValue - RasterMissingValue) < eps) {
uValue = Double.NaN;
}
if (Math.Abs(vValue - RasterMissingValue) < eps) {
vValue = Double.NaN;
}
WindStressPRM.PrognosticCell dummyPrognosticCell = new WindStressPRM.PrognosticCell(cellCoords, uValue, vValue);
progWindRow.Add(dummyPrognosticCell);
}
pwlLayer = map1.GetLineLayers()[0];
//copy line layer FeatureSet
IFeatureSet pwlineSet = pwlLayer.DataSet;
//get the powerstations layer
IMapPointLayer pwstLayer = default(IMapPointLayer);
pwstLayer = map1.GetPointLayers()[0];
// copy point layer FeatureSet
IFeatureSet pwpointsSet = pwstLayer.DataSet;
//Start to cast raster to PRM classes
// prognostic wind massives first
List<List<WindStressPRM.PrognosticCell>> prognosticWind = new List<List<WindStressPRM.PrognosticCell>>();
int rcountPrognostic = uRasterLayer.DataSet.NumRows;
int ccountPrognostic = uRasterLayer.DataSet.NumColumns;
for (int i =0; i< rcountPrognostic; i++)
prognosticWind.Add(progWindRow);
//prog_wind_row.Clear();
}
//Get cell info and Affine transform coefficients from prognostic wind rasters
WindStressPRM.CellSize progcellsize = new WindStressPRM.CellSize(uRasterLayer.DataSet.CellWidth, uRasterLayer.DataSet.CellHeight);
double[] prog_aff = uRasterLayer.Bounds.AffineCoefficients;
//Now we create climate raster class
List<List<WindStressPRM.ClimateCell>> climWind = new List<List<WindStressPRM.ClimateCell>>();
int rowCountClim = clim5RasterLayer.DataSet.NumRows;
int columnCountClim = clim5RasterLayer.DataSet.NumColumns;
for (int i = 0; i < rowCountClim; i++)
{
List<WindStressPRM.ClimateCell> climWindRow = new List<WindStressPRM.ClimateCell>();
for (int j = 0; j < columnCountClim; j++)
{
List<WindStressPRM.PrognosticCell> progWindRow = new List<WindStressPRM.PrognosticCell>();
for (int j =0; j< ccountPrognostic; j++ )
Coordinate dummyCellCoords = clim15RasterLayer.Bounds.CellCenter_ToProj(i,j);
WindStressPRM.Coordinate dummyClimCoords = new WindStressPRM.Coordinate(dummyCellCoords.X,dummyCellCoords.Y);
//add or substruct in range 0 - 27 to change what lines will be broken
double clim5 = j; // clim5RasterLayer.DataSet.Value[i, j];
double clim10 = clim10RasterLayer.DataSet.Value[i, j] - 10;
double clim15 = clim15RasterLayer.DataSet.Value[i, j];
if (Math.Abs(clim5 - RasterMissingValue) < eps)
{
Coordinate dummyRCoords = uRasterLayer.Bounds.CellCenter_ToProj(i,j);
WindStressPRM.Coordinate cellCoords =new WindStressPRM.Coordinate(dummyRCoords.X,dummyRCoords.Y);
WindStressPRM.PrognosticCell dummyPrognosticCell = new WindStressPRM.PrognosticCell(cellCoords, uRasterLayer.DataSet.Value[j, i], vRasterLayer.DataSet.Value[j, i]);
//WindStressPRM.PrognosticCell dummyPrognosticCell = new WindStressPRM.PrognosticCell(cellCoords, 100, 100);
progWindRow.Add(dummyPrognosticCell);
clim5 = Double.NaN;
}
prognosticWind.Add(progWindRow);
//prog_wind_row.Clear();
}
//Get cell info and Affine transform coefficients from prognostic wind rasters
WindStressPRM.CellSize progcellsize = new WindStressPRM.CellSize(uRasterLayer.DataSet.CellWidth, uRasterLayer.DataSet.CellHeight);
double[] prog_aff = uRasterLayer.Bounds.AffineCoefficients;
//Now we create climate raster class
List<List<WindStressPRM.ClimateCell>> climWind = new List<List<WindStressPRM.ClimateCell>>();
int rowCountClim = clim5RasterLayer.DataSet.NumRows;
int columnCountClim = clim5RasterLayer.DataSet.NumColumns;
for (int i = 0; i < rowCountClim; i++)
{
List<WindStressPRM.ClimateCell> climWindRow = new List<WindStressPRM.ClimateCell>();
for (int j = 0; j < columnCountClim; j++)
if (Math.Abs(clim10 - RasterMissingValue) < eps)
{
Coordinate dummyCellCoords = clim15RasterLayer.Bounds.CellCenter_ToProj(i,j);
WindStressPRM.Coordinate dummyClimCoords = new WindStressPRM.Coordinate(dummyCellCoords.X,dummyCellCoords.Y);
//add or substruct in range 0 - 27 to change what lines will be broken
WindStressPRM.ClimateCell dummyClim = new WindStressPRM.ClimateCell(dummyClimCoords, clim5RasterLayer.DataSet.Value[j, i], clim10RasterLayer.DataSet.Value[j, i] - 10, clim15RasterLayer.DataSet.Value[j, i]);
//WindStressPRM.ClimateCell dummyClim = new WindStressPRM.ClimateCell(dummyClimCoords, 0, 0, 0);
climWindRow.Add(dummyClim);
clim10 = Double.NaN;
}
if (Math.Abs(clim15 - RasterMissingValue) < eps)
{
clim15 = Double.NaN;
}
climWind.Add(climWindRow);
//clim_wind_row.Clear();
WindStressPRM.ClimateCell dummyClim = new WindStressPRM.ClimateCell(dummyClimCoords, clim5, clim10, clim15);
climWindRow.Add(dummyClim);
}
//Get cell info and affine transform coeff from climate rasters
WindStressPRM.CellSize climCellsize = new WindStressPRM.CellSize(clim5RasterLayer.DataSet.CellWidth, clim5RasterLayer.DataSet.CellHeight);
double[] climAffinecoeffs = clim5RasterLayer.Bounds.AffineCoefficients;
// create PRM_line list to pass to PRM_wind from loaded line layer
List<WindStressPRM.Powerline> powerlinesToPRM = new List<WindStressPRM.Powerline>();
foreach (IFeature feature in pwlineSet.Features)
climWind.Add(climWindRow);
//clim_wind_row.Clear();
}
//Get cell info and affine transform coeff from climate rasters
WindStressPRM.CellSize climCellsize = new WindStressPRM.CellSize(clim5RasterLayer.DataSet.CellWidth, clim5RasterLayer.DataSet.CellHeight);
double[] climAffinecoeffs = clim5RasterLayer.Bounds.AffineCoefficients;
// create PRM_line list to pass to PRM_wind from loaded line layer
List<WindStressPRM.Powerline> powerlinesToPRM = new List<WindStressPRM.Powerline>();
foreach (IFeature feature in pwlineSet.Features)
{
WindStressPRM.Powerline dummyline = new WindStressPRM.Powerline();
DataRow featureData = feature.DataRow;
dummyline.Identifier = feature.Fid;
dummyline.Year = int.Parse(featureData["Year"].ToString());
dummyline.Height = double.Parse(featureData["HeightOffs"].ToString());
dummyline.Power = int.Parse(featureData["Power"].ToString());
dummyline.PointFromID = int.Parse(featureData["PointFrom"].ToString());
dummyline.PointToID = int.Parse(featureData["PointTo"].ToString());
LineString featureline = feature.BasicGeometry as LineString;
dummyline.Coordinates = DotspLinestringToPrm(featureline);
powerlinesToPRM.Add(dummyline);
}
//create PRM_station list to pass to PRM_wind from loaded point layer
List<WindStressPRM.PowerStation> powerpointsToPRM = new List<WindStressPRM.PowerStation>();
foreach (IFeature featurepoint in pwpointsSet.Features)
{
WindStressPRM.PowerStation dummystation = new WindStressPRM.PowerStation();
DataRow featureData = featurepoint.DataRow;
dummystation.Identifier = featurepoint.Fid;
dummystation.Name = featureData["Name"].ToString();
dummystation.Power = int.Parse(featureData["Power"].ToString());
int issr = int.Parse(featureData["IsSource"].ToString());
if (issr == 0)
{
WindStressPRM.Powerline dummyline = new WindStressPRM.Powerline();
DataRow featureData = feature.DataRow;
dummyline.Identifier = feature.Fid;
dummyline.Year = int.Parse(featureData["Year"].ToString());
dummyline.Height = double.Parse(featureData["HeightOffs"].ToString());
dummyline.Power = int.Parse(featureData["Power"].ToString());
dummyline.PointFromID = int.Parse(featureData["PointFrom"].ToString());
dummyline.PointToID = int.Parse(featureData["PointTo"].ToString());
LineString featureline = feature.BasicGeometry as LineString;
dummyline.Coordinates = DotspLinestringToPrm(featureline);
powerlinesToPRM.Add(dummyline);
dummystation.IsSource = false;
}
//create PRM_station list to pass to PRM_wind from loaded point layer
List<WindStressPRM.PowerStation> powerpointsToPRM = new List<WindStressPRM.PowerStation>();
foreach (IFeature featurepoint in pwpointsSet.Features)
else
{
WindStressPRM.PowerStation dummystation = new WindStressPRM.PowerStation();
DataRow featureData = featurepoint.DataRow;
dummystation.Identifier = featurepoint.Fid;
dummystation.Name = featureData["Name"].ToString();
dummystation.Power = int.Parse(featureData["Power"].ToString());
int issr = int.Parse(featureData["IsSource"].ToString());
if (issr == 0)
if (issr == 1)
{
dummystation.IsSource = false;
dummystation.IsSource = true;
}
else
{
if (issr == 1)
{
dummystation.IsSource = true;
}
else
{
MessageBox.Show("Some entities in Column IsSource of powerstation datatable are not strict ones or zeros");
}
MessageBox.Show("Some entities in Column IsSource of powerstation datatable are not strict ones or zeros");
}
//casting stationtype
if (featureData["Type"].ToString().Trim().ToUpper() == "POLE")
{
dummystation.Stationtype = WindStressPRM.PowerStation.StationType.Pole;
}
else if (featureData["Type"].ToString().Trim().ToUpper() == "TRANS")
{
dummystation.Stationtype = WindStressPRM.PowerStation.StationType.Trans;
}
else if (featureData["Type"].ToString().Trim().ToUpper() == "ENDSTAT")
{
dummystation.Stationtype = WindStressPRM.PowerStation.StationType.Endstat;
}
else
{
throw new System.Exception("Point in powerstation layer has unrecognised type");
}
IPoint featurepointcoords = featurepoint.BasicGeometry as IPoint;
dummystation.Coordinate = DotspPointToPRM(featurepointcoords);
powerpointsToPRM.Add(dummystation);
//casting stationtype
if (featureData["Type"].ToString().Trim().ToUpper() == "POLE")
{
dummystation.Stationtype = WindStressPRM.PowerStation.StationType.Pole;
}
else if (featureData["Type"].ToString().Trim().ToUpper() == "TRANS")
{
dummystation.Stationtype = WindStressPRM.PowerStation.StationType.Trans;
}
else if (featureData["Type"].ToString().Trim().ToUpper() == "ENDSTAT")
{
dummystation.Stationtype = WindStressPRM.PowerStation.StationType.Endstat;
}
else
{
throw new System.Exception("Point in powerstation layer has unrecognised type");
}
IPoint featurepointcoords = featurepoint.BasicGeometry as IPoint;
dummystation.Coordinate = DotspPointToPRM(featurepointcoords);
powerpointsToPRM.Add(dummystation);
}
//Create a PRM_wind class and add all the properties from above
WindStressPRM.StressPowerChecker prmwind = new WindStressPRM.StressPowerChecker();
WindStressPRM.Input input = new WindStressPRM.Input();
input.PowerLines = powerlinesToPRM;
input.PowerStations = powerpointsToPRM;
input.PrognosticCells = prognosticWind;
input.PrognosticCellSize = progcellsize;
input.PrognosticAffineCoefficients = prog_aff;
input.ClimateCells = climWind;
input.ClimateCellSize = climCellsize;
input.ClimateAffineCoefficients = climAffinecoeffs;
WindStressPRM.Output output = prmwind.CheckPower(input);
// new FeatureSet for resulting disabled points
IFeatureSet disabledPointSet = new FeatureSet(FeatureType.Point);
}
//Create a PRM_wind class and add all the properties from above
WindStressPRM.StressPowerChecker prmwind = new WindStressPRM.StressPowerChecker();
WindStressPRM.Input input = new WindStressPRM.Input();
input.PowerLines = powerlinesToPRM;
input.PowerStations = powerpointsToPRM;
input.PrognosticCells = prognosticWind;
input.PrognosticCellSize = progcellsize;
input.PrognosticAffineCoefficients = prog_aff;
input.ClimateCells = climWind;
input.ClimateCellSize = climCellsize;
input.ClimateAffineCoefficients = climAffinecoeffs;
WindStressPRM.Output output = prmwind.CheckPower(input);
// new FeatureSet for resulting disabled points
IFeatureSet disabledPointSet = new FeatureSet(FeatureType.Point);
disabledPointSet.Projection = map1.Projection;
DataColumn pointcolumn = new DataColumn("ID");
disabledPointSet.DataTable.Columns.Add(pointcolumn);
......@@ -268,7 +289,7 @@ namespace MES_Wind
resultPointLayer.Symbolizer = symbol;
resultPointLayer.LegendText = "Disabled TransStations";
//New FeatureSet for disabled powerlines
IFeatureSet disabledLineSet = new FeatureSet(FeatureType.Line);
disabledLineSet.Projection = map1.Projection;
......
......@@ -13,12 +13,12 @@ namespace WindStressPRM
/// Outer index
/// Внешний индекс
/// </summary>
public int Row;
public int Row { get; set; }
/// <summary>
/// Inner index
/// Внутренний индекс
/// </summary>
public int Col;
public int Col { get; set; }
/// <summary>
/// designated constructor
/// </summary>
......@@ -27,7 +27,7 @@ namespace WindStressPRM
public Index(int Row, int Col)
{
if (Row <= -1 || Col <= -1) {
throw new Exception("Index must be initialized with nonegative integer value");
throw new System.ArgumentOutOfRangeException("Index must be initialized with nonegative integer value");
}
this.Row = Row;
this.Col = Col;
......@@ -42,12 +42,12 @@ namespace WindStressPRM
/// easting coordinate
/// Координата по широте
/// </summary>
public double X;
public double X { get; private set;}
/// <summary>
/// northing coordinate
/// Координата по долготе
/// </summary>
public double Y;
public double Y { get; private set; }
/// <summary>
/// designated constructor
/// Основной конструктор
......@@ -56,15 +56,12 @@ namespace WindStressPRM
/// <param name="Y"></param>
public Coordinate(double X, double Y)
{
this.X = X;
this.Y = Y;
if (!(this.CheckValue()))
{
throw new System.ArgumentException("Passed coordinates are not valid!");
}
else
{
this.X = X;
this.Y = Y;
}
}
/// <summary>
/// Проверка на валидность значений
......@@ -72,15 +69,7 @@ namespace WindStressPRM
/// <returns></returns>
public bool CheckValue()
{
bool checker = true;
if (X != null && Y != null)
{
checker = true;
}
else {
checker = false;
}
return checker;
return !Double.IsNaN(X) && !Double.IsInfinity(X) && !Double.IsNaN(Y) && !Double.IsInfinity(Y);
}
}
/// <summary>
......@@ -93,17 +82,17 @@ namespace WindStressPRM
/// U - component of wind velocity, m/s
/// U - компонента скорости ветра, м/с
/// </summary>
public double VelocityX;
public double VelocityX { get; private set; }
/// <summary>
/// V - component of wind velocity, m/s
/// V - компонента скорости ветра, м/с
/// </summary>
public double VelocityY;
public double VelocityY { get; private set; }
/// <summary>
/// Cell center coordinates
/// Координаты центра ячейки
/// </summary>
public Coordinate Coordinate;
public Coordinate Coordinate { get; private set; }
/// <summary>
/// designated constructor
/// </summary>
......@@ -112,16 +101,13 @@ namespace WindStressPRM
/// <param name="vY"> V component</param>
public PrognosticCell(Coordinate coord, double vX, double vY)
{
this.Coordinate = coord;
this.VelocityX = vX;
this.VelocityY = vY;
if (!(this.CheckValue()))
{
throw new System.ArgumentException("Prognostic wind velocities are incorrect");
}
else
{
this.Coordinate = coord;
this.VelocityX = vX;
this.VelocityY = vY;
}
}
/// <summary>
/// Проверка полей на валидность
......@@ -129,16 +115,17 @@ namespace WindStressPRM
/// <returns></returns>
public bool CheckValue()
{
bool checker = false;
///Скорость ветра на высоте 10м от поверхности на Земле не может превышать 70м/c
if (Math.Abs(VelocityX) < 70 && Math.Abs(VelocityY) < 70)
{
checker = true;
bool res1 = Double.IsNaN(VelocityX);
bool res2 = Double.IsNaN(VelocityY);
if (res1 != res2) {
return false;
}
else {
checker = false;
// пустые данные
if (res1) {
return true;
}
return checker;
///Скорость ветра на высоте 10м от поверхности на Земле не может превышать 70м/c
return Math.Abs(Math.Pow(VelocityX, 2) + Math.Pow(VelocityY, 2)) <= 4900;
}
}
/// <summary>
......@@ -156,17 +143,17 @@ namespace WindStressPRM
/// once-in-10-years frequency wind, m/s
/// скорость ветра повторяемости один раз в 10 лет, м/с
/// </summary>
public double Wind10;
public double Wind10 { get; private set; }
/// <summary>
/// once-in-15-years frequency wind, m/s
/// скорость ветра повторяемости один раз в 15 лет, м/с
/// </summary>
public double Wind15;
public double Wind15 { get; private set; }
/// <summary>
/// Cell center coordinate pair
/// Координаты центра ячейки
/// </summary>
public Coordinate Coordinate;
public Coordinate Coordinate { get; private set; }
/// <summary>
/// designated constructor
/// </summary>
......@@ -176,17 +163,14 @@ namespace WindStressPRM
/// <param name="w15"></param>
public ClimateCell(Coordinate coord, double w5, double w10, double w15)
{
this.Coordinate = coord;
this.Wind5 = w5;
this.Wind10 = w10;
this.Wind15 = w15;
if (!(this.CheckValue()))
{
throw new System.ArgumentException("Climate wind value is not correct");
}
else
{
this.Coordinate = coord;
this.Wind5 = w5;
this.Wind10 = w10;
this.Wind15 = w15;
}
}
/// <summary>
/// Провекра валидности полей класса
......@@ -194,31 +178,33 @@ namespace WindStressPRM
/// <returns></returns>
public bool CheckValue()
{
bool checker = true;
if (Math.Abs(Wind5) < 70 && Math.Abs(Wind10) < 70 && Math.Abs(Wind15) < 70)
{
checker = true;
bool c5 = Double.IsNaN(Wind5);
bool c10 = Double.IsNaN(Wind10);
bool c15 = Double.IsNaN(Wind15);
if (c5 != c10 || c5 != c15 || c5 != c10) {
return false;
}
else {
checker = false;
if (c5) {
return true;
}
return checker;
// ветер по модулю не должен превышать 70м/с
return Math.Abs(Wind5) < 70 && Math.Abs(Wind10) < 70 && Math.Abs(Wind15) < 70;
}
}
/// <summary>
/// Cell Size parameters
/// Параметры ячейки (регулярной сетки)
/// </summary>
public struct CellSize
public class CellSize
{
/// <summary>
/// ширина ячейки (расстояние между соседними по широте центрами ячеек)
/// </summary>
public double Width;
public double Width { get; set; }
/// <summary>
/// высота ячейки (расстояние между соседними по долготе центрами ячеек)
/// </summary>
public double Height;
public double Height { get; set; }
/// <summary>
/// designated constructor
/// </summary>
......@@ -239,13 +225,7 @@ namespace WindStressPRM
/// <returns></returns>
public bool CheckValue()
{
bool checker = true;
if (Width > 0 && Height > 0)
{
checker = true;
}
else { checker = false; }
return checker;
return Width > 0 && Height > 0;
}
}
/// <summary>
......@@ -263,17 +243,17 @@ namespace WindStressPRM
/// year of construction
/// год постройки ЛЭП
/// </summary>
public int Year;
public int Year { get; set; }
/// <summary>
/// average height of cable span between two poles, meters
/// средняя высота пролета, м
/// </summary>
public double Height;
public double Height { get; set; }
/// <summary>
/// power kW for switches
/// Мощность ЛЭП, кВт
/// power kV for switches
/// Напряжение ЛЭП, кВ
/// </summary>
public int Power;
public int Power { get; set; }
/// <summary>
/// Line vertices coordinate list
/// список координат вершин ЛЭП как линейного объекта
......@@ -283,23 +263,23 @@ namespace WindStressPRM
/// assigned powerstation/pole
/// идентификатор соответсвующего конца/начала линии (столб, трансформаторная подстанция, понижающая подстанция)
/// </summary>
public int PointFromID;
public int PointFromID { get; set; }
/// <summary>
/// assigned powerstation/pole
/// идентификатор соответсвующего конца/начала линии (столб, трансформаторная подстанция, понижающая подстанция)
/// </summary>
public int PointToID;
public int PointToID { get; set; }
/// <summary>
/// broken/not broken switch
/// сломана (true) или нет (false) линяя
/// </summary>
public bool IsBroken;
public bool IsBroken { get; set; }
/// <summary>
/// power on switch
/// получает (true) или нет (false) линия питание
/// </summary>
public bool IsON;
private int MissingIdValue = -1;
public bool IsON { get; set; }
public Powerline()
{
//default constructor body
......@@ -338,12 +318,10 @@ namespace WindStressPRM
/// <returns></returns>
public bool CheckValue()
{
bool checker = true;
if ( Identifier >= 0 && Math.Abs(Year - 1985) < 45 && Math.Abs(Height - 15)<15 && Power > 0 && Power < 1000 && PointFromID >=0 && PointToID >=0)
{
checker = true;
}
else { checker = false; }
bool checker =
Identifier >= 0 && Math.Abs(Year - 1985) < 45 &&
Math.Abs(Height - 15) < 15 && Power > 0 && Power < 1000 &&
PointFromID >= 0 && PointToID >= 0;
return checker;
}
}
......@@ -357,21 +335,21 @@ namespace WindStressPRM
/// unique id
/// уникальный идентификатор подстанции/столба
/// </summary>
public int Identifier;
public int Identifier { get; set; }
/// <summary>
/// Coordinates
/// </summary>
public Coordinate Coordinate;
public Coordinate Coordinate { get; set; }
/// <summary>
/// station name field
/// название подстанции
/// </summary>
public string Name;
public string Name { get; set; }
/// <summary>
/// power, kW
/// мощность, кВт
/// </summary>
public int Power;
public int Power { get; set; }
/// <summary>
/// type of point - trans/pole/endpoint
/// тип станции - трансформаторная подстанция/столб/понижающая(конечная)подстанция
......@@ -383,22 +361,22 @@ namespace WindStressPRM
/// <summary>
/// тип подстанции
/// </summary>
public StationType Stationtype;
public StationType Stationtype { get; set; }
/// <summary>
/// is point a source?
/// является ли подстаниция источником питания (в случае ТЭЦ или питания от внешних для рассматриваемой цепи ЛЭП)
/// </summary>
public bool IsSource;
public bool IsSource { get; set; }
/// <summary>
/// power on switch
/// поступает (true) или нет (false) на подстанцию питание
/// </summary>
public bool IsON;
public bool IsON { get; set; }
/// <summary>
/// asigned powerlines list
/// список оканчивающихся/начинающихся на подстанции ЛЭП
/// </summary>
public List<Powerline> LineList;
public List<Powerline> LineList { get; set; }
public PowerStation()
{
//default constructor
......@@ -425,14 +403,8 @@ namespace WindStressPRM
}
public bool CheckValue()
{
bool checker = true;
if (Identifier >=0 && Power >0 && Power < 1000 )
{
checker = true;
}
else { checker = false; }
bool checker = Identifier >=0 && Power >0 && Power < 1000;
return checker;
}
}
......@@ -502,18 +474,6 @@ namespace WindStressPRM
return 500;
}
}
/// <summary>
/// missing raster value for cells, if you haven't normal value use this one.
/// потерянное значение для растрового объекта; Если Вы не имеете данных - используйте это значение
/// </summary>
public double kMissingRasterValue
{
get
{
return -9999;
}
}
}
/// <summary>
/// Output
......@@ -724,29 +684,19 @@ namespace WindStressPRM
Coordinate subCoord2 = new Coordinate(coord1.X + constXdiff, coord1.Y + constXdiff);
for (int j = 0; j < distpropI; j++)
{
if (j == 0)
{
midpoint.X = (subCoord1.X + subCoord2.X) / 2;
midpoint.Y = (subCoord1.Y + subCoord2.Y) / 2;
pointlist.Add(midpoint);
}
else
if (j > 0)
{
// move to next center
subCoord1.X = subCoord2.X;
subCoord1.Y = subCoord2.Y;
subCoord2.X = subCoord1.X + constXdiff;
subCoord2.Y = subCoord1.Y + constYdiff;
midpoint.X = (subCoord1.X + subCoord2.X) / 2;
midpoint.Y = (subCoord1.Y + subCoord2.Y) / 2;
pointlist.Add(midpoint);
// move to next center, at the next interval
subCoord1 = new Coordinate(subCoord2.X, subCoord2.Y);
subCoord2 = new Coordinate(subCoord1.X + constXdiff, subCoord1.Y + constYdiff);
}
midpoint = new Coordinate((subCoord1.X + subCoord2.X) / 2, (subCoord1.Y + subCoord2.Y) / 2);
pointlist.Add(midpoint);
}
}
else
{
midpoint.X = (coord1.X + coord2.X) / 2;
midpoint.Y = (coord1.Y + coord2.Y) / 2;
midpoint = new Coordinate( (coord1.X + coord2.X) / 2, (coord1.Y + coord2.Y) / 2);
pointlist.Add(midpoint);
}
FunctionType climateType;
......@@ -992,10 +942,11 @@ namespace WindStressPRM
double valTopLeft = valueForFunction(functionType, rcTopLeft);
double valTopRight = valueForFunction(functionType, rcTopRight);
Coordinate origin = cellToProjection(rcBotLeft, functionType);
bool testBotLeft = valBotLeft == Input.kMissingRasterValue;
bool testBotRight = valBotRight == Input.kMissingRasterValue;
bool testTopLeft = valTopLeft == Input.kMissingRasterValue;
bool testTopRight = valTopRight == Input.kMissingRasterValue;
bool testBotLeft = Double.IsNaN(valBotLeft);
bool testBotRight = Double.IsNaN(valBotRight);
bool testTopLeft = Double.IsNaN(valTopLeft);
bool testTopRight = Double.IsNaN(valTopRight);
if (testBotLeft || testBotRight || testTopLeft || testTopRight)
{
// tests indicates that value at test-cell is missed.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment