API для ввода адреса в структурированном виде (в формате ГАР ФИАС)

API: Сервис для ввода адресов — инструмент, который обеспечивает доступ к базе адресов государственного адресного реестра (ГАР БД ФИАС). API предлагает уникальный метод по работе с адресами в формате муниципального и административного деления.

Для чего API: Сервис для ввода адресов?

API автоматически подгружает адрес по первым буквам, разбирает адрес на составные части: от региона до квартиры, выводит адрес в правильном порядке и исключает опечатки.

Как работает «API: Сервис для ввода адресов»Как работает «API: Сервис для ввода адресов»

В чем уникальность API?  

Уникальность в том, что на рынке присутствуют API, которые предоставляют доступ только к адресам административно-территориального деления. А вот обработки адресов по муниципальному делению не было до реализации API: Сервис для ввода адресов. 

Также API предлагает возможность получения списка нижестоящих частей адресов по уровням, то есть, например, нужно узнать какие есть городские районы в городе Москва, или получить список домов в определенном регионе города Москвы, ну и т.д.

Кроме того не было возможности получить идентификатор адресообразующего элемента по полному адресу вплоть до квартиры, с внедрением API такая возможность появляется.

В остальном «API: Сервис для ввода адресов» выполняет похожие функции, как и у других API,   например, как у dadata.

C полным списком функциональных возможностей можно ознакомиться в технической документации.

Как внедрить?

Доступ к БД осуществляется двумя HTTP-запросами: POST и GET. Выбор зависит от того, как Вам будет удобно использовать. Структура ответа похожа, но есть небольшие отличия:

  • Метод POST разрабатывался специально для тех, у кого уже внедрена работа с адресами другого API, то есть для быстрого перехода.

  • Метод же GET возвращает больше параметров, тем самым решая, например, проблему с адресным идентификатором до квартиры.

Как использовать API?

Самым распространенным применением API является помощь пользователю при вводе адреса в текстовом поле, так называемый полнотекстовый поиск. Причем поиск, как и говорилось ранее, будет происходить при вводе адреса в виде административного деления, так и в виде муниципального деления. 

Пример такого GET-запроса на получение вариантов полного адреса объекта по указанному приблизительному тексту:

https://data.pbprog.ru/api/address/full-address/parse? token=123abcde123abcde123adcde123abcde123abcde&addressText=Киров,%20Ленина,%20113

Где:

Помимо обязательных параметров есть и дополнительные, например, режим поиска, количество ответов.

В ответ получим массив элементов следующей структуры:

[

 "value": "Калужская обл, Кировский р-н, г Киров, ул Ленина, д 113",

            "addressParts": [

                {

                    "objectGuid": "18133adf-90c2-438e-88c4-62c41656de70",

                    "name": "Калужская",

                    "typeName": "обл",

                    "fullTypeName": "область",

                    "level": 1,

                    "kladr": "4000000000000",

                    "okato": "29000000000",

                    "oktmo": "29000000",

                    "isActive": true

                },

                {

                    "objectGuid": "bd20192d-2702-4d5f-bd0c-7db4df7be215",

                    "name": "Кировский",

                    "typeName": "р-н",

                    "fullTypeName": "район",

                    "level": 2,

                    "isActive": true

                },

                {

                    "objectGuid": "7c875ac0-5c75-4798-8786-564ccb5bd9f2",

                    "name": "Киров",

                    "typeName": "г",

                    "fullTypeName": "город",

                    "level": 5,

                    "kladr": "4001100100000",

                    "okato": "29214501000",

                    "oktmo": "29614101001",

                    "isActive": true

                },

                {

                    "objectGuid": "3ebd4a60-3f08-4d89-83a8-1f0feaea4760",

                    "name": "Ленина",

                    "typeName": "ул",

                    "fullTypeName": "улица",

                    "level": 8,

                    "kladr": "40011001000005200",

                    "okato": "29214501000",

                    "oktmo": "29614101001",

                    "postIndex": "249440",

                    "isActive": true

                },

                {

                    "objectGuid": "7db78665-c605-45b9-8d74-ea5e3fc0176b",

                    "name": "113",

                    "typeName": "д",

                    "fullTypeName": "дом",

                    "level": 10,

                    "okato": "29214501000",

                    "oktmo": "29614101001",

                    "postIndex": "249440",

                    "isActive": true

                }

            ]

        },

},

...

]

В данном примере присутствуют следующие элементы:

  • value — непосредственно адрес;

  • addressParts — массив с детальной информацией по элементам адреса, в который входят:

    • GUID объекта;

    • Наименование;

    • Сокращенное и полное название типа элемента;

    • Уровень вложенности;

    • Код КЛАДР, ОКАТО, ОКТО;

    • Почтовый индекс;

    • Признак активности.

Реальный примертакой реализации ввода адресов Вы можете посмотреть по ссылке → https://pbprog.ru/lp/fias/.

После получения ответа все что Вам остается разложить его в нужном Вам формате и виде.

Например:

image-loader.svg

Но есть еще вариант использования API — расширенный поиск адреса. 

Например, реализация в виде формы ввода адреса как на официальном сайте ФИАС. (https://fias.nalog.ru/ExtendedSearch).

image-loader.svg

Если для решения вашей задачи стоит реализовать возможность расширенного поиска адреса, то «API: Сервис для ввода адресов» Вам в этом поможет.

Вам нужно:

  1. Сформировать запрос на получение регионов РФ.

Пример запроса:  

https://data.pbprog.ru/api/address/regions? token=123abcde123abcde123adcde123abcde123abcde&activeOnly=false

В ответ получим массив элементов вида:

 {

        "regionCode":"01",

        "objectGuid":"d8327a56-80de-4df2-815c-4f6ab1224c50",

        "name":"Адыгея",

        "typeName":"Респ",

        "fullTypeName":"Республика",

        "kladr":"0100000000000",

        "okato":"79000000000",

        "oktmo":"79000000",

        "postIndex":"385000"

    }

где:

  • regionCode — код региона;

  • objectGuid — GUID ФИАС региона;

  • name — название региона;

  • typeName — сокращенное название типа региона;

  • fullTypeName — полное название типа региона;

  • kladr — код КЛАДР;

  • okato — код ОКАТО;

  • oktmo — код ОКТМО;

  • postIndex — почтовый индекс.

Из полученного массива элементов заполнить первое поле со списком. 

  1. Все остальная работа контролов зависит от выбранного родительского элемента. 

То есть, выбрали регион, получили GUID объекта. И далее по этому GUID получаете список, например, муниципальных районов.

Пример запроса для получения районов Кировской области:  

https://data.pbprog.ru/api/address/childs/0b940b96–103f-4248–850c-26b6c7296728? token={123abcde123abcde123adcde123abcde123abcde}&hierarchyMode=adm

В ответ получим массив элементов вида:

 {

        "objectGuid": "c33ab87d-1f10-4eb9-a628-ab06a9fdf08b",

        "name": "67",

        "typeName": "д",

        "fullTypeName": "дом",

        "level": 10,

        "okato": "79230559000",

        "oktmo": "79630159051",

        "postIndex": "385140",

        "isActive": true,

        "sublevels": [

            {

                "name": "1",

                "typeName": "к",

                "fullTypeName": "корпус"

            },

            {

                "name": "67",

                "typeName": "стр",

                "fullTypeName": "строение"

            }

        ]

    }

где:

  • objectGuid — GUID ФИАС элемента.

  • name — название элемента.

  • typeName — сокращенное название типа элемента.

  • fullTypeName — полное название типа элемента.

  • level — уровень типа элемента.

  • okato — код ОКАТО.

  • oktmo — код ОКТМО.

  • postIndex — почтовый индекс.

  • isActive — признак активности.

  • sublevels — доп. уровни адреса. Применимо только к домам. Максимум до 2-х доп. уровней.

и так далее до нужного уровня.

Но! Есть тонкость в реализации. У каждого контрола необходимо определить свой уровень и при разборе ответа заполнять соответствующие элементы.

Сами уровни представлены ниже.

level

name

1

Субъект РФ

2

Административный район

3

Муниципальный район

4

Сельское/городское поселение

5

Город

6

Населенный пункт

7

Элемент планировочной структуры

8

Элемент улично-дорожной сети

9

Земельный участок

10

Здание (сооружение)

11

Помещение

12

Помещения в пределах помещения  

13

Уровень автономного округа (устаревшее)

14

Уровень внутригородской территории (устаревшее) 

15

Уровень дополнительных территорий (устаревшее)

16

Уровень объектов на дополнительных территориях (устаревшее)

17

Машино-место

Изменение идентификаторов уровней в ГАР БД ФИАС маловероятны. Но, мы обещаем добавить в API метод по выдаче уровней в ближайшее время.

С остальными примерами методов можно ознакомиться в технической документации (см. ссылку выше).

© Habrahabr.ru