Условия фильтрации передаются списком 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 без//-комментариев и висячих запятых.
Правила и ограничения
Обработка ошибок фильтрации строгая — нарушение контракта приводит к ошибке запроса:
- Вызов без
filterIdпредфильтрации и без самой фильтрации возвращает все данные (актуально только внутри бэкенда). - Некорректный JSON в значении контейнера фильтра вызывает ошибку.
- Отсутствующий
FilterType(null) вызывает ошибку. NextFilterLogicOperationTypeсо значениемnullв середине логической цепочки вызывает ошибку.- Некорректный JSON в
Valueвызывает ошибку. - Все значения (числа, даты) передаются строками — для единообразия.