Документация виджета карты maps.gumy.space

Карта встраивается на сайт через iframe. Управление через URL-параметры. Главный URL: https://maps.gumy.space/


1. Быстрый старт

Простейший 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>

2. Параметры внешнего вида

ПараметрЗначенияПо умолчаниюЧто делает
themelight, darklightТема UI. Внутри карты есть кнопка-переключатель в модалке фильтров; выбор сохраняется в localStorage.
langru, enruЯзык интерфейса.
chromefull, minimal, none, catalogfullПресет UI: full — весь UI; minimal — только кнопка фильтров; none — чистая карта; catalog — карта + список авто справа, без поля поиска. Каждый отдельный параметр ниже переопределяет пресет.
clusterson, offonГруппировать ли точки в кластеры.
modebrowse, deliverybrowseРежим карты.
accentHEX-цвет: 2563eb, %232563eb, f50Основной цвет UI и пинов карты. Применяется к обеим темам, если не задан accent_dark. Принимаются 3- и 6-значные HEX, с # или без (URL-encoded %23). Из значения автоматически выводятся оттенки для hover/active и кластеров карты.
accent_darkHEX-цвет=accentПереопределяет основной цвет только для тёмной темы. Удобно, когда у host-сайта разные цвета для light/dark.

2.1 Тонкое управление UI (для встраивания)

Каждый параметр on|off (синонимы: 1|0, true|false, yes|no). Дефолт берётся из пресета chrome=; параметр явно переопределяет пресет. Это позволяет смешивать: например chrome=none&search=on — чистая карта плюс поиск.

ПараметрПо умолчанию (full / minimal / none / catalog)Что прячет / включает
pinson / on / on / onМаркеры авто на карте. off — карта без точек, но счётчик и фильтры работают (например для виджета-обёртки на сайте партнёра).
searchon / off / off / offПоле поиска + микрофон + кнопка «Найти».
filterson / on / off / offКнопка фильтров, чипсы активных фильтров, модалка. В catalog по умолчанию off — фильтры идут через URL хост-страницы; включить обратно: filters=on.
counton / off / off / offСчётчик «найдено N авто» в правой части строки поиска.
zoomon / off / off / onКнопки зума MapLibre справа сверху.
attributionon / on / on / onКопирайт OSM в правом нижнем углу. Прятать только если копирайт показан на host-странице — этого требуют условия использования тайлов.
interactiveon / on / on / onМожно ли двигать карту, зумить колесом, перетаскивать. off — карта-картинка.
auto_fiton / on / on / onАвто-подгон viewport под текущие фильтры (Грузия → приблизит Грузию, нет фильтров → отдалит до мира). off — карта остаётся на исходном центре.
liston / off / off / onБоковая панель со списком авто (desktop) / bottom-sheet (mobile). Подгружается по фильтрам + видимой области карты, с сортировкой и infinite scroll.
list_sideleft / left / left / rightСторона рейла со списком на desktop: left или right. Мобилка игнорирует — там всегда bottom-sheet.
sortappeal_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.
orderDESCНаправление сортировки: ASC или DESC. Игнорируется для appeal_score и profit — у них фиксированный порядок.

2.2 Примеры комбинаций

Только карта без всего 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

3. Фильтры машин

Все фильтры передаются как URL-параметры.

3.1 Базовые фильтры

ПараметрПримерОписание
brandToyotaМарка. Регистронезависимо.
modelCamryМодель. Регистронезависимо.
vehicle_typecarТип ТС. car / motorcycle / jet_ski / atv / snowmobile / boat / yacht / aircraft / helicopter / rv / truck / construction.
body_typeСеданТип кузова. Реальные значения берутся из БД (RU).
transmissionАвтоматКоробка. Реальные значения из БД (RU).
conditionused / newС пробегом / новые.
countrygeorgiaОдна страна (lowercase, англ.).
countriesgeorgia,uzbekistanСписок стран через запятую. Перекрывает country.
cityМоскваГород. Регистронезависимо. Значение должно совпадать с тем, как город хранится в БД (зависит от источника парсинга — для авто из Кореи это «Seoul», для русских — «Москва», и т.д.).
steering_sideleft или right (или left,right)Сторона руля.
min_year, max_year2018, 2026Диапазон годов.
min_price, max_price5000000, 10000000Цена в ₽ (всегда — фильтр работает по total_price_rub, итоговой с доставкой).
min_mileage, max_mileage1000, 160000Пробег, км. У max_mileage есть устаревший алиас max_engine (поддерживается ради старых ссылок).

3.2 Расширенные фильтры

Все эти параметры — те же, что возвращает /v1/search/parse на api.proride.io, и пишутся в URL виджета без изменений. Совпадают с каноном ai-auto.tech.

