Skip to content
Для ИИ NEW Мои токены Поддержка
Для подтверждения действия введите пароль
Чтобы продолжить, введите пароль для пользователя
For LLMs and AI agents: canonical Markdown source of this documentation page (plain-text .md — fetch this URL to use the page content in tools and RAG). For LLMs and AI agents: developers documentation index in llms.txt format — ordered list of key documentation URLs for the developers section.

Расчёт расстояний

Сервис «Расчёт расстояний» помогает построить точные маршруты с учётом особенностей грузового транспорта, а также актуальных дорожных условий и ограничений: паромы, зимники и платные дороги. Сервис позволяет определять расстояния между населёнными пунктами и координатами, а также исключать из маршрута определённые регионы и страны.

Доступ к сервису

Доступ к API Расчёта расстояний платный, предоставляется по запросу.

Чтобы узнать условия использования, свяжитесь с отделом продаж.
Email: boards@ati.su
Телефон: +7-812-602-01-15

Методы получения расстояния и маршрута

Расчёт расстояний и построение маршрутов осуществляются от/до точки, которые можно указать как node_id (идентификатор населённого пункта), geo_point (координата). Если указано оба варианта, используется только координата.

Авторизация
Получение расстояния (платный)
post /gw/gis-rm/v1/distance
Параметры
Параметров нет
Запрос
Модель
{...}

Фильтр маршрута

}
Пример запроса
curl 'https://api.ati.su/gw/gis-rm/v1/distance' \
-X 'POST' \
-H 'Authorization: Bearer {authorizationToken}' \
-H 'Content-Type: application/json' \
--data-raw '{"nodes":[{"node_id":1,"geo_point":{"lat":59.8913,"lon":30.3727}}],"options":{"within_country":true,"exclude_mkad":false,"exclude_ukraine":true,"allow_ferry":true,"allow_winter_road":false,"allow_toll_road":true,"strategy":1,"customs_delay":120,"ferry_delay":120,"max_speed":110,"weight":10000}}'
Ответ
200 Расстояние и время в пути. status: success — маршрут построен с учётом всех ограничений, without_restrictions — только без ограничений
Модель
{...}

Расстояние в метрах

status: string

success - нашли маршрут по всем параметрам фильтра. without_restrictions - не нашли маршрут по всем параметрам фильтра, но нашли маршрут без ограничений

platon_rate: double

Стоимость проезда по Платону в рублях РФ

read only
platon_distance: int32

Общее расстояние, преодоленное по Платону в метрах

toll_distance: int32

Общее расстояние платных дорог в метрах

total_distance: int32

Расстояние в метрах

read only
travel_time: int32

Время в пути в секундах с учетом параметров и задержек

}
Пример
{...}
"status":"success",
"platon_distance":3906,
"toll_distance":677660,
"travel_time":26168
}
400 Тело запроса не прошло валидацию, список ошибок — в error_list
Модель
{...}

Ошибки валидации тела запроса

error: string

Текстовый код ошибки, всегда validation_errors

read only
reason: string

Человекочитаемое описание ошибки

read only
details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"validation_errors",
"reason":"Произошли ошибки валидации",
"error_list":[...]
{...}
"error":"not_enough_points",
"reason":"nodes: маршрут должен содержать минимум 2 точки"
}
]
}
403 Нет активной лицензии на платный доступ (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Нет активных лицензий."
}
404 Маршрут не найден (route_not_found) или не найдена одна из точек маршрута (point_not_found)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"route_not_found",
"reason":"Маршрут не найден"
}
429 Превышен дневной лимит запросов по лицензии (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Превышен дневной лимит."
}
503 Сервис перегружен (too_many_requests) или построение маршрута не уложилось в таймаут (request_timeout)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"too_many_requests",
"reason":"Слишком много запросов"
}
Авторизация
Получение маршрута (платный)
post /gw/gis-rm/v1/route-info
Параметры
Параметр Тип Расположение Описание
visual-route boolean query
Вернуть в ответе поле `visual_route` — координаты маршрута для отрисовки на карте (обрезаются по `map_bounds`, если он передан). По умолчанию `false` Пример: true
route-info boolean query
Вернуть в ответе поле `route_info` — сегменты маршрута с попутными населёнными пунктами, названиями трасс и расстояниями по типам дорог. По умолчанию `false` Пример: true
Запрос
Модель
{...}

Фильтр маршрута

exclude_regions: [int32]

Не заезжать в указанные регионы

