Функция фильтра 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>
       ....
Другие вопросы по тегам