Справочники, инструменты, документация

Как разместить несколько офисов компании на Яндекс карте

Создать карту в конструкторе Яндекс карт наверное самый простой и быстрый способ, когда надо добавить местоположение на сайте.

Но если нужно сделать карту с внешними элементами управления, то конструктора здесь окажется мало. Самый распространенный пример, когда есть несколько офисов компании, и при нажатии ссылки «Показать на карте», карта автоматически перестраивается и показывает адрес нужного офиса. В этой статье мы рассмотрим готовый пример реализации этого функционала.

В коде мы указываем точки с координатами и в конце обработчик, который при нажатии на ссылку плавно пролистывает карту к нужной точке.

<script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
<script>
ymaps.ready(init);
function init () {
 var myMap = new ymaps.Map("map", {
   center: [55.742932093456126,37.62389544445802],
   zoom: 16,
   controls: []
  }),
  myGeoObject = new ymaps.GeoObject({
  });
 var address1 = new ymaps.Placemark([55.742932093456126,37.62389544445802], {
  balloonContent: 'Точка 1',
 }, {
  preset: 'islands#dotIcon',
  iconColor: '#D13F22'
 });
 var address2 = new ymaps.Placemark([55.791055862396824,37.52825102327829], {
  balloonContent: 'Точка 2',
 }, {
  preset: 'islands#dotIcon',
  iconColor: '#D13F22'
 });
 var address3 = new ymaps.Placemark([55.82726918688044,37.637157631026405], {
  balloonContent: 'Точка 3',
 }, {
  preset: 'islands#dotIcon',
  iconColor: '#D13F22'
 });
 myMap.geoObjects
  .add(myGeoObject)
  .add(address1)
  .add(address2)
  .add(address3);
 var mapControls = $('.map-control');
 var destinations = {
  '#address1': address1,
  '#address2': address2,
  '#address3': address3
 };
 mapControls.each(function(item, i) {

 // Прокрутка к блоку с картой и переход к точке
 $(this).bind('click', function() {
   var position = $('#map').offset().top;
   window.scrollTo(0, position);
   var destination = destinations[$(this).attr('href')];
   myMap.panTo(destination.geometry.getCoordinates(), {
    flying: true,
    duration: 3000
   })
   return false;
  }
 );
});
}
</script>


<a href="#address1" class="map-control">Офис 1</a><br />
<a href="#address2" class="map-control">Офис 2</a><br />
<a href="#address3" class="map-control">Офис 3</a><br />
<style>
 #map {
  width: 100%; height: 400px; padding: 0; margin: 0;
 }
</style>
<div id="map"></div>