Карты гугл как сделать темнее. Google Maps — кастомизируй меня полностью

Карты гугл как сделать темнее. Google Maps — кастомизируй меня полностью
  • Tutorial

В первый раз столкнувшись с внедрением и кастомизацией Google Maps, я не нашел единой статьи, рассматривающей все необходимые моменты - информацию пришлось искать по крупицам, а что-то выдумывать самому. После чего и было решено написать эту статью, чтобы люди, ранее не работавшие со стилизацией Google Maps, но при этом ограниченные временными рамками (а может, и желанием) для полноценного изучения API, смогли быстро получить необходимую информацию и материалы. Тем более, что и те, кто обладает определенным опытом, смогут почерпнуть для себя из этой статьи какую-нибудь интересную фишку, к примеру - параллакс для элементов информационного окна.

В этой статье мы рассмотрим:

1. Внедрение Google Maps на сайт

  • Добавление через вставку iframe в разметку
  • Добавление через API
2. Кастомизация маркера
  • Инициализация маркера
  • Анимация маркера
  • Изображение маркера
  • Добавление информационного окна
  • Открытие информационного окна
  • Кастомизация элементов информационного окна
  • Параллакс-эффект для элементов в информационном окне
4. Кастомизация карты
  • Изменение цвета объектов карты
  • Кастомизация элементов управления
  • Маска для карты
1. Внедрение на сайт

Добавление через вставку iframe в разметку

Если у вас нет необходимости изменять маркер, делать кастомное информационное окно или еще каким-либо образом воздействовать на карту, для ее добавления достаточно сделать следующее:


Добавление через API

Но если необходимо произвести какие-либо манипуляции, нам понадобится ключ. Если его нет рядом, можно получить тут: ссыль

Встраиваем его в адрес вместо YOUR_API_KEY:


Если нужно вызывать коллбэк после загрузки api, после ключа надо будет дописать YOUR_API_KEY&callback=initMap с названием вашей функции. Подключаем скрипт на странице и создаем в разметке блок для будущей карты:


Теперь необходимо инициализировать карту:

Function initMap() { var coordinates = {lat: 47.212325, lng: 38.933663}, map = new google.maps.Map(document.getElementById("map"), { center: coordinates }); }
Координаты можно узнать при помощи опции «Что здесь», описанной выше.

Свойства, которые могут сразу понадобиться:

  • zoom: number - определяет первоначальный масштаб.
  • disableDefaultUI: boolean – убирает элементы управления.
  • scrollwheel: boolean - отключает масштабирование колесиком мыши (бывает полезно, если карта на всю ширину страницы и перебивает прокрутку вниз).
2. Кастомизация маркера

Инициализация маркера

Для начала добавим маркер:

Function initMap() { var coordinates = {lat: 47.212325, lng: 38.933663}, map = new google.maps.Map(document.getElementById("map"), { center: coordinates }), marker = new google.maps.Marker({ position: coordinates, map: map }); }
position (обязательно) указывает начальное положение маркера. Если указать те же координаты, что и для карты, то маркер будет по центру экрана. Сместить маркер можно изменив значение координат, либо сменив положение самой карты относительно видимой области (родительского блока).
map (не обязательно) указывает карту, на которой помещается маркер.

Анимация маркера

Для маркера можно задать анимацию:

  • DROP – после загрузки карты маркер падает сверху.
  • BOUNCE – маркер подпрыгивает на месте.
function initMap() { var coordinates = {lat: 47.212325, lng: 38.933663}, map = new google.maps.Map(document.getElementById("map"), { center: coordinates }), marker = new google.maps.Marker({ position: coordinates, map: map, animation: google.maps.Animation.BOUNCE }); }
Анимацию можно задать при инициализации маркера, добавить или убрать, вызвав метод setAnimation() .

Пример анимации маркера при закрытии информационного окна и прекращении при открытии:

Google.maps.event.addListener(infowindow,"closeclick",function(){ marker.setAnimation(google.maps.Animation.BOUNCE); }); marker.addListener("click", function () { marker.setAnimation(null); });
Изображение маркера

Изображение маркера можно изменить, задав адрес картинки для свойства icon .

Image = "images/marker.png", marker = new google.maps.Marker({ position: coordinates, map: map, icon: image });
3. Кастомизация информационного окна

Добавление информационного окна

В кастомное информационное окно можно добавить любую разметку через свойство content:

Function initMap() { var coordinates = {lat: 47.212325, lng: 38.933663}, popupContent = "

Что угодно

", markerImage = "images/marker.png", map = new google.maps.Map(document.getElementById("map"), { center: {lat: 47.212325, lng: 38.933663} }), marker = new google.maps.Marker({ position: coordinates, map: map, icon: markerImage }), infowindow = new google.maps.InfoWindow({ content: popupContent }); }
Открытие информационного окна

Чтобы информационное окно было видно сразу, надо вызвать метод open() :

Infowindow.open(map, marker);
Также следует добавить вызов окна при клике на маркер (в противном случае мы не сможем открыть попап):

Marker.addListener("click", function() { infowindow.open(map, marker); });
Кастомизация элементов информационного окна

Информационное окно может быть как кастомное, так и стандартное. В кастомное мы можем добавить любые элементы и работать с ними, возможности ограничены лишь фантазией.

Основная проблема, с которой можно столкнуться при кастомизации любого из типов – края (белая область) вокруг контента и стрелочка. Эти элементы не поддаются css выборке.

Решить проблему можно при помощи псевдоэлементов для доступных блоков. Также, если по какой-либо причине нет возможности использовать лишний псевдоэлемет, рамочку можно убрать при помощи тени.

Gm-style-iw { background: $black; box-shadow: -14px 0px 0px $black, -14px 9px 0px $black, -14px -8px 0px $black, 15px -8px 0px $black, 15px 9px 0px $black; }
Но обо всем по порядку:

Gm-style-iw - основной блок, в нем находится контент. На скриншоте, расположенном выше, этот блок имеет черный фон.
.poi-info-window - обертка для текста в стандартном информационном окне, находится внутри. .gm-style-iw
.gm-style-iw + div – крестик.

Как теперь повлиять на область вне блока контента? Выйти за его пределы. В первую очередь надо добавить свойство, которое сделает видимыми блоки, выходящие за границы:

Gm-style-iw { overflow: visible !important; div { overflow: visible !important; } }
Теперь для.gm-style-iw , или блоков внутри можно создать псевдоэлементы для перекрытия фона и стрелочки:

Gm-style-iw { // Фон &::before { content: ""; width: calc(100% + 29px); height: calc(100% + 17px); @include absolute; @include center-align; background: $black; } // Стрелочка &::after { content: ""; width: 0; height: 0; border: 22px solid transparent; border-top-color: $black; z-index: 4; @include absolute; top: auto; bottom: -53px; margin: auto; } }
Получаем следующее:

Параллакс-эффект для элементов в информационном окне

Тут возникает небольшая проблема, связанная с тем, что объекты карты создаются динамически, и нельзя просто так взять и прикрепить к ним обработчик, а клонировать блок при помощи.clone(true) в контент информационного окна с переносом обработчиков нам не позволит API.

Как вариант, можно проверять наличие элемента и сохранять после появления:

Var $parallaxImg = null; this.$body.mousemove(function(e) { if($parallaxImg) { ... } else if($(this.parallaxImg).length) { $parallaxImg = $(this.parallaxImg); } }.bind(this));
Теперь просто добавим код, смещающий блок по горизонтали в зависимости от положения курсора:

Var $parallaxImg = null; this.$body.mousemove(function(e) { if($parallaxImg) { var $el = $(e.currentTarget), xPos = e.pageX - (window.innerWidth / 2), mXPcnt = Math.round(xPos / $el.width() * 100), diffX = $parallaxImg.width() - $el.width(), myX = diffX * (mXPcnt / 1500); $parallaxImg.animate({left: myX}, 0); } else if($(this.parallaxImg).length) { $parallaxImg = $(this.parallaxImg); } }.bind(this));
Если клик по динамическому элементу нужно обработать, просто ставим обработчик на обертку и ловим объект на всплытии:

$(".map").on("click", ".js-parallax-img", function() { ... });
4. Кастомизация карты

Изменение цвета объектов карты

Для стилизации карты используется массив стилей, в котором указывается селектор и css-свойство, которое необходимо применить.

Пример настроек, окрашивающих воду в фиолетовый цвет:

Var styles = [ { "featureType": "water", "stylers": [ { "color": "#a73cff" } ] } ]
Применяем параметры:

Map.setOptions({styles: styles});
Для настройки стилей проще всего использовать специализированный сервис, к примеру Google Maps APIs Styling Wizard . Для детальной настройки карты жмем «More options»:


Производим настройку:


Копируем полученный json:


Если массив стилей очень большой, его можно поместить в отдельный.json файл и применить стили после его загрузки:

$.getJSON("../json/map-style/map-style.json", function(data) { map.setOptions({styles: data}); });
В конечном итоге получаем вот такие настройки карты:

Var coordinates = {lat: 47.212325, lng: 38.933663}, popupContent = this.$popupContent.html(), markerImage = "images/marker.png", zoom = 15, map = new google.maps.Map(document.getElementById("map"), { center: coordinates, zoom: zoom, disableDefaultUI: true }), infowindow = new google.maps.InfoWindow({ content: popupContent }), marker = new google.maps.Marker({ position: coordinates, map: map, icon: markerImage }); $.getJSON("../json/map-style/map-style_colored.json", function(data) { map.setOptions({styles: data}); }); google.maps.event.addListener(infowindow,"closeclick",function(){ marker.setAnimation(google.maps.Animation.BOUNCE); }); marker.addListener("click", function () { marker.setAnimation(null); }); marker.addListener("click", function() { infowindow.open(map, marker); }); infowindow.open(map, marker);
Кастомизация элементов управления

Кнопки «Карта» и «Спутник» находятся в блоке с классом.gm-style-mtc

В добавлении на сайт карт Google Maps воспользуемся сайтом Snazzy Maps https://snazzymaps.com/
Он предлагает различные стили для карт, фильтры внизу страницы, стили отсортированы по популярности. Кроме того, есть возможность самостоятельно поменять оформление карты нажав на карандашик слева вверху.

Нажимаем на понравившуюся карту. Сбоку видим css-стили карты, а чтобы скачать js-код, нажимаем на ссылку внизу


Скачивается html-файл.
Всё, что находится внутри тега script копируем и сохраняем в файл google_map.js

В index.html подключаем скрипты


Первая строка - сама карта из google.api, код её подключения был в скачанном html-файле, мы её чуть-чуть отредактировали, убрав type="text/javascript" , так как это новым стандартом не требуется.

В файле google_map.js следующие строки отвечают за стиль карты.

styles: [{"featureType":"administrative.country","elementType":"geometry","stylers":[{"visibility":"simplified"},{"hue":"#ff0000"}]}]

Если хотим его изменить, не нужно менять весь код карты, достаточно сменить стили, скопировав их на странице понравившейся карты. То есть стилизация карты решается достаточно просто, обычным изменением стилей.

Да, в скачанном файле был ещё небольшой фрагмент css

#map {
width: 750px;
height: 500px;
}

Можем его скопировать, хоть, конечно, стили можно изменить, да и стилизовать лучше по классу, а не по id

Map {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width:100%;
height: 100%;
}

Так карта растянется во всю ширину экрана. Блок, в который вложена карта, должен иметь свойство position:relative;
Ну и понятно, что карта должна иметь id = "map" class ="contacts-map"

Вот ещё что - под картой всегда оставляйте фон с её же изображением. Это нужно для того, чтобы при отсутствии интернета на сайте оставалась хотя бы видимость наличия карты, а не пустой блок с ошибкой.

Работа с Google-картами хорошо задокументирована. Набираем в поисковике google maps api, первая ссылка https://developers.google.com/maps/?hl=ru
Выбираем Веб --- Google Maps JavaScript API --- Дополнительные материалы (на английском)

Давайте посмотрим какие настройки уже есть в файле google_map.js

zoom: 11 // масштаб карты
center: new google.maps.LatLng(40.6700, -73.9400) // центр карты. Изменить просто: находим на гугл картах нужный объект, в адресной строке копируем его координаты, заменяем их в коде. Кстати, не забудьте их же указать там, где var marker... position, чтобы отображался указатель на карте.

var mapElement = document.getElementById("map"); // это чистый js-код, который говорит, что гугл-карта помещается в элемент с id = "map"

var map = new google.maps.Map(mapElement, mapOptions); // объявление переменной в которую помещаются карта и её опции



map: map,
title: "Snazzy!"
});

