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

Тема в разделе "JavaScript", создана пользователем danneo, 14 мар 2014.

Модераторы: ZiX
  1. danneo

    danneo Честный

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

    Как обрабатывать такие запросы, кто-нибудь знает? Как можно переделать js-код?
     
  2. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    По итогу всех операций нужно получить координаты?
    Если да, то во втором случае, когда пользователь кликает по карте, нужно брать координаты клика и не валидировать ничего.
     
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    у меня валидируется адрес и другие данные в форме (город, улица, дом). Например, может быть так: пользователь указал адрес, кликнул на карте для уточнения, данные в полях формы поменялись согласно клику. А потом взял и поменял адрес в полях... а координаты же остались от старого клика. Поэтому и делается валидация адреса, чтобы еще раз проверить его.
    Как вариант вижу такое решения(правда не знаю пока как это делается:( сделать как в примере из песочницы, при неполном соответствии и нескольких объектах выводить список объектов с названиями. По нужному кликнуть и откроется карта для уточняющего клика.
    как-то так :)
     
  4. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    1)второй раз валидировать адрес, только если изменились данные в соответствующих полях.
    Например при ручном редактировании полей(город, улица, дом) - сбрасывать координаты. Если координаты заданы - значит все ок.
    2)Сразу скажу - очень большое кол-во зданий не имеет адреса или наоборот - большого кол-ва адресов нет на карте. Валидировать яндексовским геокодером имхо не лучший вариант.
     
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    мне нужно на карте выводить адреса... и что делать?
     
  6. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    В случае, если после геокодирования нет результатов или результатов несколько - выводить карту для клика.
    Дальше все так же.
     
  7. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    да проблема скорее даже не в этом, а в том, что возвращается несколько результатов. Нашел в доках, что можно указать приоритет поиска (опции геокодера) - искать от центра карты.
    Код:
    boundedBy: myMap.getBounds('Санкт-Петербург'),
             strictBounds: true,
    Но возникает другая проблема - для этого необходимо сначала создать карту. Иначе возвращается ошибка - myMap не найден.
    А если не указывать первоочередный поиск, то геокодер работает. Указываю - не работает.
    Кто-нибудь знает, как можно сделать, чтобы не создавать карту перед использованием геокодера?
     
  8. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    Использовать HTTP интерфейс геокодера ;)
    Перейти по ссылке
    Перейти по ссылке