1
0
Fork 0

Implementation of weather interpolation using property-rules

This commit is contained in:
Torsten Dreyer 2010-08-28 20:31:44 +02:00
parent 9dc13921cd
commit 45dd7055e5
9 changed files with 718 additions and 5 deletions

View file

@ -0,0 +1,41 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<PropertyList>
<params>
<from>environment/metar/clouds/layer[0]/elevation-ft</from>
<to>/environment/clouds/layer[0]/elevation-ft</to>
</params>
<name>MetarController:clouds:altitude_interpolate</name>
<type>noise-spike</type>
<max-rate-of-change>8.333</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
<greater-than>
<property alias="../../../../params/from"/>
<value>-9000</value>
</greater-than>
<greater-than>
<property alias="../../../../params/to"/>
<value>-9000</value>
</greater-than>
</condition>
</enable>
<input alias="../params/from"/>
<output alias="../params/to"/>
</PropertyList>

View file

@ -0,0 +1,43 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<PropertyList>
<params>
<from>environment/metar/clouds/layer[0]/elevation-ft</from>
<to>/environment/clouds/layer[0]/elevation-ft</to>
</params>
<name>MetarController:clouds:altitude_set</name>
<type>gain</type>
<gain>1.0</gain>
<enable>
<condition>
<property>/environment/metar/valid</property>
<or>
<less-than>
<property alias="../../../../../params/from"/>
<value>-9000</value>
</less-than>
<less-than>
<property alias="../../../../../params/to"/>
<value>-9000</value>
</less-than>
</or>
</condition>
</enable>
<input alias="../params/from"/>
<output alias="../params/to"/>
</PropertyList>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<PropertyList>
<params>
<from>/environment/metar/clouds/layer[0]/coverage-type</from>
<to>environment/clouds/layer[0]/coverage-type</to>
</params>
<name>MetarController:clouds:coverage</name>
<type>gain</type>
<gain>1.0</gain>
<enable>
<condition>
<property>/environment/metar/valid</property>
<not-equals>
<property alias="../../../../params/from"/>
<property alias="../../../../params/to"/>
</not-equals>
</condition>
</enable>
<input alias="../params/from"/>
<output alias="../params/to"/>
</PropertyList>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<PropertyList>
<name>MetarController:clouds:thickness</name>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>/environment/metar/clouds/layer[0]/thickness-ft</input>
<output>/environment/clouds/layer[0]/thickness-ft</output>
<type>noise-spike</type>
<max-rate-of-change>8.3333</max-rate-of-change>
</PropertyList>

View file

@ -43,7 +43,7 @@
</scenario> </scenario>
<scenario> <scenario>
<name>Stormy Monday</name> <name>Stormy Monday</name>
<metar>XXXX 012345Z 28035G50KT 9999 TSRA SCT022CB BKN030 13/09 Q1005</metar> <metar>XXXX 012345Z 28035G50KT 250V300 9999 TSRA SCT022CB BKN030 13/09 Q1005</metar>
<description>You're out for an adventure? Gusty winds blowing from the west <description>You're out for an adventure? Gusty winds blowing from the west
and isolated thunderstorms should be avoided. Fasten your seatbelt!</description> and isolated thunderstorms should be avoided. Fasten your seatbelt!</description>
</scenario> </scenario>
@ -169,31 +169,33 @@
</config> </config>
<clouds> <clouds>
<status>true</status>
<layer n="0"> <layer n="0">
<coverage>clear</coverage> <coverage>clear</coverage>
<elevation-ft>4000</elevation-ft> <elevation-ft>-9999</elevation-ft>
<thickness-ft>600</thickness-ft> <thickness-ft>600</thickness-ft>
<transition-ft>150</transition-ft> <transition-ft>150</transition-ft>
<span-m>40000</span-m> <span-m>40000</span-m>
</layer> </layer>
<layer n="1"> <layer n="1">
<coverage>clear</coverage> <coverage>clear</coverage>
<elevation-ft>19500</elevation-ft> <elevation-ft>-9999</elevation-ft>
<thickness-ft>65</thickness-ft> <thickness-ft>65</thickness-ft>
<transition-ft>25</transition-ft> <transition-ft>25</transition-ft>
<span-m>40000</span-m> <span-m>40000</span-m>
</layer> </layer>
<layer n="2"> <layer n="2">
<coverage>clear</coverage> <coverage>clear</coverage>
<elevation-ft>-9999</elevation-ft>
<span-m>40000</span-m> <span-m>40000</span-m>
</layer> </layer>
<layer n="3"> <layer n="3">
<coverage>clear</coverage> <coverage>clear</coverage>
<elevation-ft>-9999</elevation-ft>
<span-m>40000</span-m> <span-m>40000</span-m>
</layer> </layer>
<layer n="5"> <layer n="4">
<coverage>clear</coverage> <coverage>clear</coverage>
<elevation-ft>-9999</elevation-ft>
<span-m>40000</span-m> <span-m>40000</span-m>
</layer> </layer>
</clouds> </clouds>