exclude_countries: [int32]

Не заезжать в указанные страны

}
Пример запроса
curl 'https://api.ati.su/gw/gis-rm/v1/route-info' \
-X 'POST' \
-H 'Authorization: Bearer {authorizationToken}' \
-H 'Content-Type: application/json' \
--data-raw '{"options":{"within_country":true,"exclude_mkad":false,"exclude_ukraine":true,"allow_ferry":true,"allow_winter_road":false,"allow_toll_road":true,"strategy":1,"customs_delay":120,"ferry_delay":120,"max_speed":110,"weight":10000},"map_bounds":{"north_east":{"lat":60.866312,"lon":44.121093},"south_west":{"lat":54.591162,"lon":23.192138}},"nodes":[{"node_id":1,"geo_point":{"lat":59.8913,"lon":30.3727},"type":1}],"exclude_regions":[0],"exclude_countries":[0]}'
Ответ
200 Маршрут: расстояния и время в пути, при visual-route=true — visual_route, при route-info=true — route_info. status: success или without_restrictions
Модель
{...}

Маршрут: итоговые расстояния и время в пути, а также, по запросу, попутные пункты и координаты маршрута

status*: string

success - нашли маршрут по всем параметрам фильтра. without_restrictions - не нашли маршрут по всем параметрам фильтра, но нашли маршрут без ограничений

platon_rate*: double

Стоимость проезда по Платону в рублях РФ

platon_distance*: int32

Общее расстояние, преодоленное по Платону в метрах

toll_distance*: int32

Общее расстояние платных дорог в метрах

total_distance*: int32

Общее расстояние в метрах

travel_time*: int32

Время в пути в секундах с учетом параметров и задержек

}
Пример
{...}
"route_info":{},
"visual_route":{...},
"segments":[...]
{...}
"fare_visualization_type":4,
"geo_points":[...],
[...]
{...}
"lat":59.875595,
"lon":30.298382
}
]
],
"distance":8254
}
]
},
"status":"success",
"platon_rate":5.19,
"platon_distance":3906,
"toll_distance":677660,
"total_distance":707655,
"travel_time":26168
}
400 Тело запроса не прошло валидацию, список ошибок — в error_list
Модель
{...}

Ошибки валидации тела запроса

error: string

Текстовый код ошибки, всегда validation_errors

read only
reason: string

Человекочитаемое описание ошибки

read only
details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"validation_errors",
"reason":"Произошли ошибки валидации",
"error_list":[...]
{...}
"error":"argument_out_of_range",
"reason":"options.max_speed: значение должно быть в диапазоне от 30 до 150"
}
]
}
403 Нет активной лицензии на платный доступ (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Нет активных лицензий."
}
404 Маршрут не найден (route_not_found) или не найдена одна из точек маршрута (point_not_found)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"route_not_found",
"reason":"Маршрут не найден"
}
429 Превышен дневной лимит запросов по лицензии (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Превышен дневной лимит."
}
503 Сервис перегружен (too_many_requests) или построение маршрута не уложилось в таймаут (request_timeout)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"too_many_requests",
"reason":"Слишком много запросов"
}

Методы получения ближайших населённых пунктов с расстоянием по дорогам

Авторизация
Получение ближайших населённых пунктов с расстоянием по дорогам (платный)
post /gw/gis-rm/v1/nearest-cities/with-roads-distance
Параметры
Параметров нет
Запрос
Модель
{...}

Параметры поиска ближайших населённых пунктов с расстоянием по дорогам

radius: int32
>=1000 and <= 300000

Радиус поиска в метрах

Значение по умолчанию: 200000 Максимальное значение: 300000

cities_count: int32
>=1 and <= 20

Количество населённых пунктов в выдаче

Значение по умолчанию: 5 Максимальное значение: 20

large_cities_count: int32
>=0 and <= 20

Количество крупных населённых пунктов в выдаче (население от 100 000 человек)

Значение по умолчанию: 3 Максимальное значение: 20

}
Пример запроса
curl 'https://api.ati.su/gw/gis-rm/v1/nearest-cities/with-roads-distance' \
-X 'POST' \
-H 'Authorization: Bearer {authorizationToken}' \
-H 'Content-Type: application/json' \
--data-raw '{"start_point":{"node_id":1,"geo_point":{"lat":59.8913,"lon":30.3727}},"radius":200000,"cities_count":5,"large_cities_count":3}'
Ответ
200 Ближайшие населённые пункты с расстоянием и временем в пути по дорогам
Модель
[{...}]