Этот блок отвечает за пин - указатель на карте = его координаты и слово, которое появится при наведении курсора на указатель.

Убрать в левом верхнем углу карты переключатель Карта-Спутник

MapTypeControl: false,

Убрать желтого человечка справа внизу

streetViewControl: false,

Убрать значки "+" и "-" справа внизу

zoomControl: false,


Очень плохо, когда карта начинает скроллиться при прокрутке страницы.
Избежать этого поможет строка

scrollwheel: false

Теперь карта вообще перестала скроллиться, что тоже не хорошо.
Добавляем в файл google_map.js фрагмент кода

map.addListener("click", function() {
map.setOptions({
scrollwheel: true
});
});

Map.addListener("drug", function() {
map.setOptions({
scrollwheel: true
});
});

Map.addListener("mouseout", function() {
map.setOptions({
scrollwheel: false
});
});

Теперь карта скроллится по клику, при перетягивании, и перестаёт скроллиться как только мышка оказывается за границей карты. Удобно.

Стилизуем маркер

В код маркера добавляем строку

var marker = new google.maps.Marker({
position: new google.maps.LatLng(50.6038158,36.5851288),
map: map,
title: "Snazzy!",
icon: "i/map-pin.png"
});


Особенностью является то, что путь к изображению прописывается относительно index.html

Вот ещё. Маркер можно анимировать

animation: google.maps.Animation.DROP

Предположим, что маркер нужен не один.
Не проблема.
Копируем код и меняем имя переменной marker1, marker2, marker3...

Если предположить, что маркеров нужно не три, а тридцать, эта ситуация рассматривается в видео с 27:36 до 37:10.

Этот фрагмент кода позволит маркеру постоянно оставаться в центре при изменении размера страницы

/* Map center on resize
=========================*/
var getCen = map.getCenter();

Google.maps.event.addDomListener(window, "resize", function() {
map.setCenter(getCen);
});

Изменяем стили оформления карты Google Map. Также можно настроить отображение маркера, скрыть либо добавить объекты на карту.

Подключение скрипта Google Maps API

Подключаем скрипт добавляющий функционал добавления и редактирования карт на сайте.
Добавление карты - т.е. уже не нужно добавлять карту в виде iframe, мы создаем карту на сайте по координатам.

YOUR_API_KEY - сюда нужно скопировать сгенерированный ключ API. Его нужно создать под своей учеткой в Google API Console
В итоге мы получим код ключа, его нужно вставить в скрипт подключения Google Maps API.

Создание карты Google Maps

В верстке у нас должен быть пустой div с id=»map» (можно назначить свой id), должны быть прописаны базовые стили слоя map. !Это обязательно, без этого карта не загрузиться.

#map {width: 100%; height: 400px;}

Инициируем скрипт создания карты

function initMap() { // Метка на карте + координаты var myLatLng = {}; // Настройки карты var map = new google.maps.Map(document.getElementById("map"), { zoom: 16, center: myLatLng, // Координаты и центрирование по метке disableDefaultUI: true, mapTypeControl: true, styles: [{ featureType: "all", stylers: [{ saturation: -100 } ] }, { featureType: "all", stylers: [{ lightness: -20 } ] }, { featureType: "all", stylers: [{ gamma: 0.5 } ] }, { featureType: "road", stylers: [{ gamma: 0.85 } ] }, { featureType: "road.arterial", stylers: [{ gamma: 2.6 } ] }, { featureType: "road.highway", stylers: [{ lightness: 1 } ] }, { featureType: "road.highway", stylers: [{ gamma: 4 } ] } ] }); // Настройки метки var image = new google.maps.MarkerImage("/img/point.png", new google.maps.Size(130, 130), //размер изображения иконки в пикселях new google.maps.Point(0, 0), //позиционирование иконки new google.maps.Point(65, 65) //центр иконки); var marker = new google.maps.Marker({ position: myLatLng, icon: image, map: map, title: "Фитнес клуб PRIME" }); }

lat: 47.226517, lng: 39.7316219 - Широта и долгота объекта на карте. Как узнать координаты необходимой точки - воспользоватся сервисами определения координат:

Смещение центра

При необходимости мы можем немного сместить центр, чтобы метка находилась не по центру. Это может быть необходимо если мы помещаем рядом плашку с адресными данными.

//center: myLatLng, // комментируем центровку по метке center: {lat: 47.226517, lng: 39.7316219}, //немного корректируем данные

lat - смещение +вверх, -вниз
lng - смещение +вправо, -влево

Стили оформления карты и меток

Более подробно про стили, селекторы и метки расписано

Сервис по подбору цветовых схем для карт - snazzymaps.com . После того как подобрали необходимый вариант — копируем стили и заменяем styles от начала и до конца квадратных скобок.

Какие стили за что отвечают:

Styles: [ //{elementType: "geometry", stylers: [{color: "#ebe3cd"}]}, //земля в населенном пункте //{elementType: "labels.text.fill", stylers: [{color: "#523735"}]}, //подписи в населенном пункте (заливка) //{elementType: "labels.text.stroke", stylers: [{color: "#f5f1e6"}]}, //подписи в населенном пункте (обводка) { featureType: "administrative", // административные границы между областями и округами elementType: "geometry.stroke", stylers: [{color: "#c9b2a6"}] }, { featureType: "landscape.humanmade", // обводка домов и зданий elementType: "geometry.fill", stylers: [{color: "#d3be7e"}] }, { featureType: "landscape.humanmade", // обводка домов и зданий elementType: "geometry.stroke", stylers: [{color: "#c6b06c"}] }, { featureType: "administrative.land_parcel", // не понятно elementType: "geometry.stroke", stylers: [{color: "#dcd2be"}] }, { featureType: "administrative.land_parcel", // номера домов elementType: "labels.text.fill", stylers: [{color: "#ae9e90"}] }, { featureType: "landscape.natural", // земля вне населенных пунктов elementType: "geometry", stylers: [{color: "#dfd2ae"}] }, { featureType: "poi", // административные территории и здания (больницы, стадионы, кладбища) elementType: "geometry", stylers: [{color: "#dfd2ae"}] }, { featureType: "poi", // подписи к административным территориям и сданиям (больницы, стадионы, кладбища) elementType: "labels.text.fill", stylers: [{color: "#93817c"}] }, { featureType: "poi.park", // парки, скверы, газоны (внутри населенных пунктов) elementType: "geometry.fill", stylers: [{color: "#a5b076"}] }, { featureType: "poi.park", // подписи к паркам, скверам, газонам (внутри населенных пунктов) elementType: "labels.text.fill", stylers: [{color: "#447530"}] }, { featureType: "road", // второстепенные дороги elementType: "geometry", stylers: [{color: "#f5f1e6"}] }, { featureType: "road.arterial", // главные дороги elementType: "geometry", stylers: [{color: "#fdfcf8"}] }, { featureType: "road.highway", // трассы (может проходить в виде дороги по городу) elementType: "geometry", stylers: [{color: "#f8c967"}] }, { featureType: "road.highway", // обводка трасс elementType: "geometry.stroke", stylers: [{color: "#e9bc62"}] }, { featureType: "road.highway.controlled_access", // платные трассы elementType: "geometry", stylers: [{color: "#e98d58"}] }, { featureType: "road.highway.controlled_access", // обводка платных трасс elementType: "geometry.stroke", stylers: [{color: "#db8555"}] }, { featureType: "road.local", // название второстепенных дорог elementType: "labels.text.fill", stylers: [{color: "#806b63"}] }, { featureType: "transit.line", // жд пути elementType: "geometry", stylers: [{color: "#dfd2ae"}] }, { featureType: "transit.line", // не понятно elementType: "labels.text.fill", stylers: [{color: "#8f7d77"}] }, { featureType: "transit.line", // не понятно elementType: "labels.text.stroke", stylers: [{color: "#ebe3cd"}] }, { featureType: "transit.station", // аэропорты elementType: "geometry", stylers: [{color: "#dfd2ae"}] }, { featureType: "water", // водоемы elementType: "geometry.fill", stylers: [{color: "#b9d3c2"}] }, { featureType: "water", // подписи водоемов elementType: "labels.text.fill", stylers: [{color: "#92998d"}] } ]

Всем привет! Сегодня мы научимся не только устанавливать карту Google Maps на свой сайт (любую html страницу), но и стилизовать карты Google Maps — изменять цвета карты, а также добавлять описание к маркеру карты Google Maps, изменять вид (изображение) маркера и добавлять к нему свое описание. Поехали!)

Важное примечание. Все наши эксперименты мы будем делать локально. Для того чтобы использовать карты Google Maps на своем сайте необходимо получить специальный Auth ключ. Сделать это несложно. Его получение мы опустим и рассматривать не будем.

1. Вставка карты Google Maps

Для начала давайте создадим html страницу и вставим на нее карту Google Maps. Делать это мы будем с помощью Google Maps API. То есть пойдем продвинутым путем. Надо заметить что у Google есть хорошая документация и инструкция на русском и английском по использованию Google Maps. Так что программисты могут сразу отправиться туда. Если же вы хотите получить понятный пошаговый урок — то оставайтесь.

Теперь я опишу по очереди действия которые необходимо сделать и после приведу код страницы с комментариями. Сперва создаем HTML страницу. Затем:

  • На странице создаем элемент внутри которого у нас будет отображаться карта Google Maps.
  • Необходимо стилизовать этот элемент, задать ему высоту и ширину чтобы он был виден на странице.
  • Подключаем библиотеку Google Maps Api, чтобы создать карту и управлять ей. Без этой библиотеки карта не заработает.
  • Пишем скрипт который создаст и отобразит карту Google Maps на странице.
  • Вот код страницы который у нас получился. Обратите внимание на комментарии внутри, я описал что и где происходит.

    01 - My Google Map #map { width: 100%; height: 500px; } // Определяем переменную map var map; // Функция initMap которая отрисует карту на странице function initMap() { // В переменной map создаем объект карты GoogleMaps и вешаем эту переменную на map = new google.maps.Map(document.getElementById("map"), { // При создании объекта карты необходимо указать его свойства // center - определяем точку на которой карта будет центрироваться center: {lat: -34.397, lng: 150.644}, // zoom - определяет масштаб. 0 - видно всю платнеу. 18 - видно дома и улицы города. zoom: 8 }); }

    Теперь у нас есть вот такая карта, но не хватает маркера для указания места.
    Также вы спросите, а как указать на карте тот адрес который нам нужен.

    2. Карта Google Maps Api — определяем место и устанавливаем маркер2.1 Определяем место центрирования карты

    Давайте покажем на карте расположение Большого Театра. В параметре center мы определяли координаты центрирования карты:

    Center: {lat: -34.397, lng: 150.644},

    Нам необходимо получить такие координаты для нашего места. Для этого идем в обычную версию Google Maps и правой клавишей кликаем на интересующем нас месте. Нажимаем «Что здесь» и получаем координаты места. (55.760186, 37.618711). Заодно и изменю масштаб, установив его на 18: zoom: 18 .

    2.2 Устанавливаем маркер

    Место определили. Осталось показать маркер на карте. Внутри функции initMap() добавляем переменную для маркера:

    // Создаем маркер на карте var marker = new google.maps.Marker({ // Определяем позицию маркера position: {lat: 55.760186, lng: 37.618711}, // Указываем на какой карте он должен появится. (На странице ведь может быть больше одной карты) map: map, // Пишем название маркера - появится если навести на него курсор и немного подождать title: "Наш маркер: Большой театр" });

    Теперь у нас есть карта с маркером

    Как добавить событие по клику на карту или маркер в Google Maps

    Также на клик по маркеру можно добавить свое событие. В итоговом коде страницы мы это делать не будем. Но делается это вот так:

    Google.maps.event.addListener(marker, "click", function() { document.location="http://google.com"; });

    Первый параметр метода addListener - это объект, для которого добавляется событие, в нашем случае marker . Объектом может выступать не только маркер но и сама карта. Второй параметр click определяет тип события, в данном случае один щелчок. Третий — функция обработчик, которая сработает.

    Более подробно про маркер и возможности работы с ним рекомендую посмотреть в документации .

    2.3 Установка собственной иконки для маркера в Google Maps

    Маркер установили. Но он стандартный, и это совсем не интересно. Давайте заменим его на свою иконку. Я нашел одну подходящую иконку которую мы будем использовать.

    В описание переменной с маркером, добавлю иконку.

    // Создаем маркер на карте var marker = new google.maps.Marker({ // Определяем позицию маркера position: {lat: 55.760186, lng: 37.618711}, // Указываем на какой карте он должен появится. (На странице ведь может быть больше одной карты) map: map, // Пишем название маркера - появится если навести на него курсор и немного подождать title: "Наш маркер: Большой театр", // Укажем свою иконку для маркера icon: "theatre_icon.png" });

    Про более сложные значки — можно посмотреть в документации .

    3. Задаем свои стили оформления для карты Google Maps

    Пришло время раскрасить нашу карту. Придать ей особый и неповторимый вид. Делать мы это будем с помощью сервиса Snazzy Maps который имеет большое количество скинов для Google карт. И позволяет делать вот такие крутые карты:

    Я выбрал стиль карты который называется Blue water . На странице данного стиля можно найти код для оформления и скачать файл с примером — применения такого стилевого оформления к карте Google Maps.

    Стили для оформления карты добавляем в свойство styles которое мы указываем для переменной map — когда создаем в ней объект с картой.

    Привожу весь фрагмент кода:

    // В переменной map создаем объект карты GoogleMaps map = new google.maps.Map(document.getElementById("map"), { // При создании объекта карты необходимо указать его свойства // center - определяем точку на которой карта будет центрироваться center: {lat: 55.760186, lng: 37.618711}, // zoom - определяет масштаб. 0 - видно всю платнеу. 18 - видно дома и улицы города. zoom: 18, // Добавляем свои стили для отображения карты styles: [{"featureType":"administrative","elementType":"labels.text.fill","stylers":[{"color":"#444444"}]},{"featureType":"landscape","elementType":"all","stylers":[{"color":"#f2f2f2"}]},{"featureType":"poi","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"all","stylers":[{"saturation":-100},{"lightness":45}]},{"featureType":"road.highway","elementType":"all","stylers":[{"visibility":"simplified"}]},{"featureType":"road.arterial","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType":"water","elementType":"all","stylers":[{"color":"#46bcec"},{"visibility":"on"}]}] });

    Теперь наша карта выглядит вот так:

    4. Информационные окна

    Карту можно еще улучшить, добавив информационное окно по клику на наш маркер. Документация по ним лежит . Если вкратце, то чтобы добавить инфо окно необходимо:

  • Создать само окно и контент внутри него
  • Сделать так чтобы оно появлялось по клику на маркер.
  • Все это происходит внутри функции initMap()

    4.1 Опишем контент инфо-окна: // Создаем наполнение для информационного окна var contentString = ""+ ""+ ""+ "Большой театр"+ ""+ "

    Госуда́рственный академи́ческий Большо́й теа́тр Росси́и, или просто Большой театр - один из крупнейших" + "в России и один из самых значительных в мире театров оперы и балета.

    "+ "

    Веб-сайт: bolshoi.ru"+ "

    "+ ""+ ""; 4.2 Создадим инфо-окно // Создаем информационное окно var infowindow = new google.maps.InfoWindow({ content: contentString, maxWidth: 400 }); 4.3 Делаем так чтобы по клику на маркер — появлялось инфо-окно // Создаем прослушивание, по клику на маркер - открыть инфо-окно infowindow marker.addListener("click", function() { infowindow.open(map, marker); });

    Теперь карта с инфо-окном выглядит следующим образом:

    Также можно убирать стандартные элементы управления с карты, включать/выключать нужные и ненужные, и даже создать свои. Описание всего этого вы найдете в документации .

    Готовая карта

    Готовую получившуюся карту и код можно посмотреть ниже или на codepen .

    Когда Вам необходимо указать на карте реальное месторасположение офиса либо какого-то объекта, то сервис Google Maps предоставляет Вам очень большой спектр возможностей. Очень часто что стиль карты, которую вставляют на сайт не подходит по стилю и цветовой гамме. Но этот сервис позволяет изменить стандартный вид карты, настроить насыщенность, яркость, добавить свою иконку маркера на карту и так далее.

    Ниже находятся статьи, где Вы можете выбрать интересные эффекты при прокрутке Вашей страницы лендинга:

    СкачатьПрактическая реализация1 этап. Структура

    Здесь нужен лишь один общий контейнер, в котором будет размещаться сама карта, кнопки увеличить/уменьшить и строка с адресом:

    2 этап. Получаем API Key

    Переходим на данную страницу и получаем ключ API — Get API Key .

    Затем вставляем данный API ключ в HTML вместо слов "ВАШ_API_КЛЮЧ" :

    Чтобы получить долготу и широту, Вам необходимо в нужном месте карты Google кликнуть правой кнопкой мыши, а затем нажать "Что здесь?". Внизу Вы увидите всплывающее окошко, где будет указана долгота и широта. Вам их необходимо перенести в данный файл.

    JAVASCRIPT КОД

    Просто изменяя значения, поэкспериментируйте и подберите тот вид карты, который Вас устроит.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var style= [ { //Скрываем обозначение дорог на карте featureType: "road.highway" , elementType: "labels" , stylers: [ { visibility: "off" } ] } , { featureType: "road.highway" , elementType: "geometry.fill" , stylers: [ { hue: main_color } , { visibility: "on" } , { lightness: brightness_value } , { saturation: saturation_value } ] }

    Полный список всех свойств находится здесь — Google Maps JavaScript API V3 .




    Самое обсуждаемое
    Какие бывают выделения при беременности на ранних сроках? Какие бывают выделения при беременности на ранних сроках?
    Сонник и толкование снов Сонник и толкование снов
    К чему увидеть кошку во сне? К чему увидеть кошку во сне?


    top