Клуб API Карт

Поиск на карте объектов (город, улица, дом)

Пост в архиве.

Всем доброго дня.

Хотелось бы понять, как можно определить, что искал пользователь. А именно: город, улицу или дом. Я знаю, что есть такое поле kind, которое показывает, что было найдено. Но тут есть проблема. Например, если задать строку поиска "Москва", то геокодер найдет адрес "Россия, Москва, Романов переулок, 2/6с9". И kind = house. Для городов помельче выдает street. Для мелких - все в порядке, locality.

Собственно вопрос: можно ли как-то указать геокодеру, что не надо искать Романов переулок, если надо найти просто центр города? Или же это только Яндекс решает, что, когда, как и где искать. И если Романов, значит Романов

Заранее спасибо.

6 комментариев
Александр Новиков
28 января 2016, 05:21
Чтобы понять то что искал пользователь нужно залезть этому пользователю в голову :).
А по существу вашего вопроса, если я правильно его понял... в параметрах геокодера можно задать точность с которой следует искать.

kind можно указывать в качестве входного параметра

в данный момент поддерживается

  • house - дом;
  • street - улица;
  • metro - станция метро;
  • locality - населенный пункт (город/поселок/деревня/село/...).

http://api.yandex.ru/maps/geocoder/doc/desc/concepts/input_params.xml

Так... Чем больше я понимаю работу АПИ, тем иначе передо мной встает задача :-)

Опишу глобальную задачу:

Есть поле для ввода адреса. Юзер вводит туда свой адрес.Понятное дело, что каждый может указать адрес в разных форматах. Не беря в расчет орфографические ошибки (а они будут!) даже "проспект Мира" можно написать множеством способов. А мне надо, чтоб все адреса были правильные и в одном формате. Следовательно, что я делаю? Я нахожу точку на карте по строке, которую ввел пользователь - это геокодирование. Затем по координатам этой точки провожу обратное геокодирование - получаю правильный и формализованный адрес. Вуаля! Но тут есть несколько исключений. Например, если он ввел "Москва", этуситуацию я описал выше. Сейчас я допер, что можно получать kind от первого применения геокодирования и передовать его в обратное геокодирование. Все верно, в этом случае, если была найдена только улица, он улицу и укажет, без дома. Но вот координаты точки при этом могут сместиться. Почему так? И как этого избежать?

Пример: я ввожу "Москва, пр. Мира" Результат геокодирования указывает правильно - на пр. Мира. Но когда я делаю обратное геокодирование по этим координатам, в результате почему-то получаю указатель на ул. Староалексеевскую и другие координаты. Две точки находятся близко друг от друга, но они все-таки разные :-(

Александр Новиков
28 января 2016, 05:21
Если вам нужна тотальная точность, то наверно лучше не привязываться к геокодеру, а использовать другие источники информации. Например использовать КЛАДР и давать пользователю последовательно выбирать регино, город, улицу и т.д.

Не, с КЛАДРом все понятно. Фиг с ней с точностью. У меня сейчас другой вопрос: почему при кодировании адреса и обратном геокодировании по координатам найденной точки получаю в итоге две разные точки? Не всегда, но в некоторых случаях (случай описан выше).

Александр Новиков
28 января 2016, 05:21
Потому что как раз в этом случае никто не гарантирует вам точности.

Когда вы определяете координаты улицы, то геокодер возвращает координаты "центра"  улицы. При обратном геокодировании возвращается ближайший объект.

И похоже что геокодер считает что при поиске по координатам центра Москвы вы хотите первым в ответе получить улицу рядом с этой точкой, а не информацию о том что эта точка находится в Российской федерации...