Функция фильтра SLD if_then_else аргумент #2 - ожидаемый тип объекта
Я столкнулся с проблемой с GeoServer SLD XML.
Мой код XML выглядит следующим образом:
<Fill>
<CssParameter name="fill">
<ogc:Function name="if_then_else">
<ogc:Function name="isNull">
<ogc:PropertyName>LTE_RSRP</ogc:PropertyName>
</ogc:Function>
<ogc:Literal>#FF0000</ogc:Literal>
<ogc:Function name="Interpolate">
<ogc:PropertyName>LTE_RSRP</ogc:PropertyName>
<ogc:Literal>-80</ogc:Literal>
<ogc:Literal>#ff0000</ogc:Literal>
<ogc:Literal>-70</ogc:Literal>
<ogc:Literal>#00ff00</ogc:Literal>
<ogc:Literal>-60</ogc:Literal>
<ogc:Literal>#0000ff</ogc:Literal>
<ogc:Literal>color</ogc:Literal>
</ogc:Function>
</ogc:Function>
</CssParameter>
<CssParameter name="fill-opacity">0.3</CssParameter>
</Fill>
Мое намерение заключается в следующем:
- Если LTE_RSRP равно нулю, заполните #FF0000.
- Еще, интерполировать цвет.
Но когда приведенный выше XML применяется, возникает следующая ошибка.
ERROR [geotools.rendering] - Filter Function problem for function if_then_else argument #2 - expected type Object
Здесь аргумент № 2 - это функция Интерполировать. (подсчет аргументов начинается с 0, в соответствии с исходным кодом geotools.) Кажется, что возвращаемое значение функции Interpolate не является объектом.
Это намеренно? Или я что-то не так делаю?
1 ответ
Это сделано намеренно - как функция, которая интерполирует цветовую карту, может вернуть объект? То, что вы хотите сделать, может быть сделано с помощью правил и фильтров, поэтому что-то (не проверенное), подобное этому, должно работать:
<Rule>
<ogc:Filter>
<ogc:PropertyIsNull>
<ogc:PropertyName>LTE_RSRP</ogc:PropertyName>
</ogc:PropertyIsNull>
</ogc:Filter>
<ogc:PolygonSymbolizer>
....
<Fill>
....
</Rule>
<Rule>
<ElseFilter/>
<PolygonSymbolizer>
....
<Fill>
<ogc:Function name="Interpolate">
<ogc:PropertyName>LTE_RSRP</ogc:PropertyName>
<ogc:Literal>-80</ogc:Literal>
<ogc:Literal>#ff0000</ogc:Literal>
<ogc:Literal>-70</ogc:Literal>
<ogc:Literal>#00ff00</ogc:Literal>
<ogc:Literal>-60</ogc:Literal>
<ogc:Literal>#0000ff</ogc:Literal>
<ogc:Literal>color</ogc:Literal>
</ogc:Function>
....