Создание карты с местоположением пользователя
Данный пример демонстрирует, как создать карту, изначально отцентрированную по местоположению пользователя.
Для определения местоположения используется метод get функции geolocation. В его параметрах можно указать предпочтительный способ определения местоположения (по IP или с помощью Geolocation API), время ожидания ответа и др. Подробнее см. в описании метода.
При вызове данного метода браузер пытается определить географическое положение пользователя. В случае успеха результат записывается в поле карты geoObjects, в противном случае возникает сообщение об ошибке.
В данном примере, если местоположение определить не удалось, создается карта с центром в Москве.
index.html
geolocated_map.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="https://yandex.st/jquery/2.2.3/jquery.min.js"
type="text/javascript"
></script>
<script src="geolocated_map.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 map;
ymaps.geolocation.get().then(
function (res) {
var mapContainer = $("#map"),
bounds = res.geoObjects.get(0).properties.get("boundedBy"),
// Рассчитываем видимую область для текущей положения пользователя.
mapState = ymaps.util.bounds.getCenterAndZoom(bounds, [
mapContainer.width(),
mapContainer.height(),
]);
createMap(mapState);
},
function (e) {
// Если местоположение невозможно получить, то просто создаем карту.
createMap({
center: [55.751574, 37.573856],
zoom: 2,
});
}
);
function createMap(state) {
map = new ymaps.Map("map", state);
}
});