ПараметрПримерОписание
drive_typeПолныйПривод. Значения из БД (RU): «Передний» / «Задний» / «Полный».
fuel_typeБензинТопливо. Из БД (RU): «Бензин» / «Дизель» / «Гибрид» / «Электро» / …
colorбелыйЦвет кузова. Из БД (RU, lowercase).
interior_colorBlackЦвет салона. Канонические EN-значения: Black, Beige, Grey, …
doors5Число дверей (целое, обычно 2..6).
seats5Число посадочных мест.
owner_count1Число владельцев.
has_accidenttrue / false«Битый» / «без ДТП». Принимает также 1/0, yes/no.
is_leasingtrue / falseЛизинговое предложение.
min_engine_l, max_engine_l1.6, 3.0Объём двигателя в литрах (десятичная точка). Бэк конвертирует в см³ к колонке engine_volume. Не путать с max_engine — это устаревший алиас для пробега.
min_power, max_power100, 400Мощность, л.с.
profitabilityprofitable / neutral / unprofitableМаркер выгодности относительно рынка.
seller_typedealer / private / leasingТип продавца.
availability_typein_stock / to_order«В наличии» / «под заказ».
emission_standardEuro 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

4. Список авто (рейл / bottom-sheet)

Помимо точек на карте есть боковая панель со списком авто. На desktop — узкий рейл (340px) слева или справа, на мобиле — bottom-sheet, прибитый к нижней границе экрана и раскрываемый тапом по шапке.

Список тянется из /api/cars-list по тем же фильтрам, что и точки, плюс bbox видимой области карты. При перетаскивании карты список перезагружается автоматически (debounce 220 мс). Подгрузка следующих страниц — через IntersectionObserver на сентинеле в конце.

4.1 Управление списком

ПараметрЗначенияЧто делает
liston, offПоказать/скрыть панель. По умолчанию — следует пресету chrome (см. таблицу выше).
list_sideleft, rightСторона рейла на desktop. На мобиле игнорируется — там всегда bottom-sheet.
sortappeal_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 браузера пользователя.
orderASC, 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-режиму.

4.2 Цена

API всегда возвращает две цены в рублях:

Что показывать на карточке — задаётся URL-параметрами:

ПараметрЗначенияЧто делает
price_kindtotal (по умолчанию) | source Какую цену показывать: итоговую с доставкой или цену источника без доставки.
currencyrub (по умолчанию) | usd | source Валюта отображения.
  • rub — рубли (используется price_rub или total_price_rub).
  • usd — доллары, считаются из *_rub по курсу USD_RUB_RATE (env-переменная на бэке, по умолчанию ~90).
  • source — цена в валюте источника (KRW для корейских машин, USD для американских и т.д.) — берутся «сырые» поля price и currency из API без конвертации. Имеет смысл только в паре с price_kind=source — для итоговой цены с доставкой нет «исходной» валюты, поэтому в этом сочетании фронт молча падает обратно к рублям.
Это просто лейбл — фильтры по цене всё равно идут в рублях.

Если по выбранному режиму цены нет (или это известная заглушка 1 000 000 ₽), фронт фолбечится на второе поле. Если ни одно не валидно — выводится прочерк «—».

Примеры:

https://maps.gumy.space/?currency=usd                              # цены в долларах, итоговые
https://maps.gumy.space/?price_kind=source                         # без доставки, ₽
https://maps.gumy.space/?price_kind=source&currency=usd            # без доставки, $
https://maps.gumy.space/?price_kind=source&currency=source         # цена источника в его валюте (₩, $, €, …)

4.3 Примеры

Каталог-страница на отдельном домене (только список + карта, без поиска):

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

5. Поиск по радиусу

Можно ограничить выдачу кругом вокруг произвольной точки. Фильтр работает на бэке: применяется к точкам на карте (/api/cars-geo), к списку (/api/cars-list), к счётчикам и к попапу машин в точке (/api/cars-at) — всё одной парой параметров.

ПараметрЗначенияОписание
nearlat,lngЦентр круга. Широта -90…90, долгота -180…180, через запятую без пробела. Пример: 41.7151,44.8271 — Тбилиси.
radius_kmчислоРадиус в километрах. Допустимый диапазон 0.1…20015 (≈половина земного шара). Дробные допускаются: 2.5.

Оба параметра обязательны вместе. Если задан только один — фильтр молча игнорируется (та же логика, что и у остальных URL-параметров: кривой ввод не должен ломать страницу).

5.1 Примеры

Машины в радиусе 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

5.2 Как считается

На бэке сначала отрезается прямоугольный bbox (быстро, по индексу lat/lng), затем точная отсечка по формуле гаверсинуса (R = 6371 км). На антимеридиане работает корректно — bbox разворачивается в две половины. На очень больших радиусах (когда круг покрывает все долготы) lng-pre-filter отключается, отсечку делает только haversine.

Маршрутизация по дорогам не учитывается — это геодезическое расстояние по большому кругу. Тот же подход, что у delivery-режима.


6. Режим доставки

Активируется параметром 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

7. Полный пример

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

8. API эндпоинты

Карта использует эти 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Статус.

9. Замечания