0
Not a bug

Неизвестный тип здания строение/корпус, разные координаты

Xor 2 years ago in Стандартизация • updated by Антон 2 years ago 1

Мы используем dadata для определения геокоординат по адресу. В нашей базе данных отсутствует информация о типе здания (корпус, строение), т.е. например адрес Москва, Широкая ул, д. 3. корпус 1 у нас представлена в виде полей город: Москва, улица: Широкая, дом: 3, доп: 1. Генерируем строку для распознавания dadata. Москва, Широкая, дом 3, 1 - определяет дом 3, кв 1. Ок, добавляем для всех таких адресов, например "стр", т.е становится "Москва, Широкая 3 стр 1". Dadata говорит что адрес распознан хорошо qc=0, однако в block_type не заменяется на корпус, а ставится наше же строение. Но такого адреса не существует! И геокоординаты определяются неверно 55.88896954,37.653092, что по Яндексу попадает на дом Широкая ул. 1 корпус 2

Подскажите что передать вместо "к/стр/...", чтобы dadata определил адрес корректно?

Answer

Answer
Not a bug

Дело в том, что DaData работает по ФИАС (всероссийский классификатор адресов ФНС). В ФИАС корпус и строение – абсолютно разные типы здания. Здание может быть с корпусом и иметь строение, может иметь только корпус или только строение. Яркий пример – соседний адрес г Москва, ул Широкая, д 2 к 2 стр 3. Поэтому для корректного распознавания адреса нужно точно указывать тип в исходных данных. Вместо "к" можно передавать "корп"/"кор".

Москва, Широкая, дом 3, кор 1 корректно разбирается и получает точные геокоординаты.

Dadata говорит что адрес распознан хорошо qc=0, однако в block_type не заменяется на корпус, а ставится наше же строение. Но такого адреса не существует!

Вы правы, такого адреса нет. Но проблема в том, что в ФИАС в принципе нет многих реально существующих адресов. Проверять существование адресов по другим источникам сложно и противоречиво. Если же мы будем разбирать только адреса из ФИАС, то отрежем значительное количество реальных данных. Поэтому мы разбираем все адреса, в том числе похожие на реально существующие. Но предупреждаем о возможных несоответствиях с помощью кодов качества. В API это поле qc_house != 2. То же самое с геокоординатами – в вашем адресе они указаны до ближайшего дома, об этом сообщает qc_geo = 1.

Answer
Not a bug

Дело в том, что DaData работает по ФИАС (всероссийский классификатор адресов ФНС). В ФИАС корпус и строение – абсолютно разные типы здания. Здание может быть с корпусом и иметь строение, может иметь только корпус или только строение. Яркий пример – соседний адрес г Москва, ул Широкая, д 2 к 2 стр 3. Поэтому для корректного распознавания адреса нужно точно указывать тип в исходных данных. Вместо "к" можно передавать "корп"/"кор".

Москва, Широкая, дом 3, кор 1 корректно разбирается и получает точные геокоординаты.

Dadata говорит что адрес распознан хорошо qc=0, однако в block_type не заменяется на корпус, а ставится наше же строение. Но такого адреса не существует!

Вы правы, такого адреса нет. Но проблема в том, что в ФИАС в принципе нет многих реально существующих адресов. Проверять существование адресов по другим источникам сложно и противоречиво. Если же мы будем разбирать только адреса из ФИАС, то отрежем значительное количество реальных данных. Поэтому мы разбираем все адреса, в том числе похожие на реально существующие. Но предупреждаем о возможных несоответствиях с помощью кодов качества. В API это поле qc_house != 2. То же самое с геокоординатами – в вашем адресе они указаны до ближайшего дома, об этом сообщает qc_geo = 1.