View file

@ -0,0 +1,111 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<!--
Interpolate the values of /environment/interpolated/* over time
and write the results to /environment/*, the environment of our
aircraft
All filters are enabled on /environment/config/enabled=true
-->
<PropertyList>
<filter>
<name>EnvironmentInterpolator:temperature-sea-level-degc</name>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>/environment/config/interpolated/temperature-sea-level-degc</input>
<output>/environment/temperature-sea-level-degc</output>
<type>noise-spike</type>
<max-rate-of-change>0.1667</max-rate-of-change>
</filter>
<filter>
<name>EnvironmentInterpolator:dewpoint-sea-level-degc</name>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>/environment/config/interpolated/dewpoint-sea-level-degc</input>
<output>/environment/dewpoint-sea-level-degc</output>
<type>noise-spike</type>
<max-rate-of-change>0.1667</max-rate-of-change>
</filter>
<filter>
<!--
transfer the interpolated QNH to the global environment
limit the rate of change to approx 1hpa/sec
-->
<name>EnvironmentInterpolator:pressure-sea-level-inhg</name>
<type>noise-spike</type>
<max-rate-of-change>0.03</max-rate-of-change>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>/environment/config/interpolated/pressure-sea-level-inhg</input>
<output>/environment/pressure-sea-level-inhg</output>
</filter>
<filter>
<name>EnvironmentInterpolator:visibility-m</name>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>/environment/config/interpolated/visibility-m</input>
<output>/environment/visibility-m</output>
<type>exponential</type>
<filter-time>10</filter-time>
</filter>
<!--
filter the wind vector by filtering the cartesian representation
-->
<filter>
<name>EnvironmentInterpolator:wind-from-north</name>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>/environment/config/interpolated/wind-from-north-fps</input>
<output>/environment/wind-from-north-fps</output>
<type>exponential</type>
<filter-time>5</filter-time>
</filter>
<filter>
<name>EnvironmentInterpolator:wind-from-east</name>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>/environment/config/interpolated/wind-from-east-fps</input>
<output>/environment/wind-from-east-fps</output>
<type>exponential</type>
<filter-time>5</filter-time>
</filter>
</PropertyList>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<PropertyList>
<name>MetarController:layer:wind-from-heading-deg</name>
<type>gain</type>
<gain>1.0</gain>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>
<property>/environment/config/boundary/entry[0]/wind-from-heading-deg</property>
<offset>/environment/config/boundary/entry[1]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/boundary/entry[1]/wind-from-heading-deg</output>
<period>
<min>0</min>
<max>360</max>
</period>
</PropertyList>

View file

@ -0,0 +1,39 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<PropertyList>
<name>MetarController:layer:wind-speed-kt</name>
<type>gain</type>
<gain>1.0</gain>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>
<expression>
<product>
<property>/environment/config/boundary/entry[0]/wind-speed-kt</property>
<sum>
<property>/environment/config/boundary/entry[1]/wind-speed-change-rel</property>
<value>1.0</value>
</sum>
</product>
</expression>
</input>
<output>/environment/config/boundary/entry[1]/wind-speed-kt</output>
</PropertyList>

View file

@ -0,0 +1,375 @@
<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<!--
Interpolate the METAR weather values over time and write
the environment values in /environment/config/*
All filters are enabled if /environment/metar/valid=true
-->
<PropertyList>
<filter>
<!--
transfer the METAR QNH to the interpolation controller
limit the rate of change to approx 0.01hpa/sec
-->
<name>MetarController:pressure-sea-level-inhg</name>
<type>noise-spike</type>
<max-rate-of-change>0.0003</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>/environment/metar/pressure-sea-level-inhg</input>
<output>/environment/config/boundary/entry/pressure-sea-level-inhg</output>
<output>/environment/config/aloft/entry/pressure-sea-level-inhg</output>
</filter>
<filter>
<!--
transfer the sea-level temperature to each layer of
interpolation controller. We have no idea here about
the temperature gradient, so just assume ISA.
-->
<name>MetarController:temperature-sea-level-degc</name>
<type>noise-spike</type>
<max-rate-of-change>0.01667</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>/environment/metar/temperature-sea-level-degc</input>
<output>/environment/config/boundary/entry[0]/temperature-sea-level-degc</output>
<output>/environment/config/boundary/entry[1]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[0]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[1]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[2]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[3]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[4]/temperature-sea-level-degc</output>
</filter>
<filter>
<!--
transfer the sea-level temperature to each layer of
interpolation controller.
-->
<name>MetarController:dewpoint-sea-level-degc</name>
<type>noise-spike</type>
<max-rate-of-change>0.01667</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>/environment/metar/dewpoint-sea-level-degc</input>
<output>/environment/config/boundary/entry[0]/dewpoint-sea-level-degc</output>
<output>/environment/config/boundary/entry[1]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[0]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[1]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[2]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[3]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[4]/dewpoint-sea-level-degc</output>
</filter>
<filter>
<!--
transfer the sea-level temperature to each layer of
interpolation controller. We are not very creative here and
use the same visibility for all layers but top three which
are left untouched.
-->
<name>MetarController:visibility-m</name>
<type>exponential</type>
<filter-time>30</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>/environment/metar/min-visibility-m</input>
<output>/environment/config/boundary/entry[0]/visibility-m</output>
<output>/environment/config/boundary/entry[1]/visibility-m</output>
<output>/environment/config/aloft/entry[0]/visibility-m</output>
<output>/environment/config/aloft/entry[1]/visibility-m</output>
</filter>
<!-- split the wind vector into it's components -->
<filter>
<name>MetarController:wind-from-north-kt</name>
<type>exponential</type>
<filter-time>30</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>
<expression>
<cos>
<product>
<property>/environment/metar/base-wind-dir-deg</property>
<value>0.0174533</value>
</product>
</cos>
</expression>
<scale>/environment/metar/base-wind-speed-kt</scale>
</input>
<output>/environment/metar/base-wind-from-north-kt</output>
</filter>
<filter>
<name>MetarController:wind-from-east-kt</name>
<type>exponential</type>
<filter-time>30</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>
<expression>
<sin>
<product>
<property>/environment/metar/base-wind-dir-deg</property>
<value>0.0174533</value>
</product>
</sin>
</expression>
<scale>/environment/metar/base-wind-speed-kt</scale>
</input>
<output>/environment/metar/base-wind-from-east-kt</output>
</filter>
<filter>
<name>MetarController::wind-speed-kt</name>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>
<expression>
<!-- pythagoras in markup language -->
<sqrt>
<sum>
<product>
<property>/environment/metar/base-wind-from-east-kt</property>
<property>/environment/metar/base-wind-from-east-kt</property>
</product>
<product>
<property>/environment/metar/base-wind-from-north-kt</property>
<property>/environment/metar/base-wind-from-north-kt</property>
</product>
</sum>
</sqrt>
</expression>
</input>
<output>/environment/config/boundary/entry[0]/wind-speed-kt</output>
<type>gain</type>
<gain>1.0</gain>
</filter>
<filter>
<name>MetarController:wind-from-heading-deg</name>
<enable>
<condition>
<property>/environment/metar/valid</property>
</condition>
</enable>
<input>
<expression>
<atan2>
<property>/environment/metar/base-wind-from-east-kt</property>
<property>/environment/metar/base-wind-from-north-kt</property>
</atan2>
</expression>
</input>
<output>/environment/config/boundary/entry[0]/wind-from-heading-deg</output>
<type>gain</type>
<gain>57.3</gain> <!-- radians to degree -->
<period>
<min>0</min>
<max>360</max>
</period>
</filter>
<!-- Adjust the wind-vector for the layers -->
<!-- TODO: handle variable winds -->
<filter include="layer-heading-offset.xml"/>
<filter include="layer-heading-offset.xml">
<input>
<offset>/environment/config/aloft/entry[0]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[0]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<input>
<offset>/environment/config/aloft/entry[1]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[1]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<input>
<offset>/environment/config/aloft/entry[2]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[2]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<input>
<offset>/environment/config/aloft/entry[3]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[3]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<input>
<offset>/environment/config/aloft/entry[4]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[4]/wind-from-heading-deg</output>
</filter>
<filter include="layer-speed-change.xml"/>
<filter include="layer-speed-change.xml">
<input>
<offset>/environment/config/aloft/entry[0]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[0]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<input>
<offset>/environment/config/aloft/entry[1]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[1]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<input>
<offset>/environment/config/aloft/entry[2]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[2]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<input>
<offset>/environment/config/aloft/entry[3]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[3]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<input>
<offset>/environment/config/aloft/entry[4]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[4]/wind-speed-kt</output>
</filter>
<!-- Clouds -->
<!-- don't interpolate to/from altitude -9999 -->
<filter include="clouds-altitude-set.xml"/>
<filter include="clouds-altitude-set.xml">
<params>
<from>/environment/metar/clouds/layer[1]/elevation-ft</from>
<to>/environment/clouds/layer[1]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-set.xml">
<params>
<from>/environment/metar/clouds/layer[2]/elevation-ft</from>
<to>/environment/clouds/layer[2]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-set.xml">
<params>
<from>/environment/metar/clouds/layer[3]/elevation-ft</from>
<to>/environment/clouds/layer[3]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-set.xml">
<params>
<from>/environment/metar/clouds/layer[4]/elevation-ft</from>
<to>/environment/clouds/layer[4]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-interpolate.xml"/>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[1]/elevation-ft</from>
<to>/environment/clouds/layer[1]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[2]/elevation-ft</from>
<to>/environment/clouds/layer[2]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[3]/elevation-ft</from>
<to>/environment/clouds/layer[3]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[4]/elevation-ft</from>
<to>/environment/clouds/layer[4]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-thickness.xml"/>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[1]/thickness-ft</input>
<output>/environment/clouds/layer[1]/thickness-ft</output>
</filter>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[2]/thickness-ft</input>
<output>/environment/clouds/layer[2]/thickness-ft</output>
</filter>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[3]/thickness-ft</input>
<output>/environment/clouds/layer[3]/thickness-ft</output>
</filter>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[4]/thickness-ft</input>
<output>/environment/clouds/layer[4]/thickness-ft</output>
</filter>
<filter include="clouds-coverage.xml"/>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[1]/coverage-type</from>
<to>environment/clouds/layer[1]/coverage-type</to>
</params>
</filter>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[2]/coverage-type</from>
<to>environment/clouds/layer[2]/coverage-type</to>
</params>
</filter>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[3]/coverage-type</from>
<to>environment/clouds/layer[3]/coverage-type</to>
</params>
</filter>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[4]/coverage-type</from>
<to>environment/clouds/layer[4]/coverage-type</to>
</params>
</filter>
</PropertyList>