Визуальное оформление карт в Google Maps JavaScript API строится вокруг системы правил, позволяющей изменять внешний вид отдельных категорий объектов: дорог, природных зон, зданий, водоёмов и элементов интерфейса. Стилизация влияет только на визуальный слой и не изменяет географические данные.
Ключевой механизм — описание стилей через объектную модель, где каждый элемент карты идентифицируется по типу и набору визуальных параметров.
Стили задаются массивом объектов, каждый из которых описывает правило изменения отображения.
Используются предопределённые категории:
road — дорогиlandscape — ландшафтbuilding — зданияwater — водоёмыpoi — точки интересаadministrative — административные границыgeometry — основная геометрия объектовlabels.text.fill — заливка текстаlabels.text.stroke — обводка текстаlabels.icon — иконкиlabels — все текстовые элементыНаиболее используемые параметры:
color — цвет (#RRGGBB)visibility — on, off,
simplifiedsaturation — насыщенность (-100…100)lightness — яркость (-100…100)gamma — коррекция гаммыweight — толщина линийДороги представляют собой один из наиболее сложных элементов для стилизации из-за их иерархии: магистрали, основные дороги, второстепенные и локальные улицы.
const styles = [
{
featureType: "road",
elementType: "geometry",
stylers: [
{ visibility: "simplified" },
{ saturation: -80 },
{ lightness: 20 }
]
}
];
Для выделения крупных транспортных артерий используется усиление контраста:
const styles = [
{
featureType: "road.highway",
elementType: "geometry",
stylers: [
{ color: "#ffffff" },
{ weight: 1.2 }
]
},
{
featureType: "road.highway",
elementType: "labels",
stylers: [
{ visibility: "on" }
]
}
];
Подход, применяемый в интерфейсах с фокусом на данные:
const styles = [
{
featureType: "road",
elementType: "geometry",
stylers: [
{ visibility: "off" }
]
}
];
Ландшафт определяет визуальное восприятие природных зон: парки, пустыни, горы, леса.
const styles = [
{
featureType: "landscape",
elementType: "geometry",
stylers: [
{ saturation: -100 },
{ lightness: 30 },
{ color: "#e5e5e5" }
]
}
];
Используется в аналитических картах:
const styles = [
{
featureType: "landscape",
elementType: "all",
stylers: [
{ visibility: "off" }
]
}
];
Комбинация контраста и цветового кодирования:
const styles = [
{
featureType: "landscape.natural",
elementType: "geometry",
stylers: [
{ color: "#d0e8d0" }
]
},
{
featureType: "landscape.man_made",
elementType: "geometry",
stylers: [
{ color: "#f0f0f0" }
]
}
];
Здания формируют визуальную плотность городской среды и часто используются для создания «архитектурной глубины» карты.
const styles = [
{
featureType: "building",
elementType: "geometry",
stylers: [
{ color: "#cccccc" },
{ lightness: 10 }
]
}
];
const styles = [
{
featureType: "building",
elementType: "geometry",
stylers: [
{ visibility: "off" }
]
}
];
const styles = [
{
featureType: "building",
elementType: "geometry",
stylers: [
{ saturation: -100 },
{ lightness: 40 },
{ color: "#dcdcdc" }
]
},
{
featureType: "building",
elementType: "labels",
stylers: [
{ visibility: "off" }
]
}
];
Классический способ применения кастомных стилей заключается в создании пользовательского типа карты.
const styles = [
{
featureType: "road",
elementType: "geometry",
stylers: [{ color: "#ffffff" }]
},
{
featureType: "landscape",
elementType: "geometry",
stylers: [{ color: "#f2f2f2" }]
},
{
featureType: "building",
elementType: "geometry",
stylers: [{ color: "#e0e0e0" }]
}
];
const styledMap = new google.maps.StyledMapType(styles, {
name: "Custom Style"
});
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 0, lng: 0 },
zoom: 2,
mapTypeControlOptions: {
mapTypeIds: ["styled_map"]
}
});
map.mapTypes.set("styled_map", styledMap);
map.setMapTypeId("styled_map");
Современная архитектура Google Maps API смещается в сторону облачного управления стилями через Map ID, где стили задаются не в коде, а в консоли Google Cloud.
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 55.751244, lng: 37.618423 },
zoom: 10,
mapId: "YOUR_MAP_ID"
});
Комплексная стилизация строится через баланс между тремя ключевыми слоями:
const styles = [
{
featureType: "road",
elementType: "geometry",
stylers: [
{ color: "#ffffff" },
{ lightness: 10 }
]
},
{
featureType: "landscape",
elementType: "geometry",
stylers: [
{ color: "#f5f5f5" }
]
},
{
featureType: "building",
elementType: "geometry",
stylers: [
{ color: "#e6e6e6" }
]
},
{
featureType: "poi",
elementType: "all",
stylers: [
{ visibility: "off" }
]
}
];
Стилизация карт строится на контроле визуального приоритета:
const styles = [
{
elementType: "geometry",
stylers: [{ color: "#1d2c4d" }]
},
{
featureType: "road",
elementType: "geometry",
stylers: [{ color: "#2b3b57" }]
},
{
featureType: "landscape",
elementType: "geometry",
stylers: [{ color: "#0f172a" }]
}
];
const styles = [
{
featureType: "all",
elementType: "labels",
stylers: [{ visibility: "off" }]
},
{
featureType: "road",
elementType: "geometry",
stylers: [{ visibility: "simplified" }]
},
{
featureType: "landscape",
elementType: "geometry",
stylers: [{ color: "#eeeeee" }]
}
];
const styles = [
{
featureType: "road.highway",
elementType: "geometry",
stylers: [
{ color: "#ffcc00" },
{ weight: 1.5 }
]
},
{
featureType: "road",
elementType: "geometry",
stylers: [
{ saturation: -50 }
]
},
{
featureType: "landscape",
elementType: "geometry",
stylers: [
{ lightness: 40 }
]
}
];