Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
MES_Wind
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Debolskiy Andrey
MES_Wind
Commits
5fd1ba2a
Commit
5fd1ba2a
authored
8 years ago
by
Антон Кудряшов
Browse files
Options
Downloads
Patches
Plain Diff
- fixed spacing in main
- fixed checkers for PRM classes - getters, setters minor changes
parent
4bd177f8
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
MES_Wind/frmMain.cs
+159
-138
159 additions, 138 deletions
MES_Wind/frmMain.cs
WindStressPRM/WindStressPRM.cs
+78
-127
78 additions, 127 deletions
WindStressPRM/WindStressPRM.cs
with
237 additions
and
265 deletions
MES_Wind/frmMain.cs
+
159
−
138
View file @
5fd1ba2a
...
...
@@ -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
);
}
p
wlLayer
=
map1
.
GetLineLayers
()[
0
]
;
//
copy line layer FeatureSet
IFeatureSet
pwlineSet
=
pwlLayer
.
DataSet
;
//
g
et
the powerstations lay
er
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
<
r
co
untPrognostic
;
i
++)
p
rognosticWind
.
Add
(
progWindRow
)
;
//
prog_wind_row.Clear();
}
//
G
et
cell info and Affine transform coefficients from prognostic wind rast
er
s
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
<
co
lumnCountClim
;
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
_w
ind
_r
ow.
Clear(
);
WindStressPRM
.
ClimateCell
dummyClim
=
new
WindStressPRM
.
ClimateCell
(
dummyClimCoords
,
clim5
,
clim10
,
clim15
);
clim
W
ind
R
ow
.
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
=
fals
e
;
dummystation
.
IsSource
=
tru
e
;
}
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
;
...
...
This diff is collapsed.
Click to expand it.
WindStressPRM/WindStressPRM.cs
+
78
−
127
View file @
5fd1ba2a
...
...
@@ -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
.
ArgumentOutOfRange
Exception
(
"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
=
fals
e
;
if
(
c5
)
{
return
tru
e
;
}
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 k
W
for switches
///
Мощность
ЛЭП, кВ
т
/// power k
V
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.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment