# Геокодеры
## Что это такое?
**Геокодер** помогает определить координаты объекта по его адресу (прямой геокодинг) или, наоборот, установить адрес по координатам (обратный геокодинг)
**Пример:**
`1-я Тверская-Ямская улица, 29с1 --> [55.778315 37.589293]` -- прямой
`[55.767777 37.563952] --> Москва, улица 1905 года, 15` -- обратный
## Что есть сейчас
### Фронты
Используется в визардах для того, чтобы понять какие станции метро пробросить в заказ.
Используется прямой геокодер Яндекса.
### Система
Для вычисления различных расстояний "от и до" в препе, закаказе, между городами в попап карте метро (не уверен, что она еще работает).
Используются геокодеры Гугла и Яндекса. Так же гугловый сервис используется для рассчета рассстояния и времени в пути.
`Paddrs::geocoder` -- прямой геокодер.
`Paddrs::distance` -- расстояние и время в пути между точками
Примерное количество запросов к геокодеру Яндекса -- 6000 в день.

## Почему не используется какой-то один
При геокодировании Системе преобразует исходный адрес.
Это не подходило Фронту. Так же два независимых гекодера позволяют не выходить за лимиты бесплатного использования.
## Чем мы пользуемся
**Яндекс**
- Бесплатные лимиты -- 25000/сутки (геокодер + маршрутизатор)
- [Платные лимиты](https://tech.yandex.ru/maps/commercial/doc/concepts/jsapi-geocoder-docpage/#jsapi-geocoder__tariffs)
**Гуугл**
- Бесплатные лимиты -- 2500/сутки (геокодер, client side + server side)
- [Платные лимиты](https://developers.google.com/maps/documentation/geocoding/usage-and-billing)
**Что еще есть**
- https://dadata.ru/ -- от 10 копеек за запрос. Есть нормализация адреса. Фиас + Кладр + ОСМ
- Различные библиотеки и проекты на основе ОСМ. Основная сложность - они плохо умеют работать с "кривыми" адресами типа `березовой рощи 2-й проезд`. То есть не умеют приводить адреса в канонический вид.
- https://github.com/komoot/photon -- на основе эластика
- https://wiki.openstreetmap.org/wiki/Nominatim