Карта встраивается на сайт через iframe. Управление через URL-параметры.
Главный URL: https://maps.gumy.space/
Простейший iframe:
<iframe src="https://maps.gumy.space/" width="100%" height="600" style="border:0"></iframe>
В виджет-режиме без UI:
<iframe src="https://maps.gumy.space/?chrome=none" width="100%" height="500" style="border:0"></iframe>
| Параметр | Значения | По умолчанию | Что делает |
|---|---|---|---|
| theme | light, dark | light | Тема UI. Внутри карты есть кнопка-переключатель в модалке фильтров; выбор сохраняется в localStorage. |
| lang | ru, en | ru | Язык интерфейса. |
| chrome | full, minimal, none, catalog | full | Пресет UI: full — весь UI; minimal — только кнопка фильтров; none — чистая карта; catalog — карта + список авто справа, без поля поиска. Каждый отдельный параметр ниже переопределяет пресет. |
| clusters | on, off | on | Группировать ли точки в кластеры. |
| mode | browse, delivery | browse | Режим карты. |
| accent | HEX-цвет: 2563eb, %232563eb, f50 | — | Основной цвет UI и пинов карты. Применяется к обеим темам, если не задан accent_dark. Принимаются 3- и 6-значные HEX, с # или без (URL-encoded %23). Из значения автоматически выводятся оттенки для hover/active и кластеров карты. |
| accent_dark | HEX-цвет | =accent | Переопределяет основной цвет только для тёмной темы. Удобно, когда у host-сайта разные цвета для light/dark. |
Каждый параметр on|off (синонимы: 1|0, true|false, yes|no).
Дефолт берётся из пресета chrome=; параметр явно переопределяет пресет.
Это позволяет смешивать: например chrome=none&search=on — чистая карта плюс поиск.
| Параметр | По умолчанию (full / minimal / none / catalog) | Что прячет / включает |
|---|---|---|
| pins | on / on / on / on | Маркеры авто на карте. off — карта без точек, но счётчик и фильтры работают (например для виджета-обёртки на сайте партнёра). |
| search | on / off / off / off | Поле поиска + микрофон + кнопка «Найти». |
| filters | on / on / off / off | Кнопка фильтров, чипсы активных фильтров, модалка. В catalog по умолчанию off — фильтры идут через URL хост-страницы; включить обратно: filters=on. |
| count | on / off / off / off | Счётчик «найдено N авто» в правой части строки поиска. |
| zoom | on / off / off / on | Кнопки зума MapLibre справа сверху. |
| attribution | on / on / on / on | Копирайт OSM в правом нижнем углу. Прятать только если копирайт показан на host-странице — этого требуют условия использования тайлов. |
| interactive | on / on / on / on | Можно ли двигать карту, зумить колесом, перетаскивать. off — карта-картинка. |
| auto_fit | on / on / on / on | Авто-подгон viewport под текущие фильтры (Грузия → приблизит Грузию, нет фильтров → отдалит до мира). off — карта остаётся на исходном центре. |
| list | on / off / off / on | Боковая панель со списком авто (desktop) / bottom-sheet (mobile). Подгружается по фильтрам + видимой области карты, с сортировкой и infinite scroll. |
| list_side | left / left / left / right | Сторона рейла со списком на desktop: left или right. Мобилка игнорирует — там всегда bottom-sheet. |
| sort | appeal_score | Поле сортировки. Допустимые значения: appeal_score (по умолчанию, по total_score — выше = лучше), profit (выгодные сверху, по полю profitability + market_price_diff_pct), total_price_rub, year, mileage, created_at, price. Совпадает с каноном на ai-auto.tech / proride.io / api.proride.io. |
| order | DESC | Направление сортировки: ASC или DESC. Игнорируется для appeal_score и profit — у них фиксированный порядок. |
Только карта без всего UI (виджет на главной партнёра):
https://maps.gumy.space/?chrome=none
Чистая карта без точек — только маршрут доставки, без шума:
https://maps.gumy.space/?mode=delivery&car_id=12345&delivery_to=Moscow&chrome=none&pins=off
Карта-картинка для preview-блока (без зума, без интерактивности, без точек):
https://maps.gumy.space/?chrome=none&pins=on&interactive=off&zoom=off
Минимум UI плюс поиск (чистая карта + строка поиска):
https://maps.gumy.space/?chrome=none&search=on
Каталог-режим — карта + список авто справа, без строки поиска:
https://maps.gumy.space/?chrome=catalog
Список слева, всё остальное как в каталоге:
https://maps.gumy.space/?chrome=catalog&list_side=left
Каталог + сортировка по самой низкой цене:
https://maps.gumy.space/?chrome=catalog&sort=total_price_rub&order=ASC
Тёмная тема, английский, без UI:
https://maps.gumy.space/?theme=dark&lang=en&chrome=none
Подгон под фирменный цвет host-сайта (оранжевый акцент):
https://maps.gumy.space/?chrome=catalog&accent=ff5722
Разные акценты для light и dark (например, для сайта со своей тёмной темой):
https://maps.gumy.space/?accent=2563eb&accent_dark=60a5fa
Brand-страница на стороннем сайте (только Toyota, минимальный chrome):
https://maps.gumy.space/?brand=Toyota&chrome=minimal
Все фильтры передаются как URL-параметры.
| Параметр | Пример | Описание |
|---|---|---|
| brand | Toyota | Марка. Регистронезависимо. |
| model | Camry | Модель. Регистронезависимо. |
| vehicle_type | car | Тип ТС. car / motorcycle / jet_ski / atv / snowmobile / boat / yacht / aircraft / helicopter / rv / truck / construction. |
| body_type | Седан | Тип кузова. Реальные значения берутся из БД (RU). |
| transmission | Автомат | Коробка. Реальные значения из БД (RU). |
| condition | used / new | С пробегом / новые. |
| country | georgia | Одна страна (lowercase, англ.). |
| countries | georgia,uzbekistan | Список стран через запятую. Перекрывает country. |
| city | Москва | Город. Регистронезависимо. Значение должно совпадать с тем, как город хранится в БД (зависит от источника парсинга — для авто из Кореи это «Seoul», для русских — «Москва», и т.д.). |
| steering_side | left или right (или left,right) | Сторона руля. |
| min_year, max_year | 2018, 2026 | Диапазон годов. |
| min_price, max_price | 5000000, 10000000 | Цена в ₽ (всегда — фильтр работает по total_price_rub, итоговой с доставкой). |
| min_mileage, max_mileage | 1000, 160000 | Пробег, км. У max_mileage есть устаревший алиас max_engine (поддерживается ради старых ссылок). |
Все эти параметры — те же, что возвращает /v1/search/parse на api.proride.io, и пишутся в URL виджета без изменений. Совпадают с каноном ai-auto.tech.
| Параметр | Пример | Описание |
|---|---|---|
| drive_type | Полный | Привод. Значения из БД (RU): «Передний» / «Задний» / «Полный». |
| fuel_type | Бензин | Топливо. Из БД (RU): «Бензин» / «Дизель» / «Гибрид» / «Электро» / … |
| color | белый | Цвет кузова. Из БД (RU, lowercase). |
| interior_color | Black | Цвет салона. Канонические EN-значения: Black, Beige, Grey, … |
| doors | 5 | Число дверей (целое, обычно 2..6). |
| seats | 5 | Число посадочных мест. |
| owner_count | 1 | Число владельцев. |
| has_accident | true / false | «Битый» / «без ДТП». Принимает также 1/0, yes/no. |
| is_leasing | true / false | Лизинговое предложение. |
| min_engine_l, max_engine_l | 1.6, 3.0 | Объём двигателя в литрах (десятичная точка). Бэк конвертирует в см³ к колонке engine_volume. Не путать с max_engine — это устаревший алиас для пробега. |
| min_power, max_power | 100, 400 | Мощность, л.с. |
| profitability | profitable / neutral / unprofitable | Маркер выгодности относительно рынка. |
| seller_type | dealer / private / leasing | Тип продавца. |
| availability_type | in_stock / to_order | «В наличии» / «под заказ». |
| emission_standard | Euro 5 | Экологический стандарт. Колонка существует, данных в текущем датасете пока мало — фильтр работоспособен, но обычно возвращает пустую выдачу. |
Зарезервировано / not yet implemented: max_delivery_days — параметр принимается ради forward-compat, но колонки в БД пока нет, реальная фильтрация отключена.
Пример (базовые + расширенные):
https://maps.gumy.space/?brand=Toyota&model=Camry&transmission=Автомат&max_year=2026&min_price=5000000&max_price=10000000&countries=georgia,uzbekistan&steering_side=left,right&condition=used&has_accident=false&owner_count=1&min_engine_l=2.0&max_engine_l=3.5&min_power=150&profitability=profitable
Помимо точек на карте есть боковая панель со списком авто. На desktop — узкий рейл (340px) слева или справа, на мобиле — bottom-sheet, прибитый к нижней границе экрана и раскрываемый тапом по шапке.
Список тянется из /api/cars-list по тем же фильтрам, что и точки,
плюс bbox видимой области карты. При перетаскивании карты список перезагружается
автоматически (debounce 220 мс). Подгрузка следующих страниц — через
IntersectionObserver на сентинеле в конце.
| Параметр | Значения | Что делает |
|---|---|---|
| list | on, off | Показать/скрыть панель. По умолчанию — следует пресету chrome (см. таблицу выше). |
| list_side | left, right | Сторона рейла на desktop. На мобиле игнорируется — там всегда bottom-sheet. |
| sort | appeal_score, profit, total_price_rub, year, mileage, created_at, price | Поле сортировки. По умолчанию — appeal_score (по total_score: выше = лучшее предложение). Канонические имена совпадают с ai-auto.tech, proride.io и api.proride.io — один и тот же URL-параметр работает на всех четырёх сервисах. URL побеждает значение, сохранённое в localStorage браузера пользователя. |
| order | ASC, DESC | Направление сортировки. По умолчанию — DESC. Для sort=appeal_score и sort=profit направление зашито в логику и параметр order игнорируется (лучшие/выгоднее всегда сверху). |
Селектор сортировки в шапке списка использует короткие пресеты-токены
(popular, profit, price_desc, price_asc,
year_desc, mileage_asc), но в URL пишется всегда канонический
вид sort=…&order=… — чтобы ссылка из адресной строки работала
идентично на всех сайтах экосистемы.
Общий счётчик авто живёт в верхнем поиск-баре («99 733 авто») —
дублировать его в шапке списка не имеет смысла, так что в list-head
теперь только сортировка и кнопка «Все в области». Тап по точке на карте
«пинит» панель к этой точке (показывает только авто из этой координаты);
кнопка «Все в области» в шапке возвращает к bbox-режиму.
API всегда возвращает две цены в рублях:
price_rub — цена источника в стране продавца, конвертированная
бэкендом из локальной валюты по курсу.total_price_rub — итоговая цена с доставкой в РФ
(растаможка + логистика по дефолтному маршруту).Что показывать на карточке — задаётся URL-параметрами:
| Параметр | Значения | Что делает |
|---|---|---|
price_kind | total (по умолчанию) | source |
Какую цену показывать: итоговую с доставкой или цену источника без доставки. |
currency | rub (по умолчанию) | usd | source |
Валюта отображения.
|
Если по выбранному режиму цены нет (или это известная заглушка 1 000 000 ₽), фронт фолбечится на второе поле. Если ни одно не валидно — выводится прочерк «—».
Примеры:
https://maps.gumy.space/?currency=usd # цены в долларах, итоговые
https://maps.gumy.space/?price_kind=source # без доставки, ₽
https://maps.gumy.space/?price_kind=source¤cy=usd # без доставки, $
https://maps.gumy.space/?price_kind=source¤cy=source # цена источника в его валюте (₩, $, €, …)
Каталог-страница на отдельном домене (только список + карта, без поиска):
https://maps.gumy.space/?chrome=catalog
Каталог с фильтром (Toyota Camry, лучшее по рейтингу):
https://maps.gumy.space/?chrome=catalog&brand=Toyota&model=Camry
Boxеd-режим: список слева, поиск сверху, цена по возрастанию:
https://maps.gumy.space/?list=on&list_side=left&sort=total_price_rub&order=ASC
Можно ограничить выдачу кругом вокруг произвольной точки. Фильтр работает
на бэке: применяется к точкам на карте (/api/cars-geo), к списку
(/api/cars-list), к счётчикам и к попапу машин в точке
(/api/cars-at) — всё одной парой параметров.
| Параметр | Значения | Описание |
|---|---|---|
| near | lat,lng | Центр круга. Широта -90…90, долгота -180…180, через запятую без пробела. Пример: 41.7151,44.8271 — Тбилиси. |
| radius_km | число | Радиус в километрах. Допустимый диапазон 0.1…20015 (≈половина земного шара). Дробные допускаются: 2.5. |
Оба параметра обязательны вместе. Если задан только один — фильтр молча игнорируется (та же логика, что и у остальных URL-параметров: кривой ввод не должен ломать страницу).
Машины в радиусе 100 км вокруг Тбилиси:
https://maps.gumy.space/?near=41.7151,44.8271&radius_km=100
Toyota Camry в радиусе 500 км вокруг Москвы (комбинируется с любыми другими фильтрами):
https://maps.gumy.space/?brand=Toyota&model=Camry&near=55.7558,37.6173&radius_km=500
Каталог-режим, авто в 250 км от заданной точки, по возрастанию цены:
https://maps.gumy.space/?chrome=catalog&near=55.7558,37.6173&radius_km=250&sort=total_price_rub&order=ASC
Виджет «рядом с городом» (минимальный chrome, авто-подгон viewport):
https://maps.gumy.space/?chrome=minimal&near=43.2220,76.8512&radius_km=150
На бэке сначала отрезается прямоугольный bbox (быстро, по индексу lat/lng), затем точная отсечка по формуле гаверсинуса (R = 6371 км). На антимеридиане работает корректно — bbox разворачивается в две половины. На очень больших радиусах (когда круг покрывает все долготы) lng-pre-filter отключается, отсечку делает только haversine.
Маршрутизация по дорогам не учитывается — это геодезическое расстояние по большому кругу. Тот же подход, что у delivery-режима.
Активируется параметром mode=delivery. Карта рисует пунктирную линию
от города машины до города доставки и показывает банер сверху.
| Параметр | Тип | Описание |
|---|---|---|
| car_id | число | ID машины. Обязательно. |
| delivery_to | строка | Город назначения. Обязательно. |
| delivery_country | строка | Страна назначения, если есть города-омонимы. Опционально. |
Пример:
https://maps.gumy.space/?mode=delivery&car_id=12345&delivery_to=Moscow
В виджет-режиме (без UI):
https://maps.gumy.space/?mode=delivery&car_id=12345&delivery_to=Москва&chrome=none&theme=light
https://maps.gumy.space/
?brand=Toyota
&model=Camry
&transmission=Автомат
&body_type=Внедорожник
&max_year=2026
&min_price=5000000
&max_price=10000000
&countries=georgia,uzbekistan
&max_mileage=160000
&steering_side=left,right
&condition=used
&has_accident=false
&owner_count=1
&min_engine_l=2.0
&max_engine_l=3.5
&min_power=150
&profitability=profitable
&near=41.7151,44.8271
&radius_km=300
&sort=total_price_rub
&order=ASC
&theme=dark
&lang=en
&chrome=minimal
&clusters=off
&pins=on
&search=on
&filters=on
&count=on
&zoom=on
&attribution=on
&interactive=on
&auto_fit=on
Карта использует эти HTTP-эндпоинты. Их можно вызывать напрямую.
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/cars-geo | Точки + счётчики. Принимает все фильтры, в том числе near + radius_km. |
| GET | /api/cars-at?lat=&lng= | Машины в точке, постранично. Уважает near + radius_km — если конкретная точка вне круга, вернёт пусто. |
| GET | /api/cars-list?bbox=&sort=&order= | Список для сайдбара / bottom sheet. Принимает фильтры (включая near + radius_km), bbox видимой области, sort ∈ {appeal_score, profit, total_price_rub, year, mileage, created_at, price} (default appeal_score), order ∈ {ASC, DESC} (default DESC), плюс limit/offset для infinite scroll. Ответ содержит total — общее число авто под текущими фильтрами+bbox — и эхо параметров sort/order. Параметры совпадают с каноном ai-auto.tech. |
| GET | /api/locations[?country=] | Страны и города со счётчиками. |
| GET | /api/car/<id> | Одна машина с координатами. |
| GET | /api/route?car_id=&delivery_to= | Точки from/to для маршрута. |
| POST | /api/parse-search | Естественный запрос → фильтры. |
| GET | /api/health | Статус. |
attribution остаётся включённым.chrome= — можно смешивать в любых комбинациях.theme= побеждает только при первой загрузке.attribution=off допускается только если копирайт OSM показан где-то на host-странице (требование лицензии тайлов).price_kind и currency переключаются на «без доставки» и USD соответственно. Подробнее — раздел 4.2.