VLab Issue #10353 - SVG solution to DCS_10257. Severe PIREP should be separate color; fixes #10353

Change-Id: I1ad8b823cf67a4a1217ef5eb5ec60085f857c471

VLab Issue #10353 - SVG solution to DCS_10257. Severe PIREP and AIREP should be separate color; fixes #10353

Change-Id: Iddb7c0e9e22b4a9793fd5d44a5a201f73d0c072f

Former-commit-id: 6f7c50bb773c8b5e99c2b08ed5f8dd70866ebb5f
This commit is contained in:
Andrew Moore 2015-09-15 13:38:48 +00:00
parent e3f4d27d0e
commit 225c0bdd58
13 changed files with 876 additions and 6 deletions

View file

@ -23,6 +23,7 @@
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<!-- Not High severity -->
<resource>
<loadProperties>
<capabilities>
@ -69,6 +70,53 @@
</resource>
</resourceData>
</resource>
<!-- High severity -->
<resource>
<loadProperties>
<capabilities>
</capabilities>
</loadProperties>
<resourceData xsi:type="plotBlendedResourceData">
<resource>
<loadProperties loadWithoutData="true"/>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="plotResourceData" plotSource="${legend} Sev"
plotModelFile="${svg2}"
retrieveData="false" isUpdatingOnMetadataOnly="false">
<binOffset posOffset="1800" negOffset="1800" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="pirep" constraintType="EQUALS" />
</mapping>
<mapping key="location.flightLevel">
<constraint constraintValue="${between}" constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true"/>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="plotResourceData" plotSource="${legend} Sev"
plotModelFile="${svg3}"
retrieveData="false" isUpdatingOnMetadataOnly="false">
<binOffset posOffset="1800" negOffset="1800" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="airep" constraintType="EQUALS" />
</mapping>
<mapping key="location.flightLevel">
<constraint constraintValue="${between}" constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>

View file

@ -24,6 +24,8 @@
<substitute key="svg0" value="pirepPlotDesign.svg"/>
<substitute key="svg1" value="pirepPlotDesign.svg"/>
<substitute key="legend" value="PIREP Plot 000-180 hft"/>
<substitute key="svg2" value="pirepPlotDesignSev.svg"/>
<substitute key="svg3" value="pirepPlotDesignSev.svg"/>
<substitute key="between" value="0--18000"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/PirepPlot.xml"
@ -31,6 +33,8 @@
<substitute key="svg0" value="pirepPlotDesign.svg"/>
<substitute key="svg1" value="pirepPlotDesign.svg"/>
<substitute key="legend" value="PIREP Plot 180-260 hft"/>
<substitute key="svg2" value="pirepPlotDesignSev.svg"/>
<substitute key="svg3" value="pirepPlotDesignSev.svg"/>
<substitute key="between" value="18000--26000"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/PirepPlot.xml"
@ -38,6 +42,8 @@
<substitute key="svg0" value="pirepPlotDesign.svg"/>
<substitute key="svg1" value="pirepPlotDesign.svg"/>
<substitute key="legend" value="PIREP Plot 260-500 hft"/>
<substitute key="svg2" value="pirepPlotDesignSev.svg"/>
<substitute key="svg3" value="pirepPlotDesignSev.svg"/>
<substitute key="between" value="26000--50000"/>
</contribute>
<contribute xsi:type="titleItem"
@ -47,6 +53,8 @@
<substitute key="svg0" value="pirepIcingDesign.svg"/>
<substitute key="svg1" value="airepIcingDesign.svg"/>
<substitute key="legend" value="PIREP Icing 000-180 hft"/>
<substitute key="svg2" value="pirepIcingDesignSev.svg"/>
<substitute key="svg3" value="airepIcingDesignSev.svg"/>
<substitute key="between" value="0--18000"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/PirepPlot.xml"
@ -54,6 +62,8 @@
<substitute key="svg0" value="pirepIcingDesign.svg"/>
<substitute key="svg1" value="airepIcingDesign.svg"/>
<substitute key="legend" value="PIREP Icing 180-260 hft"/>
<substitute key="svg2" value="pirepIcingDesignSev.svg"/>
<substitute key="svg3" value="airepIcingDesignSev.svg"/>
<substitute key="between" value="18000--26000"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/PirepPlot.xml"
@ -61,6 +71,8 @@
<substitute key="svg0" value="pirepIcingDesign.svg"/>
<substitute key="svg1" value="airepIcingDesign.svg"/>
<substitute key="legend" value="PIREP Icing 260-500 hft"/>
<substitute key="svg2" value="pirepIcingDesignSev.svg"/>
<substitute key="svg3" value="airepIcingDesignSev.svg"/>
<substitute key="between" value="26000--50000"/>
</contribute>
<contribute xsi:type="titleItem"
@ -70,6 +82,8 @@
<substitute key="svg0" value="pirepTurbDesign.svg"/>
<substitute key="svg1" value="airepTurbDesign.svg"/>
<substitute key="legend" value="PIREP Turb 000-180 hft"/>
<substitute key="svg2" value="pirepTurbDesignSev.svg"/>
<substitute key="svg3" value="airepTurbDesignSev.svg"/>
<substitute key="between" value="0--18000"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/PirepPlot.xml"
@ -77,6 +91,8 @@
<substitute key="svg0" value="pirepTurbDesign.svg"/>
<substitute key="svg1" value="airepTurbDesign.svg"/>
<substitute key="legend" value="PIREP Turb 180-260 hft"/>
<substitute key="svg2" value="pirepTurbDesignSev.svg"/>
<substitute key="svg3" value="airepTurbDesignSev.svg"/>
<substitute key="between" value="18000--26000"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/PirepPlot.xml"
@ -84,6 +100,8 @@
<substitute key="svg0" value="pirepTurbDesign.svg"/>
<substitute key="svg1" value="airepTurbDesign.svg"/>
<substitute key="legend" value="PIREP Turb 260-500 hft"/>
<substitute key="svg2" value="pirepTurbDesignSev.svg"/>
<substitute key="svg3" value="airepTurbDesignSev.svg"/>
<substitute key="between" value="26000--50000"/>
</contribute>
</menuTemplate>

