feat(concept): 3D-макет окружения — соседние здания из кадастра в §7 (#2180) #2210

Merged
bot-backend merged 2 commits from feat/massing-neighbors-2180 into main 2026-07-02 19:33:45 +00:00
Showing only changes of commit 87583fef60 - Show all commits

View file

@ -469,6 +469,43 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/v1/parcels/{cad_num}/neighbor-buildings": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Соседние здания (footprint'ы) для 3D-сцены §7 (Forgejo #2180)
* @description GeoJSON FeatureCollection footprint'ов соседних зданий вокруг участка.
*
* Для 3D-сцены «Размещение застройки» (§7 отчёта ПТИЦА): рисуем существующую
* застройку контекста, чтобы концепция вписывалась в окружение. Здания берём из
* `cad_buildings` в радиусе `radius_m` (ST_DWithin по geography). Здания,
* ПЕРЕСЕКАЮЩИЕ сам участок, исключаем на его месте строим мы (их footprint'ы
* только мешали бы сцене).
*
* Геометрия упрощается (ST_SimplifyPreserveTopology, ~0.5 м) фронту не нужна
* кадастровая точность контура для превью. properties каждой фичи:
* cad_num, floors (int|null), height_m (floors×3 если floors>0, иначе null),
* building_name (null если пусто), year_built (int|null), is_neighbor=true.
*
* Отдаём максимум 300 ближайших (ORDER BY расстоянию); `truncated=true` если в
* радиусе их больше. Участок не найден (нет geom) 404.
*
* Query params:
* radius_m: радиус поиска, 501000 м (default 300).
*/
get: operations["get_parcel_neighbor_buildings_api_v1_parcels__cad_num__neighbor_buildings_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/parcels/{cad_num}/isochrones": {
parameters: {
query?: never;
@ -5808,6 +5845,41 @@ export interface operations {
};
};
};
get_parcel_neighbor_buildings_api_v1_parcels__cad_num__neighbor_buildings_get: {
parameters: {
query?: {
radius_m?: number;
};
header?: never;
path: {
cad_num: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
[key: string]: unknown;
};
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
get_isochrones_api_v1_parcels__cad_num__isochrones_get: {
parameters: {
query?: {