Подсказка адресов: прощает опечатки, но не подставляет молча
Вы вводите адрес как получилось — с опечаткой, в спешке, не на той раскладке. Приложение разбирает его по слоям и либо уверенно даёт координаты, либо предлагает 2–3 варианта на выбор. Но никогда не решает за вас молча.
Диспетчер продиктовал адрес на бегу, вы записали как услышали — «Тверскя, 12». Обычное поле ввода на это отвечает холодным «ничего не найдено», и вы стоите в тупике: то ли улицы нет, то ли вы опечатались. А заказ ждёт, и решать надо сейчас.
Ввод адреса — это первая дверь ко всему остальному: без координат нет ни расчёта дороги, ни вердикта. Поэтому эта дверь не должна захлопываться от одной опечатки. Но и распахиваться абы куда — тоже: подставить не тот дом молча значит отправить человека за десять километров не туда.
Что делает
Вы вводите адрес в свободной форме — так, как удобно. Приложение разбирает его несколькими слоями подряд и на выходе выдаёт одно из двух:
- Уверенный ответ — если приложение точно знает, что это за точка, оно сразу возвращает её координаты.
- Список кандидатов — если полной уверенности нет, вы получаете 2–3 варианта и выбираете нужный одним тапом.
Третьего — тихой подстановки наугад — не бывает. Это и есть главный принцип.
Адрес никогда не подставляется молча, если приложение не уверено. В спорной ситуации выбор остаётся за человеком.
Что за этим стоит
За коротким полем ввода — цепочка слоёв, каждый следующий включается, только если предыдущий не дал уверенного ответа. Порядок продуман от самого точного к самому терпеливому:
- Координаты прямо в тексте. Если вы вставили пару чисел вроде «55.75, 37.61» — это уже готовые координаты, разбирать нечего.
- Nominatim, точное совпадение. Геокодер по картам OpenStreetMap ищет ровно то, что вы написали. Ответ принимается за истину только при высокой уверенности: значимость ≥ 0,5 и обязательно есть номер дома. Улица без дома — это ещё не точка.
- DaData. Слой, который прощает человеческое: опечатки, пропущенные буквы и даже неправильную раскладку клавиатуры («Ndthcrfz» вместо «Тверская»). Он же аккуратно достраивает адрес до полного.
- Поиск по улицам OSM в своей базе. Работает офлайн, без интернета вообще: улицы заранее загружены к нам, а нечёткое сравнение (pg_trgm в PostgreSQL) находит нужную даже с парой лишних букв.
- Слабый ответ Nominatim — в кандидаты. Если геокодер что-то нашёл, но без нужной уверенности, это не выдаётся за точный адрес, а уходит в список на выбор.
Про лимит и офлайн
У DaData есть суточный лимит — 300 запросов на пользователя. Это не жадность, а защита: у всего аккаунта общий бесплатный лимит 10 000 запросов в сутки, и без персонального потолка один активный человек выбрал бы его на всех. Когда ваши 300 исчерпаны, приложение тихо переключается на офлайн-слой поиска по улицам OSM — вы этого даже не замечаете, адрес по-прежнему находится.
Почему это важно
Неточный ввод перестаёт быть тупиком. Опечатка, спешка, чужая диктовка — всё это приложение разбирает и доводит до адреса, а не отфутболивает сообщением «ничего не найдено». Дверь ко всем расчётам открывается даже с корявого ввода.
Но открывается ровно настолько, насколько приложение уверено. Там, где уверенности нет, оно не решает за вас — предлагает выбор. Куда ехать — по-прежнему ваше решение и ваша ответственность, а приложение лишь снимает с этого решения рутину и не даёт молча увезти вас не туда.
Как устроена подсказка адресов
- Слои по порядку: координаты в тексте → Nominatim (точно) → DaData → улицы OSM (офлайн) → слабый Nominatim в кандидаты.
- Порог уверенности Nominatim: значимость ≥ 0,5 И наличие номера дома — иначе ответ уходит в кандидаты, а не в подстановку.
- Кандидатов на выбор — не больше трёх, каждый выбирается одним тапом.
- Лимит DaData — 300 запросов в сутки на пользователя; защищает общий бесплатный лимит аккаунта в 10 000. При исчерпании — тихий переход на офлайн-слой улиц OSM.
- Реализовано в address_suggest_service.py, dadata_service.py, geocoding_service.py, repositories_osm_streets.py; роутер address.py, экран AddressTemplates.kt.
Проверь любой заказ за секунду
Установи приложение и посмотри честный вердикт по своему следующему адресу — стоит ехать или нет.
Скачать для Android Android 8+ · установка из файла · бесплатно