2015-11-17 3 views
0

У меня есть запрос Geoserver WFS с CQL на основе фильтра поперечного слоя в нем, который выглядит следующим образом:Geoserver WFS Cross Layer Идентификаторы Фильтрация и строковые

...&CQL_FILTER=INTERSECTS(the_geom, querySingle('myLayerName','the_geom','the_id = F338')) 

Это не работает. Geoserver дает мне сообщение об ошибке:

java.lang.NullPointerException: PropertyDescriptor является нулевым - вы запрос свойство, которое не существует?

если изменить фильтр к этому:

&CQL_FILTER=INTERSECTS(the_geom, querySingle('myLayerName','the_geom','INCLUDE')) 

он работает.

Что может быть неправильным в первом примере? Идентификатор со значением F338 фактически существует.

Возможно ли, что Geoserver ожидает целое число как id? В CQL-фильтрах могут быть строки, но они должны быть указаны. В моем примере я, очевидно, не могу действительно указать значение, потому что весь параметр функции querySingle является самой цитатой.

+0

Что произойдет, если вы используете «„the_ID“=„F338“» в качестве фильтра? Кроме того, это the_id fid? если это так, вы можете использовать 'IN (F338)' –

+0

Он работает, когда 'the_id' имеет тип' number'. Ваша первая догадка тоже не работает. Как я могу установить 'fid' на слой, чтобы опробовать ваше второе предположение? Thx – Hinrich

ответ

3

Для сравнения строк вам нужно поставить две одинарные котировки, то есть 'the_id =' 'F338' ''. (Одна двойная цитата не работает)

Это глупо недокументированная вещица стоила мне 5 часов проб и ошибок ...

+0

Выглядит странно. Я попробую это. – Hinrich

 Смежные вопросы

  • Нет связанных вопросов^_^