Получить признак наличия найденного адреса из яндекс карт
Всем привет! Есть карта Яндекс с кластеризатором и наброшенными метками.
На самой карте есть стандартная строка поиска адреса яндекса.
Каждый раз, когда пользователь выполняет функцию, мне надо проверять - искал ли он адрес через яндексовский поиск (т.е. есть ли метка на карте), центрирвоать карту к этой метке и приближать по-максимуму.
Не могу найти как обратиться к карте и получить координаты точки, которую искал пользователь.
Помогите, пожалуйста.
Ответы (1 шт):
Очевидно, речь об элементе управления "Поиск по карте" (https://tech.yandex.ru/maps/jsapi/doc/2.1/ref/reference/control.SearchControl-docpage/ ).
В обработчике события выбора результата поиска можно получить координаты точки, которую нашел и выбрал пользователь, вот пример: https://jsfiddle.net/naivv/mqf6pj72/ (API ключ из песочницы здесь не работает).
function init() {
var myMap = new ymaps.Map('map', {
center: [55.74, 37.58],
zoom: 13,
controls: []
});
// Создадим экземпляр элемента управления «поиск по карте»
// с установленной опцией провайдера данных для поиска по организациям.
var searchControl = new ymaps.control.SearchControl({
options: {
provider: 'yandex#search'
}
});
myMap.controls.add(searchControl);
// Программно выполним поиск определённых кафе в текущей
// прямоугольной области карты.
searchControl.search('Шоколадница');
console.log('request: ' + searchControl.getRequestString());
// обработка событий элемента управления "Поиск по карте"
searchControl.events.add('resultselect', function(e) {
console.log('resultselect event fired:');
//console.log(e);
var target = e.get('target');
//console.log(target);
var found = searchControl.getResultsCount(); //target.state.get('found');
console.log('results found: ' + found);
var index = searchControl.getSelectedIndex(); //e.get('index');
var results = searchControl.getResultsArray(); //target.state.get('results');
if (results.length) {
var result = results[index]; //getResult(index)
//console.log(result.properties);
var coords = result.geometry.getCoordinates();
//TODO делаем что планировали с координатами найденной точки
console.log('selected coordinates: ' + coords);
var name = result.properties.get('name');
console.log('selected name: ' + name);
var description = result.properties.get('description');
console.log('selected description: ' + description);
} else {
console.log('empty result!');
}
console.log("\n");
});
searchControl.events.add('submit', function(e) {
console.log('submit event fired:');
console.log("\n");
});
searchControl.events.add('load', function(e) {
console.log('load event fired:');
console.log("\n");
});
searchControl.events.add('resultshow', function(e) {
console.log('resultshow event fired:');
console.log("\n");
});
}
ymaps.ready(init);
<!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=60445215-6d3a-4f88-87fe-8d52b72e5bc9" 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>