Клуб API Карт

Поиск адреса или объекта

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

Здравствуйте!

Пожалуйста, помогите с решением поставленной задачи.

 

Подключается JS API Яндекс Карт (http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU).


Изначально инициализируется переменная addr с информацией по необходимому городу (страна, регион, город).

  1. city_name"Ярославль"
  2. country_name"Россия"
  3. region_name"Ярославская область"


На основе этих данных вызывается функция геокодирования (API Яндекс Карт), которая возвращает координаты требуемого города.

 

ymaps.geocode(addr.country_name + ', ' + addr.region_name + ', г. ' + addr.city_name, {results: 1}).then(function(res) {

    var firstGeoObject = res.geoObjects.get(0);

    EFormExactAddress.Map.Create(field_id, firstGeoObject.geometry.getCoordinates(), 10);

}, function (err) {

    alert(err.message);

});

 

Далее вызывается функция Create, которая создает карту, центром которой устанавливаются полученные координаты. На карту накладывается метка (с возможностью перемещения) с аналогичными координатами. При перемещении метки вызывается функция сохраниения новых координат SaveCoordinats.

 

Create: function(field_id, coords, zoom) {

            var SearchControl = new ymaps.control.SearchControl({

                noPlacemark: true

            });

 

            $('#map_' + field_id).empty();

            

            EFormExactAddress.Map.Handler = new ymaps.Map('map_' + field_id, {

                center: coords,

                zoom: zoom

            });

 

            EFormExactAddress.Map.Handler.controls

            .add(SearchControl, {left: 35, top: 5})

            .add('zoomControl', {left: 5, top: 5})

            .add('typeSelector')

            .add('smallZoomControl', {right: 5, top: 75});

 

            EFormExactAddress.Map.Placemark = new ymaps.Placemark(coords, {}, {preset: "twirl#houseIcon", draggable: true});

            EFormExactAddress.Map.Handler.geoObjects.add(EFormExactAddress.Map.Placemark);

            EFormExactAddress.Map.Placemark.events.add("dragend", function (e) {

                var coords = this.geometry.getCoordinates();

 

                ymaps.geocode(coords).then(function (res) {

                    var names = [];

 

                    res.geoObjects.each(function (obj) {

                        names.push(obj.properties.get('name'));

                    });

 

                    EFormExactAddress.SaveCoordinats(field_id, names[0], coords);

                });

            }, EFormExactAddress.Map.Placemark);

 

            EFormExactAddress.Map.Handler.events.add('click', function (e) { 

                var coords = e.get('coordPosition');

 

                ymaps.geocode(coords).then(function (res) {

                    var names = [];

 

                    res.geoObjects.each(function (obj) {

                        names.push(obj.properties.get('name'));

                    });

 

                    EFormExactAddress.SaveCoordinats(field_id, names[0], coords);

                });

            });

            

            SearchControl.events.add("resultselect", function (e) {

                EFormExactAddress.SaveCoordinats(field_id, SearchControl.getResultsArray()[0].properties.get('name'), SearchControl.getResultsArray()[0].geometry.getCoordinates());

            });

        }

    },

 

 

ВОПРОС:

На карте используется контрол SearchControl.

Как сделать так, чтобы перед поиском адреса, к строке которую ввел пользователь добавлялось название города которое определено в переменной addrСуть в том, чтобы ограничить поиск исключительно по городу, который описан в переменной addr. Мне пришла в голову только такая идея - после того как пользователь ввел в поиск адреса строку, программно добавлять к ней (текст в контроле остается неизменным) название города и уже после этого запрашивать результаты поиска. Это вообще возможно? Или существуют другие, более удачные варианты решения поставленной задачи? 

 

Заранее спасибо за советы.

 

7 комментариев

var searchCtl=map.controls.add(new ymaps.control.SearchControl({boundedBy: [[57,28],[61,32]],strictBounds : true}),{left: '5px', top: '5px' });

Да, я в курсе этой штуки, но откуда взять координаты прямоугольной области (boundedBy: [[57,28],[61,32]])?

хранить в базе

Как-то так ещё можно:

$url = 'http://geocode-maps.yandex.ru/1.x/?geocode=деревня Нижнепопово д.4&format=json&results=1';

Спасибо за наводку, попробую прикрутить этот вариант.