Условия фильтрации передаются списком FilterContainer: { NextFilterLogicOperationType, FilterType, Value }. FilterType определяет вид фильтра (таблица ниже), Value — его параметры в формате, специфичном для конкретного FilterType.

Глобальные фильтры

FilterTypeНазначение
RouteFilterФильтр по дорогам. Для сущностей, связанных с дорогами (интерфейс IRoutIdEntity), фильтрует по полю routeId. Для самой сущности дороги (Route) ищет указанные Id в полях Id и JunctionId (через ИЛИ).
RegionFilterФильтр по регионам. Для сущности региона (Region) ищет указанные Id в поле Id. Для прочих геометрических сущностей берёт геометрию указанных регионов и фильтрует по пересечению (Intersect).
PolygonFilterГеометрический фильтр по полигонам. Работает только для геометрических сущностей — ищет вхождение в полигон (Intersect).
GeometryAttributeFilterФильтр по типам геометрии (Point/Polygon/Linestring). Работает только для геометрических сущностей. Указанный тип считается эквивалентным своему Multi-варианту (например, Point включает и MultiPoint).
DataSourceGeometryFilterФильтр по геометрии сущностей другого источника данных. Значение — список объектов { DataSourceId, Filter (вложенный список `FilterContainer` для сущности этого источника), GeometryOperationType, Buffer, FilterBuffer }. GeometryOperationType задаёт геометрическое отношение (Intersects/Contains/Disjoint/Equals/Touches/Covers/Within) между текущей сущностью (с буфером Buffer) и геометриями отфильтрованных сущностей источника (с буфером FilterBuffer). Работает только для геометрических сущностей; источник не может фильтровать сам себя.
PropertyFilterФильтрация по значениям полей сущности. При фильтрации по полям-словарям указывается имя поля-идентификатора (например, BusStopTypeId), а не значение классификатора.
ProjectFilterФильтр по проектам. Для сущностей, связанных с проектами (интерфейс IProjectEntity), фильтрует по полю ProjectId.

Логические операции

Между фильтрами (NextFilterLogicOperationType) и между условиями внутри PropertyFilter (NextLogicOperationType) допустимы: And, Or. Эти поля можно передавать как null (или опускать), если фильтр единственный либо последний в цепочке.

Типы операций PropertyFilter (OperationType)

OperationTypeОписаниеОграничения
EqРавно (сравнение 1:1).Все типы полей; допускает явный null.
NeqНе равно.Как Eq, с отрицанием.
Lt / LeМеньше / меньше или равно.Недопустимо для String и Guid; null не допускается и строки со значением null из БД не учитываются.
Gt / GeБольше / больше или равно.Недопустимо для String и Guid; null не допускается.
In / NInВхождение в массив значений (аналог Eq/Neq по массиву).In — неявное ИЛИ между значениями, NIn — неявное И.
Like / NLikeПодстрока (аналог contains), регистронезависимо.Только String; null не допускается.
StartWith / NStartWithНачинается с подстроки.Только String; null не допускается.
EndWith / NEndWithЗаканчивается подстрокой.Только String; null не допускается.

Пример фильтра

[
  { "NextFilterLogicOperationType": "And", "FilterType": "RouteFilter", "Value": ["3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7"] },
  { "NextFilterLogicOperationType": "And", "FilterType": "ProjectFilter", "Value": ["3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7"] },
  { "NextFilterLogicOperationType": "And", "FilterType": "RegionFilter", "Value": ["3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7"] },
  { "NextFilterLogicOperationType": "And", "FilterType": "PolygonFilter", "Value": { "Srid": 4326, "Geometries": [ { "type": "Polygon", "coordinates": [[[55.893821,49.333641],[55.891733,49.328927],[55.899957,49.316499],[55.90215,49.322116],[55.893821,49.333641]]] } ] } },
  { "NextFilterLogicOperationType": "And", "FilterType": "GeometryAttributeFilter", "Value": { "type": ["Point", "Polygon"] } },
  { "NextFilterLogicOperationType": "Or", "FilterType": "DataSourceGeometryFilter", "Value": [ { "DataSourceId": "3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7", "GeometryOperationType": "Intersects", "Buffer": 0, "FilterBuffer": 0, "Filter": [] } ] },
  { "NextFilterLogicOperationType": "And", "FilterType": "PropertyFilter", "Value": [
    { "NextLogicOperationType": "Or",  "PropertyName": "Name",       "OperationType": "Eq",        "Value": "Andrey" },
    { "NextLogicOperationType": "And", "PropertyName": "Name",       "OperationType": "Like",      "Value": "I" },
    { "NextLogicOperationType": "And", "PropertyName": "Name",       "OperationType": "StartWith", "Value": "I" },
    { "NextLogicOperationType": "And", "PropertyName": "Name",       "OperationType": "EndWith",   "Value": "y" },
    { "NextLogicOperationType": "And", "PropertyName": "Number",     "OperationType": "Gt",        "Value": "10" },
    { "NextLogicOperationType": "Or",  "PropertyName": "Number",     "OperationType": "Lt",        "Value": "100" },
    { "NextLogicOperationType": "None","PropertyName": "NumberUrns", "OperationType": "In",        "Value": ["5","8","10"] }
  ] }
]

Пример показывает все семь FilterType и все семь условий PropertyFilter в виде валидного JSON без //-комментариев и висячих запятых.

Правила и ограничения

Обработка ошибок фильтрации строгая — нарушение контракта приводит к ошибке запроса: