Geo-LK — когда Excel захотел узнать, где он находится.
Иногда задача звучит просто:
«Есть список адресов в Excel. Нужно получить по ним координаты».
На первый взгляд — ничего сложного. Адрес есть, карта есть, интернет есть. Но, как обычно бывает в IT, между фразой «просто получить координаты» и готовым результатом находится небольшая экспедиция через API, Excel, JSON, потоки, лимиты запросов и загадочные сообщения вроде:
403 Forbidden
Именно так появилась программа Geo-LK — небольшое настольное приложение для автоматического определения геолокации по списку адресов.
Какая была задача
Имелся Excel-файл со списком адресов.
Нужно было для каждой строки определить:
- широту;
- долготу;
- статус обработки.
То есть на входе обычная таблица:
| Адрес |
|---|
| Россия, Калуга, ул. Ленина, дом 1 |
| Россия, Калужская область, Крайний проезд, дом 1 |
| Россия, где-то там, почти рядом |
А на выходе хотелось получить уже более умную таблицу:
| Адрес | Широта | Долгота | Статус |
|---|---|---|---|
| Россия, Калуга, ул. Ленина, дом 1 | 54.513 | 36.261 | ok |
Чтобы потом эти данные можно было использовать для карт, отчетов, маршрутов, анализа или просто для того, чтобы Excel наконец-то перестал быть набором текстовых строк и стал немного географом.
Что получилось
Получилась программа с простым интерфейсом:
- выбираем входной Excel-файл;
- указываем, куда сохранить итоговый файл;
- вставляем API-ключ Яндекс Геокодера;
- выбираем столбец с адресами;
- нажимаем «Начать обработку»;
- наблюдаем, как адреса превращаются в координаты.
Программа читает Excel-файл, берет адрес из выбранного столбца, отправляет запрос в Яндекс Геокодер и получает координаты.
Если адрес найден — записывает широту и долготу.
Если не найден — честно пишет not_found.
Если адрес пустой — не делает вид, что всё нормально, а пишет empty_address.
Если Яндекс недоволен ключом — тоже сообщает об ошибке, а не уходит молча в цифровой лес.
Что умеет программа
1. Работать с Excel
Программа открывает файлы формата Excel и автоматически определяет столбцы.
Если в файле есть столбец Адрес, программа старается выбрать его сама.
Это удобно, потому что пользователь не обязан объяснять компьютеру очевидное по пять раз. Хотя компьютер, конечно, всё равно иногда делает вид, что не понял.
2. Получать координаты через Яндекс Геокодер
Для каждого адреса программа обращается к API Яндекс Геокодера и получает координаты.
Технически происходит примерно следующее:
- Берется адрес из Excel.
- Формируется HTTP-запрос.
- Яндекс возвращает JSON.
- Программа достает оттуда координаты.
- Координаты записываются обратно в итоговую таблицу.
То есть программа выполняет роль переводчика между человеческим языком:
«Калуга, Крайний проезд, дом 1»
и машинным:
54.XXXXXX, 36.XXXXXX
3. Не зависать во время работы
Обработка адресов запускается в отдельном потоке.
Это значит, что интерфейс не превращается в замороженную картинку с философским статусом «Не отвечает».
Пользователь видит:
- текущий статус;
- прогресс выполнения;
- журнал обработки;
- возможность остановить процесс.
Пока программа работает, она не блокирует окно. Это маленькая, но важная победа над классическим поведением приложений «я думаю, не трогайте меня».
4. Вести журнал
В программе есть журнал, куда выводится ход обработки:
- сколько строк найдено;
- какой адрес сейчас обрабатывается;
- где возникла ошибка;
- когда файл сохранен.
Журнал нужен не только для красоты. Он помогает понять, что происходит внутри программы, особенно когда адресов много, а терпения мало.
5. Сохранять результат в новый Excel-файл
Исходный файл не портится.
Результат сохраняется в отдельный Excel-файл.
К исходным данным добавляются новые столбцы:
Широта;Долгота;Статус.
Это удобно: можно сравнить исходные адреса и результат, отфильтровать ошибки, проверить спорные места и продолжить работу уже с координатами.
Немного технической кухни
Программа написана на Python с использованием:
tkinter— для графического интерфейса;pandas— для чтения и записи Excel;requests— для обращения к Яндекс Геокодеру;threading— чтобы интерфейс не зависал;queue— чтобы поток обработки аккуратно передавал сообщения в интерфейс.
Получился такой небольшой технологический бутерброд: сверху кнопочки, снизу API, посередине Excel, а где-то рядом Яндекс решает, существует ли указанный адрес в реальности.
Почему не просто вручную через карту?
Можно, конечно, открыть Яндекс Карты, скопировать адрес, найти точку, выписать координаты, перейти к следующему адресу…
Если адресов пять — это еще терпимо.
Если пятьсот — это уже не работа, а наказание за грехи предыдущего администратора.
Программа автоматизирует этот процесс. Пользователь занимается файлом, а не монотонным копированием адресов туда-сюда.
Что может пойти не так
Как и любая программа, которая общается с внешним API, Geo-LK иногда сталкивается с реальностью.
Например:
Неверный API-ключ
Если ключ неправильный или не подключен к Геокодеру, Яндекс может ответить:
403 Forbidden
или:
Invalid api key
Это не значит, что программа сломалась. Это значит, что Яндекс посмотрел на ключ и сказал:
«Я вас не знаю. Вы кто такие?»
Адрес не найден
Если адрес написан неточно, слишком кратко или существует только в воспоминаниях отдела продаж, геокодер может вернуть not_found.
Лимиты запросов
У API есть ограничения. Поэтому в программе есть пауза между запросами.
По умолчанию — 0.3 секунды.
Это маленькая вежливость в сторону сервера: не стучать в дверь 1000 раз в секунду и не удивляться, что дверь закрыли.
Для кого эта программа
Программа подойдет, если нужно:
- обработать список адресов;
- добавить координаты в Excel;
- подготовить данные для карты;
- проверить адресную базу;
- сделать географическую аналитику;
- не тратить вечер на ручной поиск координат.
Особенно полезна она в ситуациях, когда адресов много, сроки близко, а фраза «да там быстро» уже прозвучала.
Итог
Geo-LK — это небольшая утилита, которая решает конкретную практическую задачу:
берет адреса из Excel и добавляет к ним координаты.
Без сложных настроек, без лишней магии, без необходимости каждый адрес искать вручную.
На входе — таблица с адресами.
На выходе — таблица с широтой, долготой и статусом обработки.
А где-то между ними Python, Яндекс Геокодер и немного технического юмора, потому что без него автоматизация превращается в бухгалтерию с кнопками.