Как понять, дом найден в интервале или не найден?
Согласно документации, поле fias_id в подсказках может иметь следущий смысл:
HOUSE.HOUSEGUID
, если дом найден в ФИАС по точному совпадению;HOUSEINT.INTGUID
, если дом найден в ФИАС как часть интервала;ADDROBJ.AOGUID
в противном случае.
Проблема в том, что не все эти варианты можно различить.
Случай, когда дом найден по точному совпадению, можно определить по fias_level == 8.
Если дом найден в интервале, fias_id является кодом интервала и fias_level == 7 (улица).
Если дом не найден (но найдена улица), fias_id является кодом улицы и fias_level == 7 (улица).
Таким образом, невозможно отличить последние два случая, и неизвестно, чем является fias_id, следовательно, нельзя его использовать.
В принципе API дает возможность обойти эту проблему, сравнив fias_id и street_fias_id. Но.
- Получается, что поле fias_id бесполезно: его действительный смысл нужно выводить из других полей.
- Поле street_fias_id доступно не во всех интерфейсах к API. В частности, в библиотеке для C# есть только fias_id (впрочем, это проблема этой библиотеки сама по себе).
Ответ
Александр, добрый день!
Уточните, пожалуйста, для чего вы используете fias_id, и зачем нужна информация, принадлежит ли этот код именно интервалу домов?
Здравствуйте, Анастасия.
Я хочу идентифицировать адреса по ФИАС, но иметь возможность представлять и дома (как минимум), которых в ФИАС нет.
Для этого нужен код ФИАС наиболее специфичного объекта, найденного в ФИАС. Т.е. если найден дом, то адрес будет представлен просто его кодом ФИАС. Если найдена улица, то код улицы + номер дома. Возможно, и дальше - код города + название улицы + номер дома, и т.д. В качестве такого кода наиболее специфичного объекта я и пытаюсь использовать fias_id. Насколько я понимаю, он для этого и задумывался.
Только то, что он может быть кодом интервала домов, мешает. Для наших задач интервалы не нужны. Поэтому, когда fias_id обозначает интервал домов, я хочу брать вместо него код улицы.
И здесь проблема - неизвестно, когда он означает интервал домов.
Впрочем, проблему можно обойти. Если fias_level == улица, то брать street_fias_id вместо fias_id. Тогда все равно, что обозначает fias_id.
Дальше возникает другая проблема: в библиотеке для C# многие поля, включая street_fias_id, недоступны. Но об этом я заведу другую тему.
> Если fias_level == улица, то брать street_fias_id вместо fias_id
Если вам не нужны интервалы, то рекомендую именно так и делать. Более того, я бы вообще не использовал ФИАС-коды домов, а всегда хранил код улицы + номер дома. Потому что ФИАС-коды домов неустойчивые, они могут меняться (это противоречит идее уникального идентификатора, но факт — налоговая их меняет).
> ФИАС-коды домов неустойчивые, они могут меняться (это противоречит идее
уникального идентификатора, но факт — налоговая их меняет)
Не знал этого, спасибо за подсказку.
Хотя с конкретно моим случаем разобрались, проблема в API существует: неочевидно, как отличить, когда fias_id содержит код улицы, а когда интервала.
Сервис поддержки клиентов работает на платформе UserEcho
> Если fias_level == улица, то брать street_fias_id вместо fias_id
Если вам не нужны интервалы, то рекомендую именно так и делать. Более того, я бы вообще не использовал ФИАС-коды домов, а всегда хранил код улицы + номер дома. Потому что ФИАС-коды домов неустойчивые, они могут меняться (это противоречит идее уникального идентификатора, но факт — налоговая их меняет).