📍
Геокодирование
Адрес → координаты, reverse geocoding, autocomplete, batch (до 50 адресов), streaming NDJSON, async webhook.
🗺
Маршруты
Маршруты через точки, матрица расстояний N×M, изохроны зоны достижимости, encoded polyline.
🛣
Инфраструктура РФ
АПВГК (посты весового контроля), ФВФ-камеры, зоны контроля, поверки АРШИН/ГРСИ, реестр АСМАП.
💰
Платные дороги
М-11, М-12, ЦКАД, М-4 и другие. Тарифы по категориям ТС, расчёт стоимости проезда, ближайшие пункты.
⚠️
ДТП и аварийность
ДТП в радиусе (dtp-stat.ru), индекс опасности маршрута, кластеры аварийности на сетке.
🌦
Дорожная погода
Текущие условия и прогноз (Open-Meteo), риск гололёда/тумана/ветра, погода вдоль маршрута.
🏛
Субъекты РФ
Справочник 89+4 субъектов РФ с ОКАТО/ISO/ФО/часовыми поясами. Поиск по координатам и коду.
🔍
КЛАДР / Кадастр
Поиск адресов через КЛАДР-API (публичный), кадастровые данные Росреестра ПКК, иерархия адресов.
⚡
Кэш и Circuit Breaker
In-memory TTL или Redis. Circuit breaker для Nominatim. In-flight deduplication. Прогрев кэша при старте.
Использование
// Fastify-плагин — декоратор app.geo → GeoClient
import { geoPlugin, GeoClient } from '@portfolio/geo';
await app.register(geoPlugin, { baseUrl: 'https://geo-module.e-replika.ru' });
const results = await app.geo.geocode('Москва, Красная площадь');
// Или прямой HTTP-клиент (30+ методов)
const geo = new GeoClient({ baseUrl: 'https://geo-module.e-replika.ru' });
const address = await geo.reverse(55.7558, 37.6173);
const route = await geo.route({lat:55.75,lon:37.62}, {lat:59.93,lon:30.32});
const matrix = await geo.matrix(origins, destinations);
const region = await geo.regionByCoords(55.7558, 37.6173);
const risks = await geo.accidentsNear(55.7558, 37.6173, 1000);
geo_http_request_duration_seconds
histogram9 buckets
geo_geocode_requests_total
countertype+result
geo_cache_hits_total
counterby operation
geo_geocode_provider_latency
histogramnominatim
geo_circuit_breaker_state
gauge0/1/2
geo_provider_errors_total
counterby provider