Привлекайте клиентов в режиме реального времени с помощью Advanced Markers & Огневая база

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

На главном изображении показана карта Google Maps JS с центром в Сан-Франциско. В некоторых локациях есть красочные маркеры с надписью «2 минуты», «4 минуты».

Маркеры карты — это полезный инструмент, предоставляющий пользователям богатые возможности картографирования. Атрибуты маркера, такие как размер, цвет и форма, могут передавать дополнительную информацию о каждом отмеченном месте. В некоторых случаях эта дополнительная информация может меняться динамически, и разработчик может захотеть, чтобы визуализация карты обновлялась, сохраняя ощущение новизны для пользователя.

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

  • Доступность номеров в отеле : на карте, показывающей результаты поиска отелей, наличие свободных номеров является важным сигналом, который может побудить пользователей сделать бронирование в отеле по мере уменьшения количества номеров.
  • Доступность парковочных мест : на карте парковочных мест пользователи могут с уверенностью выбрать место назначения, где для них будет место по прибытии.
  • Рестораны открыты, скоро закрываются и закрыты : на карте, показывающей результаты поиска ресторанов, важно, чтобы пользователи знали, может ли ресторан быть закрыт по прибытии.

Решение для динамических расширенных маркеров

Теперь давайте рассмотрим создание карты с использованием расширенных маркеров для визуализации динамических данных. Как упоминалось ранее, сценарий использования — сеть розничных магазинов, использующая свою систему управления очередью на кассы для оценки и визуализации времени ожидания для пользователей. Это архитектура приложения:

Диаграмма архитектуры иллюстрирует доступ пользователя к веб-приложению. Инфраструктура веб-приложения Google (GMP и облачные функции Firebase). Firebase Cloud Functions получает доступ к оперативным данным из серверной части клиента.

Шаг 1. Определите атрибуты для определения визуального опыта

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

Следующим шагом является выбор одного или нескольких соответствующих атрибутов маркера для визуального обозначения времени ожидания на маркере карты. Список атрибутов маркера доступен в спецификации PinElement . Вы также можете использовать собственный HTML для более широких возможностей настройки.

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

  • Цвет маркера : синий для времени ожидания менее 5 минут, желтый для времени ожидания более 5 минут.
  • Содержимое маркера (требуются специальные HTML-маркеры) : мы включим текущее время ожидания в минутах в сам маркер.

Шаг 2. Настройка подключения к источникам данных реального времени

Существует несколько способов подключения к источникам данных, и правильное решение зависит от вашего варианта использования и технической инфраструктуры. В этом примере мы используем метод извлечения, при котором мы регулярно запрашиваем обновленные данные о времени ожидания через HTTP-запросы (REST). В следующих разделах вы увидите альтернативные архитектуры, использующие методы push-уведомлений.

Чтобы наше приложение могло получить доступ к данным о времени ожидания с нашего сервера, наша архитектура использует облачные функции для Firebase . Облачные функции позволяют нам определить серверную функцию для доступа к этим данным и их вычисления. Мы также включаем библиотеку Firebase в наше веб-приложение, что позволяет нам получить доступ к нашей облачной функции через HTTP-запрос.

Следующий шаг — обеспечить актуальность данных для пользователя. Для этого мы установили таймер с помощью функции javascript setInterval с таймаутом 30 секунд. Каждый раз, когда срабатывает таймер, мы запрашиваем обновленные данные о времени ожидания, как описано выше. Как только мы получим новые данные, мы должны обновить внешний вид маркеров карты. На следующем шаге подробно описано, как внести эти изменения.

Шаг 3 — Рендеринг маркеров карты

Теперь мы можем использовать расширенные маркеры для отображения стилизованных маркеров на карте. Расширенные маркеры можно отображать на картах, созданных с помощью Maps Javascript API платформы Google Maps . При использовании расширенных маркеров обязательно включите параметр Map ID в запрос карты JS.

В приведенном ниже фрагменте кода мы создаем маркеры и определяем их содержимое, создавая HTML-элемент div:

// Create the content div for the marker
storeWaitLabels[store_index] = document.createElement("div");

// Create the marker
markers.push(new google.maps.marker.AdvancedMarkerElement({
      map,
      position: { lat: latlngs[store_index][0], lng: latlngs[store_index][1] },
      content: storeWaitLabels[store_index]
    }));

Последний шаг — обновить текст маркера и стиль CSS для каждого магазина. Приведенный ниже код считывает обновленные данные о времени ожидания и назначает стиль каждому значку магазина на основе времени ожидания:

// Update the visual appearcance of a map marker
storeWaitLabels[store_index].textContent = waitTimes[store_index] + " min";
     if (waitTimes[store_index] > 5)
storeWaitLabels[store_index].className = "wait-over-5";
     else storeWaitLabels[store_index].className = "wait-under-5";

Карта теперь использует существующий API времени ожидания для визуализации актуального времени ожидания для пользователей:

На главном изображении показана карта Google Maps JS с центром в Сан-Франциско. В некоторых локациях есть красочные маркеры с надписью «2 минуты», «4 минуты».

Альтернативные способы подключения к источникам данных в реальном времени

Существуют различные способы подключения к источникам данных в реальном времени. Ниже мы рассмотрим два альтернативных варианта: Firebase Cloud Messaging и Websockets. Какой бы подход вы ни выбрали, обязательно учтите следующие факторы, чтобы ваш инструмент карты оставался эффективным:

  • Частота обновлений
  • Объем данных
  • Количество маркеров на карте
  • Возможности оборудования и браузера

Облачный обмен сообщениями Firebase

Firebase Cloud Messaging — это push-подход. Используя этот подход, вы будете отправлять обновления в картографическое приложение каждый раз, когда данные времени ожидания обновляются на серверной стороне. Сообщения об обновлении запускают функцию обратного вызова, целью которой является обновление внешнего вида и содержимого маркера.

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

Вебсокеты

WebSockets — это еще один подход к поддержанию актуальности данных, основанный на push-уведомлениях. Как и в предыдущем сценарии, вы можете использовать WebSockets для установления постоянного соединения между вашим сервером и картографическим приложением. Функциональные преимущества этого подхода по своей природе аналогичны Firebase Cloud Messaging, однако для настройки необходимой инфраструктуры может потребоваться дополнительная работа.

Заключение

Разработчики могут комбинировать источники данных в реальном времени с расширенными маркерами для создания интуитивно понятных визуализаций на Картах Google. Существует несколько способов подключения этих источников данных в зависимости от требований карты, пользовательского оборудования и браузера, а также объема данных. Затем интегрированные данные можно использовать для управления внешним видом расширенных маркеров в режиме реального времени, обеспечивая пользователям динамичный опыт.

Следующие действия

Дальнейшее чтение:

Авторы

Основные авторы:

Джим Лефлар | Инженер по решениям платформы Google Maps

Джон Брэниган | Старший инженер по работе с клиентами Google Cloud Platform

Стив Барретт | Инженер по решениям платформы Google Maps