Строго не судите. Перед текстом ниже хочу обратить ваше внимание на тот момент, что я не программист и поэтому задача решается без применения единой строчки кода на языках программирования, типа Java, php и т.д. всё это делается исключительно средствами БД (postgresql) и одной утилиты. Кладр получен из доступных источников ( http://fias.nalog.ru/Public/DownloadPage.aspx ) .
БД у меня выгрузка с гислаба России на 23-ье число.
И так.
- Качаем с сайта приведённого выше БД в формате КЛАДР 4.0. Распаковываем только KLADR.DBF остальные файлы нам не нужны! (т.к. пока что адресного валидатора нет ещё)))
- Ставим Postgresql + Postgis . В созданной БД ставим hstore и postgis (CREATE EXTENSION postgis; CREATE EXTENSION hstore; ) в linux для hstore нужен postgresql-contrib
- С помощью программы pgdbf ( https://github.com/kstrauser/pgdbf ) ставим КЛАДР pgdbf KLADR.DBF > 1.sql ; enconv -x UTF-8 1.sql; psql -f 1.sql
- БД осм должна быть загружена с ключом --hstore-all и обязательно в --slim моде (из-за того что бы сформировались ещё три таблички в частности planet_osm_nodes )
- Берём скрипт отсюда
- Просто выполняем команду sh exec.sh или поочередно psql -f с номером.
- Полученный результат сохраняется в total.csv в домашней директории (~/total.csv). а так же ошибочные геометрии (problem_geometry).
Полученный таким образом файл готов к открытию в Екселе, т.к. это простая таблица отсортированная по столбцам .И содержащая в последнем столбце osm_id точки, либо \N если он не нашёл её. Хочу сразу заметить об особенностях:
- Если в районе две деревни с одним и тем же названием - проставляйте cladr:code или kladr:code (не знаю что правильнее, учитываются оба), т.к. в ином случае идентифицируется одна на угад.
- Не стоит специально маппить под этот валидатор он слишком сырой))))
- Он использует геометрическую вложенность поэтому addr:district и т.п. игнорятся
- Если нет целого района, то скорее всего он либо не валидный (например разорван), либо его нет и как следствие деревни не валидируются.
- Для России на моём железе скрипт отрабатывается не более чем за 20 минут (так что формально можно часовые диффы использовать, интересно насколько уменьшится время если использовать, что-то вроде этого) и получен 20мбайтный файл.
- В таблице problem_geometry сохраняется не правильная геометрия, вероятнее если вы не нашли район свой в основной таблице, то он может быть в этой.
- Прочие проверки, такие как: Наличие полигона, соответствие addr я оставил на потом, т.к. чувствую, что если не напишу этот пост сейчас, то скорее всего не напишу его вообще. Да и они так же делаются простыми sql запросами.
- Так же есть возможность добавить произвольные колонки, например широту и долготу деревни. (Если кому-то нужна)
- При открытии в Екселе будьте внимательны, кладр код который начинается с нуля (01… 02…) выводится просто начиная с цифры (1…2…) таким образом вместо 13 значений получается двенадцать.
- Название некоторых областей я скорректировал в бд, поэтому если вам нужно гарантированно что что-то так-то называется в кладре, то за этим идите на оффциаильные ресурсы, в этой выгрузке название могут различаться.
- Города не входящие в муниципальные районы так же добавлены. Соотвественно в двух столбцах указано: Без мр.
Результат работы скрипта: ссылка
На данный момент замапленно 92240 из 194020 нп.