У меня есть карта с возможностью поиска поадресам.
Я вывел отдельную форму поиска вне карты, подсказки там работают, но если из подсказки (вне карты) выбрать результат, то карта не находит результат.
Вероятно надо эту кастомную форму поиска привязать к результатам, но не нашел как.
ymaps.ready(init);
function init() {
//Я добавил свою форму поиска
var suggestView1 = new ymaps.SuggestView('suggest');
//Ниже пример из доки, кастомного ничего нет
var myMap = new ymaps.Map('map', {
center: [30.264981955459618, 59.9567962610097],
zoom: 9,
controls: ['geolocationControl', 'searchControl']
}),
deliveryPoint = new ymaps.GeoObject({
geometry: {type: 'Point'},
properties: {iconCaption: 'Адрес'}
}, {
preset: 'islands#blackDotIconWithCaption',
draggable: true,
iconCaptionMaxWidth: '215'
}),
searchControl = myMap.controls.get('searchControl');
searchControl.options.set({noPlacemark: true, placeholderContent: 'Введите адрес доставки'});
myMap.geoObjects.add(deliveryPoint);
function onZonesLoad(json) {
// Добавляем зоны на карту.
var deliveryZones = ymaps.geoQuery(json).addToMap(myMap);
// Задаём цвет и контент балунов полигонов.
deliveryZones.each(function (obj) {
obj.options.set({
fillColor: obj.properties.get('fill'),
fillOpacity: obj.properties.get('fill-opacity'),
strokeColor: obj.properties.get('stroke'),
strokeWidth: obj.properties.get('stroke-width'),
strokeOpacity: obj.properties.get('stroke-opacity')
});
obj.properties.set('balloonContent', obj.properties.get('description'));
});
// Проверим попадание результата поиска в одну из зон доставки.
searchControl.events.add('resultshow', function (e) {
highlightResult(searchControl.getResultsArray()[e.get('index')]);
});
// Проверим попадание метки геолокации в одну из зон доставки.
myMap.controls.get('geolocationControl').events.add('locationchange', function (e) {
highlightResult(e.get('geoObjects').get(0));
});
// При перемещении метки сбрасываем подпись, содержимое балуна и перекрашиваем метку.
deliveryPoint.events.add('dragstart', function () {
deliveryPoint.properties.set({iconCaption: '', balloonContent: ''});
deliveryPoint.options.set('iconColor', 'black');
});
// По окончании перемещения метки вызываем функцию выделения зоны доставки.
deliveryPoint.events.add('dragend', function () {
highlightResult(deliveryPoint);
});
function highlightResult(obj) {
// Сохраняем координаты переданного объекта.
var coords = obj.geometry.getCoordinates(),
// Находим полигон, в который входят переданные координаты.
polygon = deliveryZones.searchContaining(coords).get(0);
if (polygon) {
// Уменьшаем прозрачность всех полигонов, кроме того, в который входят переданные координаты.
deliveryZones.setOptions('fillOpacity', 0.4);
polygon.options.set('fillOpacity', 0.8);
// Перемещаем метку с подписью в переданные координаты и перекрашиваем её в цвет полигона.
deliveryPoint.geometry.setCoordinates(coords);
deliveryPoint.options.set('iconColor', polygon.properties.get('fill'));
// Задаем подпись для метки.
if (typeof(obj.getThoroughfare) === 'function') {
setData(obj);
} else {
// Если вы не хотите, чтобы при каждом перемещении метки отправлялся запрос к геокодеру,
// закомментируйте код ниже.
ymaps.geocode(coords, {results: 1}).then(function (res) {
var obj = res.geoObjects.get(0);
setData(obj);
});
}
} else {
// Если переданные координаты не попадают в полигон, то задаём стандартную прозрачность полигонов.
deliveryZones.setOptions('fillOpacity', 0.4);
// Перемещаем метку по переданным координатам.
deliveryPoint.geometry.setCoordinates(coords);
// Задаём контент балуна и метки.
deliveryPoint.properties.set({
iconCaption: 'Доставка транспортной компанией',
balloonContent: 'Cвяжитесь с оператором',
balloonContentHeader: ''
});
// Перекрашиваем метку в чёрный цвет.
deliveryPoint.options.set('iconColor', 'black');
}
function setData(obj){
var address = [obj.getThoroughfare(), obj.getPremiseNumber(), obj.getPremise()].join(' ');
if (address.trim() === '') {
address = obj.getAddressLine();
}
var price = polygon.properties.get('description');
price = price.match(/<strong>(.+)<\/strong>/)[1];
deliveryPoint.properties.set({
iconCaption: address,
balloonContent: address,
balloonContentHeader: price
});
}
}
}
$.ajax({
url: 'data.geojson',
dataType: 'json',
success: onZonesLoad
});
}