Клуб API Карт

Список подсказок в SuggestView в исходном виде json-объекта - это возможно?

gameronly
18 марта 2015, 19:12

Читал документацию, в ней сказано, что я могу получить текстовые обозначения подсказок от яндекс.карт - что-то вроде "Россия, Москва, Липецкая улица". Но мне очень хочется получить, так сказать, "сырые данные" - те json-объекты, что приходят ответом от сервера яндекса по запросу на http://geocode-maps.yandex.ru/1.x/?callback=id_1426685607408208921187&origin=jsapi2Geocoder&geocode=Россия,+Москва,+Липецкая+улица:

 {"response": {
    "GeoObjectCollection": {
        "metaDataProperty": {
            "GeocoderResponseMetaData": {
                "request": "Россия, Москва, Липецкая улица, д",
                "found": "11",
                "results": "1"
            }
        },
        "featureMember": [
            {
                "GeoObject": {
                    "metaDataProperty": {
                        "GeocoderMetaData": {
                            "kind": "street",
                            "text": "Россия, Москва, Липецкая улица",
                            "precision": "street",
                            "AddressDetails": {
                                "Country": {
                                    "AddressLine": "Москва, Липецкая улица",
                                    "CountryNameCode": "RU",
                                    "CountryName": "Россия",
                                    "AdministrativeArea": {
                                        "AdministrativeAreaName": "Центральный федеральный округ",
                                        "SubAdministrativeArea": {
                                            "SubAdministrativeAreaName": "Москва",
                                            "Locality": {
                                                "LocalityName": "Москва",
                                                "Thoroughfare": {
                                                    "ThoroughfareName": "Липецкая улица"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "description": "Москва, Россия",
                    "name": "Липецкая улица",
                    "boundedBy": {
                        "Envelope": {
                            "lowerCorner": "37.661204 55.575892",
                            "upperCorner": "37.688045 55.613392"
                        }
                    },
                    "Point": {
                        "pos": "37.672729 55.594168"
                    }
                }
            }
        ]
    }
}}

 

Кто-нибудь подскажет, это вообще возможно? В дальнейшем хочется заполнить сопутствующие карте поля по типам: регион / район/ населённый пункт и т.д. Парсить просто строку подсказки - путь в никуда .

 

Есть, конечно, ещё другой вариант - сделать просто инпут, в который пользователь будет писать некий адрес, я должен буду самостоятельно обрабатывать значение из этого инпута, делать запрос ymaps.geocode(), обрабатывать результат и показывать подсказки - т.е. я беру на себя все функции SuggestView. Данный велосипед делать очень не хочется, подскажите, кто чем может...

 

Или есть ещё и 3й вариант, который спасёт меня от мучений?

3 комментария
Подписаться на комментарии к посту

Сервер SuggestView не отдает никакого JSON, там лишь список строк

Геокодер не может быть источником подсказок т.к. он плохо ищет по чанкам, и это в общем не его задача.

По описанному вами алгоритму работает стандартый SearchControl.

Сначала он показывает подсказки, а затем при выборе одной из них идет с ее текстом в геокодер.

Вы можете использовать вместо SuggestView сервис КЛАДР в облаке, у нас был пример его использования.

 

Так же упомяну, что в случае использования SuggestView или геокодера, вы обязаны показать карту на сайте, иначе это нарушение Условий использования АПИ Яндекс Карт

Карта на странице отображается, никаких нарушений условий использования не будет.

Спасибо за ответ, но указанные Вами варианты не дотягивают до моего видения идеальной карты. Хочется видеть вариант как на realty.yandex.ru - одна строка поиска, при вводе части адреса появляются подсказки, из которых я могу выбрать нужный вариант. При этом должен получить тот JSON-объект с данными, который сервер яндекса присылает в качестве подсказки - с разбиением по уровням детализации местоположения (регион, район, город и т.д.). Из коробки, получается, такого функционала нет?

SuggestView отдаёт только строки. Хотя ответ от сервера приходит в нужном для меня виде, получить его я не могу. В остальном меня всё устраивает.

SearchControl в чистом виде требует ввести адрес полностью, нажать на кнопку, а потом уже выбирать из возможных значений - это неудобно.

В Вашем примере с SearchControl используется сервис kladr-api.ru. У меня планируется работа с новостройками/загородными домами, так что очень часто встаёт проблема отсутствия этих данных в КЛАДР, хотя яндекс.карты их зачастую находят. Правильно ли я понимаю, что лучшим вариантом для меня сейчас будет такой - использовать Ваш пример, но вместо kladr-api.ru посылать запросы к "подсказчику" и работать на карте уже с его ответами в JSON?

 

PS: пардон за много букв и возможный сумбур, только второй день разбираюсь с возможностями API.

Вы можете запрашивать подсказки через метод suggest, судя по документации там возвращается массив объектов

 

Для получения структурированных данных надо идти с текстом что вернул подсказчик в геокодер, т.е. в два запроса