Условия
...
фильтрации
...
передаются
...
списком
...
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 не допускается. |
Пример фильтра
[|
| --- | --- |
| `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` не допускается. |
## Пример фильтра
```json
[{ "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вызывает
...
- ошибку.
...
- Все
...
- значения
...
- (числа,
...
- даты)
...
- передаются
...
- строками
...
- —
...
- для
...
- единообразия.