Информация о ближайшем населённом пункте

city_id: int32

Идентификатор населённого пункта

distance: int32

Расстояние до населённого пункта по дорогам в метрах

time: int32

Время в пути до населённого пункта в секундах

}]
Пример
[...]
{...}
"city_id":19206,
"distance":14162,
"time":1065
}
]
400 Тело запроса не прошло валидацию, список ошибок — в error_list
Модель
{...}

Ошибки валидации тела запроса

error: string

Текстовый код ошибки, всегда validation_errors

read only
reason: string

Человекочитаемое описание ошибки

read only
details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"validation_errors",
"reason":"Произошли ошибки валидации",
"error_list":[...]
{...}
"error":"argument_out_of_range",
"reason":"radius: значение должно быть в диапазоне от 1 000 до 300 000"
}
]
}
403 Нет активной лицензии на платный доступ (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Нет активных лицензий."
}
429 Превышен дневной лимит запросов по лицензии (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Превышен дневной лимит."
}
503 Сервис перегружен, повторите запрос позже (too_many_requests)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"too_many_requests",
"reason":"Слишком много запросов"
}

Метод получения всех населённых пунктов, до которых можно доехать по дорогам, не превышая заданное расстояние

Авторизация
Поиск в радиусе. Получение всех населённых пунктов, до которых можно доехать по дорогам, не превышая заданное расстояние (платный) Первый элемент ответа — исходный населённый пункт `city_id` с расстоянием `0`. Остальные — населённые пункты из списка `cities_key` в пределах `radius`; порядок элементов не гарантируется.
post /gw/gis-rm/v1/cities-in-radius
Параметры
Параметров нет
Запрос
Модель
{...}

Параметры поиска населённых пунктов, до которых можно доехать по дорогам в пределах радиуса

city_id*: int32

Идентификатор населённого пункта

cities_key*: string

Ключ списка населённых пунктов для дополнительной фильтрации

within_country: boolean

Искать населённые пункты только внутри страны

Значение по умолчанию: true

limit: int32
>=0 and <= 10000

Максимальное количество результатов

Минимальное значение: 0 Максимальное значение: 10000 Значение по умолчанию: 0 без лимита

radius*: int32
>=1000 and <= 300000

Максимальное расстояние в метрах

Минимальное значение: 1 000 Максимальное значение: 300 000

}
Пример запроса
curl 'https://api.ati.su/gw/gis-rm/v1/cities-in-radius' \
-X 'POST' \
-H 'Authorization: Bearer {authorizationToken}' \
-H 'Content-Type: application/json' \
--data-raw '{"city_id":1,"cities_key":"active-cities","within_country":true,"limit":10,"radius":300000}'
Ответ
200 Населённые пункты в радиусе; первый элемент — исходный населённый пункт с расстоянием 0 (если его нет в графе дорог, в ответе только он)
Модель
[{...}]

Населённый пункт в радиусе и расстояние до него по дорогам.
Поля имеют короткие имена: c — идентификатор населённого пункта, d — расстояние в метрах

c: int32

Идентификатор населённого пункта (поле c)

d: int32

Расстояние до населённого пункта по дорогам в метрах (поле d)

}]
Пример
[...]
{...}
"c":30447,
"d":14827
}
]
400 Тело запроса не прошло валидацию, список ошибок — в error_list
Модель
{...}

Ошибки валидации тела запроса

error: string

Текстовый код ошибки, всегда validation_errors

read only
reason: string

Человекочитаемое описание ошибки

read only
details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"validation_errors",
"reason":"Произошли ошибки валидации",
"error_list":[...]
{...}
"error":"invalid_cities_key",
"reason":"cities_key: Указан невалидный ключ для дополнительной фильтрации населённых пунктов"
}
]
}
403 Нет активной лицензии на платный доступ (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Нет активных лицензий."
}
429 Превышен дневной лимит запросов по лицензии (access_denied)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"access_denied",
"reason":"Превышен дневной лимит."
}
503 Сервис перегружен, повторите запрос позже (too_many_requests)
Модель
{...}

Ошибка выполнения запроса

error: string

Текстовый код ошибки

reason: string

Человекочитаемое описание ошибки

details: null,object

Дополнительная информация об ошибке. Поле передаётся, только если заполнено

}
Пример
{...}
"error":"too_many_requests",
"reason":"Слишком много запросов"
}

Устаревший веб сервис