CQL фильтрует несколько типов названий для получения объектов в пределах указанной геометрии - PullRequest
0 голосов
/ 12 июня 2018

Среда

Я пытаюсь получить характеристические данные из слоя WFS, работающего на GeoServer, с использованием фильтрации CQL.У меня нет доступа к серверу.

Цель

Получение всех объектов двух типов в геометрии другого объекта другого слоя;не более одного запроса на слой (т.е. не на тип)

Ход мыслей

Мне нужно:

  • Получить геометрию отслой wfs (geometryA)
  • Используйте эту геометрию для получения двух типов названий из другого слоя с геометрией внутри "geometryA".

Попытки

Для одного типа имя будет легко.Сначала выберите геометрию A, затем: https://src/wfs?request=getFeature&version=2.0.0&typenames=namespace:typename&srsName=EPSG:28992&outputFormat=application/json&cql_filter=WITHIN(geometry, geometryA)

Но я не могу понять это для нескольких имен типов ... Я пробовал: https://src/wfs?request=getFeature&version=2.0.0&typenames=namespace:typename;namespace:typename2&srsName=EPSG:28992&outputFormat=application/json&cql_filter=WITHIN(geometry, geometryA) , что приводит к: Extracted invalid join sub-filter [ geometrie within POLYGON ((154884 463434, 154884 463455, 154905 463455, 154905 463434, 154884 463434)) ], it users more than one feature type + []

Итак, я попытался, после некоторого поиска в Google, https://src/wfs?request=getFeature&version=2.0.0&typenames=namespace:typename;namespace:typename2&srsName=EPSG:28992&outputFormat=application/json&cql_filter=WITHIN(geometry, geometryA);WITHIN(geometry, geometryA) , что приводит к: Join query must specify a filter

И теперь я совершенно потерян ...

Вопрос

Кто-нибудь сможет рассказать мне, как использовать CQL (или что-нибудь еще) для получения двух типов в фиксированной геометрии?

1 Ответ

0 голосов
/ 12 июня 2018

В WFS 2.0 указание 2 (или более) typeNames вводит объединение в запросе .Это вернет кортежи типов, соединенных в соответствии с фильтром, который вы предоставляете.

В вашем случае, я не совсем уверен, если это то, что вы хотите, если нет, то вы можете просто сделать 2 запроса наотдельные типы (параллельно для скорости?).

Если это то, что вы хотите, вы можете избежать неоднозначности geometrie, являющейся атрибутом обоих типов, добавив псевдоним для типов, так что ваш запросстановится примерно таким:

  <wfs:Query typeNames="namespace:typename;namespace:typename2" aliases="a b" >
     <fes:Filter>
        <fes:Or>
        <fes:Within>
           <fes:ValueReference>a.geometrie</fes:PropertyName>
           <fes:Literal>POLYGON ((154884 463434, 154884 463455,
  154905 463455, 154905 463434, 154884 463434))</fes:Literal>
        </fes:Within>
        <fes:Within>
           <fes:ValueReference>b.geometrie</fes:PropertyName>
           <fes:Literal>POLYGON ((154884 463434, 154884 463455,
  154905 463455, 154905 463434, 154884 463434))</fes:Literal>
        </fes:Within>
       </fes:Or>
     </fes:Filter>
  </wfs:Query>

Я не уверен, что вы можете создать такое объединение с помощью CQL, но вы можете попробовать это как:

cql_filter=WITHIN(a.geometry, geometryA) OR WITHIN(b.geometry, geometryA)
...