Вопрос или проблема
Доброе утро, всем, у меня есть проблема, которую я не могу решить.
Я хотел бы иметь возможность изменять цвет маркеров на картах Google с помощью HTML/JavaScript.
Я пытался следовать онлайн-документации, но не сильно в этом разобрался (я знаю, что мог бы установить это через иконку, но это меня не совсем устраивает, из документации кажется, что можно просто настроить маркер).
Следуя документации, я добавил библиотеку маркеров в свой скрипт, который ссылается на API.
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=MY_KEY&callback=initMap&sensor=false&language=it&libraries=marker"></script>
Затем я создал свой скрипт для добавления маркера (это мой основной рабочий скрипт, без продвинутых маркеров)
<script type="text/javascript">
function carica_variabili() {
//определение координат, на которые следует центрировать карту
//инициализация массивов
var lat = new Array();
var long = new Array();
var descr = new Array();
var icona = new Array();
lat[0]="44.8814093";
long[0]="10.9912888";
descr[0]="TCA PRODUCTION Srl (004176)";
lat[1]="45.5193158";
long[1]="10.1769702";
descr[1]="GRAZIOLI SRL (007484)";
var lat_centro = lat[0];
var long_centro = long[0];
//Опции карты: уровень зума 14, центрирована на определенной точке,
var Opzioni = {
zoom: 8, center: new google.maps.LatLng(lat_centro, long_centro),
mapTypeId: google.maps.MapTypeId.ROADMAP,
scaleControl: false }
var map = new google.maps.Map(document.getElementById("map_canvas"), Opzioni);
//цикл FOR для чтения значений массивов и их отображения на
//карте
var i = 0;
for (i=0; i<lat.length; i++)
{ // var marker = new google.maps.marker({
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat[i], long[i]),
map: map,
label: "A",
//animation: google.maps.Animation.DROP,
title: descr[i]});
}
}
</script>
Кто-нибудь из вас работал с этими маркерами раньше, у вас есть идея, как они работают?
Я пытался добавить PinElement и установить его как “content:” внутри моего цикла for (изменяя создание маркера с “var marker = new google.maps.Marker” на “var marker = new google.maps.marker.AdvancedMarkerElement”)
Ответ или решение
Изменение цвета маркеров Google Maps с использованием AdvancedMarkerElement
Введение
Доброе утро! В данной статье мы подробно рассмотрим, как изменить цвет маркеров на карте Google Maps с использованием JavaScript и библиотеки Advanced Marker. Google Maps API предоставляет множество функций, которые позволяют настраивать маркеры, и в этой статье мы сосредоточимся на том, как это сделать.
Установка Google Maps API и его библиотек
Сначала необходимо убедиться, что вы подключили нужные библиотеки Google Maps в вашем HTML-файле. Ваша строчка подключения выглядит верно, однако убедитесь, что вы добавили правильный ключ API и включили библиотеки маркеров:
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=marker" async defer></script>
Создание карты и добавление маркеров
В вашем коде вы уже создали основную структуру для инициализации карты и добавления маркеров. Теперь мы внесем изменения для создания маркеров с возможностью изменения их цвета.
Пример реализации
Вот как можно изменить ваш существующий код, чтобы использовать AdvancedMarkerElement
и задать цвет маркера:
<script type="text/javascript">
function initMap() {
var lat = [44.8814093, 45.5193158];
var long = [10.9912888, 10.1769702];
var descr = ["TCA PRODUCTION Srl (004176)", "GRAZIOLI SRL (007484)"];
var map = new google.maps.Map(document.getElementById("map_canvas"), {
zoom: 8,
center: new google.maps.LatLng(lat[0], long[0]),
mapTypeId: google.maps.MapTypeId.ROADMAP,
});
// Цикл для создания маркеров
for (var i = 0; i < lat.length; i++) {
createAdvancedMarker(lat[i], long[i], descr[i], map);
}
}
function createAdvancedMarker(lat, long, title, map) {
var markerElement = new google.maps.marker.AdvancedMarkerElement({
position: { lat: lat, lng: long },
title: title,
map: map,
content: document.createElement('div'),
});
// Создайте элемент с нужным цветом
var pinElement = document.createElement('div');
pinElement.style.backgroundColor = 'red'; // Здесь вы можете задать нужный вам цвет
pinElement.style.width = '20px'; // Ширина маркера
pinElement.style.height = '20px'; // Высота маркера
pinElement.style.borderRadius = '50%'; // Для создания круглой формы
pinElement.style.color = 'white'; // Цвет текста
pinElement.style.display = 'flex';
pinElement.style.alignItems = 'center';
pinElement.style.justifyContent = 'center';
pinElement.innerText = 'A'; // Метка или текст, который вы хотите отобразить
markerElement.content.appendChild(pinElement);
// Убедитесь, что маркер обновляется
markerElement.setMap(map);
}
</script>
Объяснение кода
-
initMap: В этом методе инициализируется карта и вызывается функция для создания маркеров. Мы создаем массивы для хранения координат и описаний, чтобы перебрать их в цикле.
-
createAdvancedMarker: Эта функция отвечает за создание маркеров. Внутри мы создаем
AdvancedMarkerElement
и устанавливаем его позицию на карте. -
Создание кастомизированного маркера: Внутри функции мы создаем новый элемент с определенным фоном, размером и стилем. Параметр
backgroundColor
позволяет задать любой цвет для вашего маркера.
Заключение
С помощью этого подхода вы можете легко управлять цветом ваших маркеров на карте Google Maps. Использование AdvancedMarkerElement
предоставляет много возможностей для кастомизации, и вы можете легко адаптировать представленный пример под свои нужды. Не забудьте протестировать код, чтобы убедиться в его корректной работе.
Если у вас остались вопросы или вам необходимо больше деталей, не стесняйтесь обращаться. Удачи в ваших проектах!