Собственное отображение результатов поиска
В данном примере показано, как задать собственное отображение результатов поиска.
Выбранные результаты добавляются в коллекцию GeoObjectCollection, на которой слушается событие "click". При клике по найденному объекту его метка становится красной.
Также для объектов коллекции задан собственный макет всплывающей подсказки.
index.html
custom_search_results.js
<!DOCTYPE html>
<html>
<head>
<title>Собственное отображение результатов поиска</title>
<meta
http-equiv="Content-Type"
content="text/html; charset=utf-8"
/>
<!--
Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
-->
<script
src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=<ваш API-ключ>"
type="text/javascript"
></script>
<script
src="custom_search_results.js"
type="text/javascript"
></script>
<style>
html,
body,
#map {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
</style>
</head>
<body>
<div id="map"></div>
</body>
</html>
ymaps.ready(function () {
var myMap = new ymaps.Map("map", {
center: [59.22, 39.89],
zoom: 12,
controls: [],
}),
// Создаем экземпляр класса ymaps.control.SearchControl
mySearchControl = new ymaps.control.SearchControl({
options: {
noPlacemark: true,
},
}),
// Результаты поиска будем помещать в коллекцию.
mySearchResults = new ymaps.GeoObjectCollection(null, {
hintContentLayout:
ymaps.templateLayoutFactory.createClass(
"$[properties.name]"
),
});
myMap.controls.add(mySearchControl);
myMap.geoObjects.add(mySearchResults);
// При клике по найденному объекту метка становится красной.
mySearchResults.events.add("click", function (e) {
e.get("target").options.set("preset", "islands#redIcon");
});
// Выбранный результат помещаем в коллекцию.
mySearchControl.events
.add("resultselect", function (e) {
var index = e.get("index");
mySearchControl.getResult(index).then(function (res) {
mySearchResults.add(res);
});
})
.add("submit", function () {
mySearchResults.removeAll();
});
});