Периодически возникает задача определения района города по адресу (например, для распределения заказов между курьерами). Под районом подразумевается многоугольник, описанный координатами вершин. Рассмотрим пример решения данной задачи для г. Иркутска (для другого города нужно изменить координаты в макетах и отборы в запросе), конфигурация "Библиотека стандартных подсистем" редакции 2.4 (режим совместимости "Не использовать", тонкий клиент) с использованием API Яндекс карт. Следует отметить, что в данной конфигурации (как и в большинстве типовых "нового" поколения) используется ФИАС.
Для удобства предоставим пользователю возможность указывать районы прямо на карте:
(1 - создание нового многоугольника, 2 - заполнение таблицы координат вершин по данным на карте).
Теперь нужно определиться с тем, как именно определять координаты по адресу - возможны следующие варианты: геокодирование адреса каждого дома, геокодирование родительских объектов (улиц, населенных пунктов и т.д.). Реализовать первый вариант можно с помощью сервиса Dadata.ru. Для второго варианта в качестве координаты можно брать середину объекта и уточнять при необходимости диапазоном номеров домов, при этом следует иметь ввиду сложные по структуре улицы. По точности оба варианта имеют погрешности: для дома - ошибки задания номера, неактуальность базы, ошибки геокодирования; для улиц - при сложной структуре часть домов может попадать в разные районы. Реализуем второй вариант - составим текстовое представление адреса (без домов) и получим для каждого координаты середины:
Полученный результат нужно проверить (что реально для такого количества улиц). В случае задания нескольких районов для одной улицы диапазон домов вводится без учета дробей и литер. Теперь при заполнении адреса можно определить район:
Аналогичный пример для КЛАДР можно посмотреть по этой ссылке.
P.S.: Данная публикация описывает личное мнение. Конструктивная критика приветствуется. Опечатки просьба отправлять в личном сообщении.