View file

@ -56,6 +56,32 @@ class AirepPlotDelegate(PlotDelegate):
sampleString += turbType
return sampleString
def isValid(self, rec):
# DCS10257
# need icing or hazard
# only show non-severe / no severity
if rec.isValidParameter("iceInten"):
iceInten = rec.getString("iceInten")
else:
iceInten = ""
if rec.isValidParameter("iceType"):
iceType = rec.getString("iceType")
else:
iceType = ""
if rec.isValidParameter("flightHazard"):
flightHazard = rec.getInt("flightHazard")
else:
flightHazard = -1
if (iceInten == "") and (iceType == "") and (flightHazard == -1):
# no icing or hazard data
return False
elif (iceInten == "SEV") or (iceInten == "EXTRM") or (flightHazard == 8) or (flightHazard == 9):
# incorrect severity/hazard level (from AIREPWeather)
return False
else:
# low or no severity, and has some icing data
return True
plotDelegate = AirepPlotDelegate()
</script>
@ -83,6 +109,7 @@ plotDelegate = AirepPlotDelegate()
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleParams1" plotMode="sample" plotParam="stationId,longitude,latitude,timeObs,flightLevel"> </text>
<text id="sampleParams2" plotMode="sample" plotParam="temperature,windDir,windSpeed,turbInten,turbFreq,turbType"> </text>
<text id="validityParams" plotMode="null" class="text" plotParam="iceType,iceInten" x="0" y="0" visibility="hidden">0</text>
<text id="iceInensity" plotMode="table" class="weather" plotLookupTable="airep_icing_intens_trans.txt" plotParam="flightHazard" x="0" y="0">0</text>
<text id="fltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
</symbol>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,112 @@
<?xml version="1.0"?>
<svg width="80" height="80"
viewBox="0 0 80 80"
overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import time
class AirepPlotDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
sampleString = "ARP "
sampleString += rec.getString("stationId")
sampleString += " "
lat = rec.getFloat("latitude")
if(lat &lt; 0):
sampleString += "%.3fS " % (-1*lat)
else:
sampleString += "%.3fN " % (lat)
lon = rec.getFloat("longitude")
if(lon &lt; 0):
sampleString += "%.3fW " % (-1*lon)
else:
sampleString += "%.3fE " % (lon)
timeObs = rec.getLong("timeObs")
sampleString += time.strftime("%H%M",time.localtime(timeObs/1000))
sampleString += " F%d" % (rec.getInt("flightLevel")/100)
temp = rec.getFloat("temperature")
if temp &lt; -273.15:
pass
elif temp &lt; 0:
sampleString += " M%d" % (int(-1*temp))
else:
sampleString += " P%d" % (int(temp))
windDir = int(rec.getFloat("windDir"))
windSpeed = int(rec.getFloat("windSpeed"))
if windDir > -1080 or windSpeed > 0:
sampleString += " %d/%dKT" % (windDir, windSpeed)
turbFreq = rec.getString("turbFreq")
turbInten = rec.getString("turbInten")
turbType = rec.getString("turbType")
if turbFreq != "" or turbInten != "" or turbType != "":
sampleString += " TB"
if turbFreq != "":
sampleString += " "
sampleString += turbFreq
if turbInten != "":
sampleString += " "
sampleString += turbInten
if turbType != "":
sampleString += " "
sampleString += turbType
return sampleString
def isValid(self, rec):
# DCS10257
# need icing severity or ice hazard
# only show severe
if rec.isValidParameter("iceInten"):
iceInten = rec.getString("iceInten")
else:
iceInten = ""
if rec.isValidParameter("flightHazard"):
flightHazard = rec.getInt("flightHazard")
else:
flightHazard = -1
if (iceInten == "SEV") or (iceInten == "EXTRM") or (flightHazard == 8) or (flightHazard == 9):
# high severity/hazard level (from AIREPWeather)
return True
else:
# low or no severity, and has some icing data
return False
plotDelegate = AirepPlotDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";
src: url(WindSymbols.svg#WindSymbols); }
@font-face { font-family: "StandardFont";
src: url(Standard.svg#Standard); }
@font-face { font-family: "WxSymbolFont";
src: url(WxSymbols.svg#WxSymbols); }
@font-face { font-family: "SpecialSymbolFont";
src: url(SpecialSymbols.svg#SpecialSymbols); }
text.text
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: StandardFont;
font-size: 1em;
}
]]>
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleParams1" plotMode="sample" plotParam="stationId,longitude,latitude,timeObs,flightLevel"> </text>
<text id="sampleParams2" plotMode="sample" plotParam="temperature,windDir,windSpeed,turbInten,turbFreq,turbType"> </text>
<text id="validityParams" plotMode="null" class="text" plotParam="iceType,iceInten" x="0" y="0" visibility="hidden">0</text>
<text id="iceInensity" plotMode="table" class="weather" plotLookupTable="airep_icing_intens_trans.txt" plotParam="flightHazard" x="0" y="0">0</text>
<text id="fltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
</symbol>
</defs>
<use id="wind" x="40" y="40" width="80" height="80" visibility="visible" xlink:href="#plotData"/>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -56,6 +56,32 @@ class AirepPlotDelegate(PlotDelegate):
sampleString += turbType
return sampleString
def isValid(self, rec):
# DCS10257
# need some turbulence data
# only show non-severe / no severity
if rec.isValidParameter("turbInten"):
turbInten = rec.getString("turbInten")
else:
turbInten = ""
if rec.isValidParameter("turbFreq"):
turbFreq = rec.getString("turbFreq")
else:
turbFreq = ""
if rec.isValidParameter("turbType"):
turbType = rec.getString("turbType")
else:
turbType = ""
if (turbInten == "") and (turbFreq == "") and (turbType == ""):
# no turbulence data present
return False
elif (turbInten == "SEV") or (turbInten == "EXTRM"):
# turbulence data present, but not correct severity
return False
else:
# turbulence data present, and if severity is present it is not high
return True
plotDelegate = AirepPlotDelegate()
</script>
@ -91,6 +117,7 @@ plotDelegate = AirepPlotDelegate()
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleParams1" plotMode="sample" plotParam="stationId,longitude,latitude,timeObs,flightLevel"> </text>
<text id="sampleParams2" plotMode="sample" plotParam="temperature,windDir,windSpeed,turbInten,turbFreq,turbType"> </text>
<text id="validityParams" plotMode="null" class="text" plotParam="turbType" x="0" y="0" visibility="hidden">0</text>
<text id="airepturbIntensity" plotMode="table" class="weather" plotLookupTable="turb_intens_trans.txt" plotParam="turbInten" x="0" y="0">0</text>
<text id="airepturbFreq" plotMode="table" class="weather" plotLookupTable="turb_freq_trans.txt" plotParam="turbFreq" style="text-anchor: end" x="0" y="-10">0</text>
<text id="airepfltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -0,0 +1,116 @@
<?xml version="1.0"?>
<svg width="80" height="80"
viewBox="0 0 80 80"
overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import time
class AirepPlotDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
sampleString = "ARP "
sampleString += rec.getString("stationId")
sampleString += " "
lat = rec.getFloat("latitude")
if(lat &lt; 0):
sampleString += "%.3fS " % (-1*lat)
else:
sampleString += "%.3fN " % (lat)
lon = rec.getFloat("longitude")
if(lon &lt; 0):
sampleString += "%.3fW " % (-1*lon)
else:
sampleString += "%.3fE " % (lon)
timeObs = rec.getLong("timeObs")
sampleString += time.strftime("%H%M",time.localtime(timeObs/1000))
sampleString += " F%d" % (rec.getInt("flightLevel")/100)
temp = rec.getFloat("temperature")
if temp &lt; -273.15:
pass
elif temp &lt; 0:
sampleString += " M%d" % (int(-1*temp))
else:
sampleString += " P%d" % (int(temp))
windDir = int(rec.getFloat("windDir"))
windSpeed = int(rec.getFloat("windSpeed"))
if windDir > -1080 or windSpeed > 0:
sampleString += " %d/%dKT" % (windDir, windSpeed)
turbFreq = rec.getString("turbFreq")
turbInten = rec.getString("turbInten")
turbType = rec.getString("turbType")
if turbFreq != "" or turbInten != "" or turbType != "":
sampleString += " TB"
if turbFreq != "":
sampleString += " "
sampleString += turbFreq
if turbInten != "":
sampleString += " "
sampleString += turbInten
if turbType != "":
sampleString += " "
sampleString += turbType
return sampleString
def isValid(self, rec):
# DCS10257
# need some turbulence severity data
# only show non-severe / no severity
if rec.isValidParameter("turbInten"):
turbInten = rec.getString("turbInten")
else:
turbInten = ""
if (turbInten == "SEV") or (turbInten == "EXTRM"):
# turbulence data present, high severity
return True
else:
# turbulence data present, low severity
return False
plotDelegate = AirepPlotDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";
src: url(WindSymbols.svg#WindSymbols); }
@font-face { font-family: "StandardFont";
src: url(Standard.svg#Standard); }
@font-face { font-family: "WxSymbolFont";
src: url(WxSymbols.svg#WxSymbols); }
@font-face { font-family: "SpecialSymbolFont";
src: url(SpecialSymbols.svg#SpecialSymbols); }
text.text
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: StandardFont;
font-size: 1em;
}
text.weather
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: WxSymbolFont;
}
]]>
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleParams1" plotMode="sample" plotParam="stationId,longitude,latitude,timeObs,flightLevel"> </text>
<text id="sampleParams2" plotMode="sample" plotParam="temperature,windDir,windSpeed,turbInten,turbFreq,turbType"> </text>
<text id="airepturbIntensity" plotMode="table" class="weather" plotLookupTable="turb_intens_trans.txt" plotParam="turbInten" x="0" y="0">0</text>
<text id="airepturbFreq" plotMode="table" class="weather" plotLookupTable="turb_freq_trans.txt" plotParam="turbFreq" style="text-anchor: end" x="0" y="-10">0</text>
<text id="airepfltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
</symbol>
</defs>
<use id="wind" x="40" y="40" width="80" height="80" visibility="visible" xlink:href="#plotData"/>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -6,4 +6,5 @@ LGT : 125
LGTMOD : 194
MOD : 126
MODSEV : 195
SEV : 127
SEV : 127
EXTRM : 127

View file

@ -5,6 +5,65 @@ overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import time
class PirepIcingDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
# use obsText for pirep
if rec.isValidParameter("obsText"):
return rec.getString("obsText")
# rebuild text for airep
sampleString = "ARP "
sampleString += " "
sampleString += " F%d" % (rec.getInt("flightLevel")/100)
try:
iceInten = rec.getString("iceInten")
except ValueError:
iceInten = ""
try:
iceType = rec.getString("iceType")
except ValueError:
icetype = ""
if iceInten != "" or iceType != "":
sampleString += " IC"
if iceInten != "":
sampleString += " "
sampleString += iceInten
if iceType != "":
sampleString += " "
sampleString += iceType
return sampleString
def isValid(self, rec):
# DCS10257
# need icing data
# only show non-severe / no severity
if rec.isValidParameter("iceInten"):
iceInten = rec.getString("iceInten")
else:
iceInten = ""
if rec.isValidParameter("iceType"):
iceType = rec.getString("iceType")
else:
iceType = ""
if (iceInten == "") and (iceType == ""):
# no icing data
return False
elif (iceInten == "SEV") or (iceInten == "EXTRM"):
# incorrect severity
return False
else:
# low or no severity, and has some icing data
return True
plotDelegate = PirepIcingDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";
@ -35,7 +94,8 @@ xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
]]>
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleText" plotMode="sample" plotParam="obsText"> </text>
<text id="sampleText" plotMode="sample" plotParam="obsText"> </text>
<text id="validityParams" plotMode="null" class="text" plotParam="iceType" x="0" y="0" visibility="hidden">0</text>
<text id="iceInensity" plotMode="table" class="weather" plotLookupTable="icing_intens_trans.txt" plotParam="iceInten" x="0" y="0">0</text>
<text id="fltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
<text id="iceType" plotMode="table" class="weather" plotLookupTable="icing_type_trans.txt" plotParam="iceType" style="text-anchor: end" x="0" y="-10">0</text>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -0,0 +1,99 @@
<?xml version="1.0"?>
<svg width="80" height="80"
viewBox="0 0 80 80"
overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import time
class PirepIcingDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
# use obsText for pirep
if rec.isValidParameter("obsText"):
return rec.getString("obsText")
# rebuild text for airep
sampleString = "ARP "
sampleString += " "
sampleString += " F%d" % (rec.getInt("flightLevel")/100)
try:
iceInten = rec.getString("iceInten")
except ValueError:
iceInten = ""
try:
iceType = rec.getString("iceType")
except ValueError:
icetype = ""
if iceInten != "" or iceType != "":
sampleString += " IC"
if iceInten != "":
sampleString += " "
sampleString += iceInten
if iceType != "":
sampleString += " "
sampleString += iceType
return sampleString
def isValid(self, rec):
# DCS10257
# need icing severity data
# only show severe
if rec.isValidParameter("iceInten"):
iceInten = rec.getString("iceInten")
if (iceInten == "SEV") or (iceInten == "EXTRM"):
# high severity
return True
else:
# low or empty severity
return False
else:
# no severity data
return False
plotDelegate = PirepIcingDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";
src: url(WindSymbols.svg#WindSymbols); }
@font-face { font-family: "StandardFont";
src: url(Standard.svg#Standard); }
@font-face { font-family: "WxSymbolFont";
src: url(WxSymbols.svg#WxSymbols); }
@font-face { font-family: "SpecialSymbolFont";
src: url(SpecialSymbols.svg#SpecialSymbols); }
text.text
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: StandardFont;
font-size: 1em;
}
text.weather
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: WxSymbolFont;
}
]]>
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleText" plotMode="sample" plotParam="obsText"> </text>
<text id="iceInensity" plotMode="table" class="weather" plotLookupTable="icing_intens_trans.txt" plotParam="iceInten" x="0" y="0">0</text>
<text id="fltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
<text id="iceType" plotMode="table" class="weather" plotLookupTable="icing_type_trans.txt" plotParam="iceType" style="text-anchor: end" x="0" y="-10">0</text>
</symbol>
</defs>
<use id="wind" x="40" y="40" width="80" height="80" visibility="visible" xlink:href="#plotData"/>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -44,9 +44,19 @@ class PirepPlotDelegate(PlotDelegate):
windSpeed = int(rec.getFloat("windSpeed"))
if windDir > -1080 or windSpeed > 0:
sampleString += " %d/%dKT" % (windDir, windSpeed)
turbFreq = rec.getString("turbFreq")
turbInten = rec.getString("turbInten")
turbType = rec.getString("turbType")
try:
turbFreq = rec.getString("turbFreq")
except ValueError:
turbFreq = ""
try:
turbInten = rec.getString("turbInten")
except ValueError:
turbInten = ""
try:
turbType = rec.getString("turbType")
except ValueError:
turbType = ""
if turbFreq != "" or turbInten != "" or turbType != "":
sampleString += " TB"
if turbFreq != "":
@ -58,7 +68,45 @@ class PirepPlotDelegate(PlotDelegate):
if turbType != "":
sampleString += " "
sampleString += turbType
try:
iceInten = rec.getString("iceInten")
except ValueError:
iceInten = ""
try:
iceType = rec.getString("iceType")
except ValueError:
icetype = ""
if iceInten != "" or iceType != "":
sampleString += " IC"
if iceInten != "":
sampleString += " "
sampleString += iceInten
if iceType != "":
sampleString += " "
sampleString += iceType
return sampleString
def isValid(self, rec):
# DCS10257
# only show non-severe Turb/Ice data, non-UUA (urgent)
if rec.isValidParameter("obsText"):
obsText = rec.getString("obsText")
if "UUA" in obsText:
# urgent message
return False
if rec.isValidParameter("turbInten"):
turbInten = rec.getString("turbInten")
if (turbInten == "SEV") or (turbInten == "EXTRM"):
# high severity turbulence
return False
if rec.isValidParameter("iceInten"):
iceInten = rec.getString("iceInten")
if (iceInten == "SEV") or (iceInten == "EXTRM"):
# high severity turbulence, high severity icing
return False
# low or no severity, non-urgent data
return True
plotDelegate = PirepPlotDelegate()
@ -92,7 +140,8 @@ plotDelegate = PirepPlotDelegate()
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleParams1" plotMode="sample" plotParam="obsText,stationId,longitude,latitude,timeObs,flightLevel"> </text>
<text id="sampleParams2" plotMode="sample" plotParam="temperature,windDir,windSpeed,turbInten,turbFreq,turbType"> </text>
<text id="sampleParams2" plotMode="sample" plotParam="temperature,windDir,windSpeed,turbInten,turbFreq,turbType,iceInten,iceType"> </text>
<text id="validityParams" plotMode="null" class="text" plotParam="obsText,turbInten,iceInten" x="0" y="0" visibility="hidden">0</text>
<text id="fltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: start;" x="10px" y="-10px">75</text>
<text id="tempText" plotMode="text" plotParam="temperature" plotFormat="%3.0f" style="text-anchor: end;" x="-10px" y="-10px">75</text>
<g id="windVaneText" plotMode="barb" plotParam="windSpeed,windDir" plotUnit="kts" x="0" y="0" transform="rotate(0,0,0)">

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -0,0 +1,155 @@
<?xml version="1.0"?>
<svg width="80" height="80"
viewBox="0 0 80 80"
overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import time
class PirepPlotDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
# use obsText for pirep
if rec.isValidParameter("obsText"):
return rec.getString("obsText")
# rebuild text for airep
sampleString = "ARP "
sampleString += rec.getString("stationId")
sampleString += " "
lat = rec.getFloat("latitude")
if(lat &lt; 0):
sampleString += "%.3fS " % (-1*lat)
else:
sampleString += "%.3fN " % (lat)
lon = rec.getFloat("longitude")
if(lon &lt; 0):
sampleString += "%.3fW " % (-1*lon)
else:
sampleString += "%.3fE " % (lon)
timeObs = rec.getLong("timeObs")
sampleString += time.strftime("%H%M",time.localtime(timeObs/1000))
sampleString += " F%d" % (rec.getInt("flightLevel")/100)
temp = rec.getFloat("temperature")
if temp &lt; -273.15:
pass
elif temp &lt; 0:
sampleString += " M%d" % (int(-1*temp))
else:
sampleString += " P%d" % (int(temp))
windDir = int(rec.getFloat("windDir"))
windSpeed = int(rec.getFloat("windSpeed"))
if windDir > -1080 or windSpeed > 0:
sampleString += " %d/%dKT" % (windDir, windSpeed)
try:
turbFreq = rec.getString("turbFreq")
except ValueError:
turbFreq = ""
try:
turbInten = rec.getString("turbInten")
except ValueError:
turbInten = ""
try:
turbType = rec.getString("turbType")
except ValueError:
turbType = ""
if turbFreq != "" or turbInten != "" or turbType != "":
sampleString += " TB"
if turbFreq != "":
sampleString += " "
sampleString += turbFreq
if turbInten != "":
sampleString += " "
sampleString += turbInten
if turbType != "":
sampleString += " "
sampleString += turbType
try:
iceInten = rec.getString("iceInten")
except ValueError:
iceInten = ""
try:
iceType = rec.getString("iceType")
except ValueError:
icetype = ""
if iceInten != "" or iceType != "":
sampleString += " IC"
if iceInten != "":
sampleString += " "
sampleString += iceInten
if iceType != "":
sampleString += " "
sampleString += iceType
return sampleString
def isValid(self, rec):
# DCS10257
# only show non-severe Turb/Ice data, non-UUA (urgent)
if rec.isValidParameter("obsText"):
obsText = rec.getString("obsText")
if "UUA" in obsText:
# urgent message
return True
if rec.isValidParameter("turbInten"):
turbInten = rec.getString("turbInten")
if (turbInten == "SEV") or (turbInten == "EXTRM"):
# high severity turbulence
return True
if rec.isValidParameter("iceInten"):
iceInten = rec.getString("iceInten")
if (iceInten == "SEV") or (iceInten == "EXTRM"):
# high severity turbulence, high severity icing
return True
# low or no severity, non-urgent data
return False
plotDelegate = PirepPlotDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";
src: url(WindSymbols.svg#WindSymbols); }
@font-face { font-family: "StandardFont";
src: url(Standard.svg#Standard); }
@font-face { font-family: "WxSymbolFont";
src: url(WxSymbols.svg#WxSymbols); }
@font-face { font-family: "SpecialSymbolFont";
src: url(SpecialSymbols.svg#SpecialSymbols); }
text.barb
{
fill: none;
font-size: 1em;
font-size: 1em;
font-family: WindSymbolFont;
}
text.text
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: StandardFont;
font-size: 1em;
}
]]>
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleParams1" plotMode="sample" plotParam="obsText,stationId,longitude,latitude,timeObs,flightLevel"> </text>
<text id="sampleParams2" plotMode="sample" plotParam="temperature,windDir,windSpeed,turbInten,turbFreq,turbType,iceInten,iceType"> </text>
<text id="validityParams" plotMode="null" class="text" plotParam="obsText,turbInten,iceInten" x="0" y="0" visibility="hidden">0</text>
<text id="fltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: start;" x="10px" y="-10px">75</text>
<text id="tempText" plotMode="text" plotParam="temperature" plotFormat="%3.0f" style="text-anchor: end;" x="-10px" y="-10px">75</text>
<g id="windVaneText" plotMode="barb" plotParam="windSpeed,windDir" plotUnit="kts" x="0" y="0" transform="rotate(0,0,0)">
<text id="windVaneText" class="arrow" x="0" y="0">0</text>
<text id="windArrowText" class="barb" x="0" y="0">arrow</text>
</g>
</symbol>
</defs>
<use id="wind" x="40" y="40" width="80" height="80" visibility="visible" xlink:href="#plotData"/>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View file

@ -5,6 +5,65 @@ overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import time
class PirepTurbDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
# use obsText for pirep
if rec.isValidParameter("obsText"):
return rec.getString("obsText")
# rebuild text for airep
sampleString = "ARP "
sampleString += " "
sampleString += " F%d" % (rec.getInt("flightLevel")/100)
try:
turbFreq = rec.getString("turbFreq")
except ValueError:
turbFreq = ""
try:
turbInten = rec.getString("turbInten")
except ValueError:
turbInten = ""
if turbInten != "" or turbFreq != "":
sampleString += " TB"
if turbInten != "":
sampleString += " "
sampleString += turbInten
if turbFreq != "":
sampleString += " "
sampleString += turbFreq
return sampleString
def isValid(self, rec):
# DCS10257
# need some turbulence data
# only show non-severe
if rec.isValidParameter("turbInten"):
turbInten = rec.getString("turbInten")
else:
turbInten = ""
if rec.isValidParameter("turbFreq"):
turbFreq = rec.getString("turbFreq")
else:
turbFreq = ""
if (turbInten == "") and (turbFreq == ""):
# no turbulence data present
return False
elif (turbInten == "SEV") or (turbInten == "EXTRM"):
# turbulence data present, but not correct severity
return False
else:
# turbulence data present, and if severity is present it is not high
return True
plotDelegate = PirepTurbDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -0,0 +1,99 @@
<?xml version="1.0"?>
<svg width="80" height="80"
viewBox="0 0 80 80"
overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import time
class PirepTurbDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
# use obsText for pirep
if rec.isValidParameter("obsText"):
return rec.getString("obsText")
# rebuild text for airep
sampleString = "ARP "
sampleString += " "
sampleString += " F%d" % (rec.getInt("flightLevel")/100)
try:
turbFreq = rec.getString("turbFreq")
except ValueError:
turbFreq = ""
try:
turbInten = rec.getString("turbInten")
except ValueError:
turbInten = ""
if turbInten != "" or turbFreq != "":
sampleString += " TB"
if turbInten != "":
sampleString += " "
sampleString += turbInten
if turbFreq != "":
sampleString += " "
sampleString += turbFreq
return sampleString
def isValid(self, rec):
# DCS10257
# need turbulence severity data
# only show severe
if rec.isValidParameter("turbInten"):
turbInten = rec.getString("turbInten")
if (turbInten == "SEV") or (turbInten == "EXTRM"):
# high severity
return True
else:
# low or empty severity
return False
else:
# no turbulence severity data, so cannot have high turbulence severity
return False
plotDelegate = PirepTurbDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";
src: url(WindSymbols.svg#WindSymbols); }
@font-face { font-family: "StandardFont";
src: url(Standard.svg#Standard); }
@font-face { font-family: "WxSymbolFont";
src: url(WxSymbols.svg#WxSymbols); }
@font-face { font-family: "SpecialSymbolFont";
src: url(SpecialSymbols.svg#SpecialSymbols); }
text.text
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: StandardFont;
font-size: 1em;
}
text.weather
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: WxSymbolFont;
}
]]>
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="sampleText" plotMode="sample" plotParam="obsText"> </text>
<text id="turbInensity" plotMode="table" class="weather" plotLookupTable="turb_intens_trans.txt" plotParam="turbInten" x="0" y="0">0</text>
<text id="fltLvlText" plotMode="text" plotParam="flightLevel" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
<text id="turbFreq" plotMode="table" class="weather" plotLookupTable="turb_freq_trans.txt" plotParam="turbFreq" style="text-anchor: end" x="0" y="-10">0</text>
</symbol>
</defs>
<use id="wind" x="40" y="40" width="80" height="80" visibility="visible" xlink:href="#plotData"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB