Styled Maps — механизм кастомизации визуального представления карты, позволяющий управлять цветами, видимостью и стилизацией отдельных географических объектов и элементов интерфейса карты. В основе лежит декларативная модель описания стилей через JSON-структуру, применяемую к слоям карты (дороги, водоёмы, административные границы, подписи и т.д.).
Система стилей встроена в платформу Google Maps и работает на уровне рендеринга тайлов, не затрагивая геоданные. Это означает, что стилизация влияет только на отображение, но не на сами данные карты.
Стилизация в Google Maps JavaScript API основана на массиве объектов
MapTypeStyle, каждый из которых описывает правило изменения
визуального элемента карты.
Общая структура:
Каждое правило применяется последовательно, формируя итоговый визуальный слой карты.
featureType определяет, к какому классу объектов
применяется стиль.
Основные категории:
all — все объектыroad — дорогиwater — водные объектыlandscape — ландшафтpoi — точки интересаtransit — транспортная инфраструктураadministrative — административные границыДополнительно существуют подкатегории:
road.highwayroad.arterialroad.localpoi.parkwater и другиеИерархия позволяет задавать как глобальные, так и точечные стили.
elementType уточняет, какая именно часть feature будет
стилизована:
geometry — геометрия объекта (форма, заливка,
линии)geometry.fill — заливкаgeometry.stroke — контурlabels — все подписиlabels.text.fill — заливка текстаlabels.text.stroke — обводка текстаlabels.icon — иконки объектовЕсли elementType не указан, стиль применяется ко всем
элементам feature.
stylers — массив объектов, каждый из которых содержит
одно правило изменения внешнего вида.
Основные свойства:
color — цвет (HEX)visibility — видимость (on,
off, simplified)weight — толщина линийlightness — яркостьsaturation — насыщенностьgamma — гамма-коррекцияinvert_lightness — инверсия яркостиhue — оттенокПример логики применения:
Базовый формат описания:
const styles = [
{
featureType: "water",
elementType: "geometry",
stylers: [
{ color: "#000000" },
{ visibility: "on" }
]
}
];
Этот массив передаётся в MapTypeStyle или используется
через StyledMapType.
Стили применяются через создание нового типа карты:
const styledMap = new google.maps.StyledMapType(styles, {
name: "Custom Style"
});
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 40.7, lng: -74.0 },
zoom: 10,
mapTypeControlOptions: {
mapTypeIds: ["roadmap", "styled_map"]
}
});
map.mapTypes.set("styled_map", styledMap);
map.setMapTypeId("styled_map");
StyledMapType регистрируется как отдельный слой и может быть переключаемым.
Несколько правил могут применяться к одному featureType:
const styles = [
{
featureType: "road",
elementType: "geometry",
stylers: [{ color: "#ffffff" }]
},
{
featureType: "road",
elementType: "labels.text.fill",
stylers: [{ color: "#999999" }]
}
];
Порядок имеет значение: последующие правила могут переопределять предыдущие.
Одно из ключевых применений Styled Maps — управление информационной перегруженностью.
Пример отключения объектов:
const styles = [
{
featureType: "poi",
stylers: [{ visibility: "off" }]
},
{
featureType: "transit",
stylers: [{ visibility: "off" }]
}
];
Это используется для:
Минимализм достигается комбинацией:
const styles = [
{
elementType: "geometry",
stylers: [{ saturation: -80 }, { lightness: 20 }]
},
{
featureType: "poi",
stylers: [{ visibility: "off" }]
}
];
Dark mode реализуется через инверсию светлоты и настройку цветовой палитры.
const styles = [
{
elementType: "geometry",
stylers: [{ color: "#1d2c4d" }]
},
{
featureType: "road",
elementType: "geometry",
stylers: [{ color: "#2b3c6f" }]
},
{
featureType: "water",
elementType: "geometry",
stylers: [{ color: "#0e1626" }]
}
];
Такие стили используются в:
Стили применяются по принципу каскада:
Конфликты разрешаются в пользу более специфичного правила.
Стили можно менять во время выполнения:
map.setOptions({ styles: newStyles });
Это позволяет:
Styled Maps часто используются как слой визуальной интерпретации данных:
Пример: выделение дорог и затемнение остального:
const styles = [
{
featureType: "all",
stylers: [{ color: "#e0e0e0" }]
},
{
featureType: "road",
stylers: [{ color: "#ff0000" }]
}
];
Система имеет ряд ограничений:
Styled Maps изменяет только визуальное представление, не позволяя модифицировать данные или логику карты.
Стили применяются на уровне рендеринга тайлов, поэтому:
Однако чрезмерно сложные стили с множеством правил могут увеличивать нагрузку на GPU при отрисовке интерфейса.
Большие стили часто разбиваются на логические блоки:
Такой подход упрощает поддержку и масштабирование визуальных тем.
Стили могут храниться:
Это позволяет динамически загружать темы карт без изменения логики приложения.
Часто встречающиеся подходы:
Каждый паттерн строится на комбинации featureType,
elementType и stylers, образуя гибкую систему
визуального контроля.