проблемы с яндекс.картами (неправильно определяется по адресу)

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
столкнулся с такой проблемой: если указать адрес, чтобы получить координаты (прямое геокодирование), могут вернуться (не всегда) несколько объектов. И соответственно, это значит, что неполное соответствие координат.
Например:
Код:
get_coords_by_addr( 'Россия, Ленинградская область, Санкт-Петербург, Малая каштановая аллея 9' , {results: 1} ).then(function ( res ) { ...})
Скрипт на сайте работает примерно так: пользователь ввел адрес, отправляет данные. JS получает координаты по адресу. Если вернулось значение неполного соответствия
Код:
if(res.geoObjects.get(0).properties.get('metaDataProperty.GeocoderMetaData.precision') != 'exact') { ... }
то для пользователя открывается карта для клика. Но центр карты далеко от Питера, открывается всеволожский район. Он кликнул (что вряд ли, т.к. сложно найти свой город в таком случае). Далее снова валидация формы - получение координат и снова неполное соответствие. И снова открывается карта.

Как обрабатывать такие запросы, кто-нибудь знает? Как можно переделать js-код?
 
По итогу всех операций нужно получить координаты?
Если да, то во втором случае, когда пользователь кликает по карте, нужно брать координаты клика и не валидировать ничего.
 
По итогу всех операций нужно получить координаты?
Если да, то во втором случае, когда пользователь кликает по карте, нужно брать координаты клика и не валидировать ничего.
у меня валидируется адрес и другие данные в форме (город, улица, дом). Например, может быть так: пользователь указал адрес, кликнул на карте для уточнения, данные в полях формы поменялись согласно клику. А потом взял и поменял адрес в полях... а координаты же остались от старого клика. Поэтому и делается валидация адреса, чтобы еще раз проверить его.
Как вариант вижу такое решения(правда не знаю пока как это делается:( сделать как в примере из песочницы, при неполном соответствии и нескольких объектах выводить список объектов с названиями. По нужному кликнуть и откроется карта для уточняющего клика.
как-то так :)
 
у меня валидируется адрес и другие данные в форме (город, улица, дом). Например, может быть так: пользователь указал адрес, кликнул на карте для уточнения, данные в полях формы поменялись согласно клику. А потом взял и поменял адрес в полях... а координаты же остались от старого клика. Поэтому и делается валидация адреса, чтобы еще раз проверить его.
Как вариант вижу такое решения(правда не знаю пока как это делается:( сделать как в примере из песочницы, при неполном соответствии и нескольких объектах выводить список объектов с названиями. По нужному кликнуть и откроется карта для уточняющего клика.
как-то так :)
1)второй раз валидировать адрес, только если изменились данные в соответствующих полях.
Например при ручном редактировании полей(город, улица, дом) - сбрасывать координаты. Если координаты заданы - значит все ок.
2)Сразу скажу - очень большое кол-во зданий не имеет адреса или наоборот - большого кол-ва адресов нет на карте. Валидировать яндексовским геокодером имхо не лучший вариант.
 
2)Сразу скажу - очень большое кол-во зданий не имеет адреса или наоборот - большого кол-ва адресов нет на карте. Валидировать яндексовским геокодером имхо не лучший вариант.
мне нужно на карте выводить адреса... и что делать?
 
мне нужно на карте выводить адреса... и что делать?
В случае, если после геокодирования нет результатов или результатов несколько - выводить карту для клика.
Дальше все так же.
 
да проблема скорее даже не в этом, а в том, что возвращается несколько результатов. Нашел в доках, что можно указать приоритет поиска (опции геокодера) - искать от центра карты.
Код:
boundedBy: myMap.getBounds('Санкт-Петербург'),
         strictBounds: true,
Но возникает другая проблема - для этого необходимо сначала создать карту. Иначе возвращается ошибка - myMap не найден.
А если не указывать первоочередный поиск, то геокодер работает. Указываю - не работает.
Кто-нибудь знает, как можно сделать, чтобы не создавать карту перед использованием геокодера?
 
Назад
Сверху