ВНИМАНИЕ. Игровые сервисы платформы Google Карт устарели с 18 октября 2021 года. Текущие пользователи будут иметь доступ к ним до 31 декабря 2022 года. В течение этого времени мы продолжим оказывать поддержку и устранять серьезные ошибки и сбои. См. Руководство по переходу на игровые сервисы , чтобы найти ресурсы, которые помогут вам спланировать следующие шаги для ваших проектов.

Обзор дизайна API игровых локаций

API Playable Locations обслуживает коллекции отобранных и сгенерированных географических точек (игровых локаций). Каждое игровое место выбирается Google на основе его пригодности для использования в играх на основе местоположения в качестве точек появления таких вещей, как ремонтные мастерские и игровые призы.

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

Цель этого документа — предоставить обзор того, как был реализован API, чтобы разработчики 3P могли использовать ключевые концепции для создания собственного набора игровых локаций с использованием альтернативного источника данных.

Фон

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

Библиотеки поддержки

В этом руководстве используются следующие вспомогательные библиотеки.

Библиотека Описание
S2 Геометрия Гибкая поддержка пространственного индексирования.
Буферы протокола Независимый от языка и платформы расширяемый способ сериализации структурированных данных для использования в протоколах связи, для хранения данных и т. д.

Библиотека геометрии S2

Библиотека геометрии S2 — это географическая информационная система, которая представляет данные о трехмерной сфере. Библиотека включает в себя следующие функции:

  • Поддержка пространственного индексирования.
    • Это позволяет вам аппроксимировать произвольные области как наборы дискретных ячеек S2.
    • Быстрое пространственное индексирование коллекций точек, полилиний и многоугольников в памяти.
  • Надежные конструктивные операции (такие как пересечение, объединение и упрощение) и логические предикаты (такие как проверка на включение).
  • Эффективные операции запросов для поиска ближайших объектов, измерения расстояний и вычисления центроидов.
  • Набор математических предикатов для проверки отношений между геометрическими примитивами.
  • Быстрое округление.

Статистика ячеек S2

Статистика ячеек S2 полезна для вычисления таких вещей, как время, необходимое для загрузки набора данных в определенном QPS.

Репозитории кода геометрии S2

Клонируйте любой из этих репозиториев , чтобы начать работу с S2 Cells.

SSTables

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

Игровые локации

Вообще говоря, локация — это географическая точка на карте, но игровая локация — это локация, которая считается подходящей для размещения игровых объектов в реальных играх (то есть в качестве точек появления таких вещей, как призы).

Типы игровых локаций

Куратор

Кураторские игровые локации — это географические точки, связанные с объектами, существующими в определенных локациях. Они представляют местоположения точек интереса (POI), взятые из базы данных Places.

Сгенерировано

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

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

Критерии Пример
Безопасность игрока Игровые призы не должны появляться посреди автострад или внутри военных баз.
Пригодность для игры Игроки не должны тревожить кладбища или места отправления культа.

Свойства игровой локации

Далее обсуждаются некоторые свойства, связанные с объектами Playable Location в реализации Google, которые разработчики могут счесть полезными для создания игр, основанных на местоположении.

идентификатор места
Буквенно-цифровая строка, однозначно идентифицирующая местоположение. Это идентификатор места для отобранных игровых локаций (например, Chlj79ZW1ohQwokRWPhGmWQ2K4 ). Вы можете использовать идентификатор места выбранной игровой локации, чтобы прикрепить метаданные игры к локации.
плюсКод
Плюс-код , который однозначно идентифицирует созданную игровую локацию. Плюс-коды представляют собой буквенно-цифровые строки. Например, 23CPRV2R+WG76 . Вы можете использовать сгенерированный код плюса местоположения, чтобы прикрепить метаданные игры к местоположению.
типы
Массив типов воспроизводимых локаций (строк), указывающих тип воспроизводимой локации. Первый тип в массиве считается первичным типом . Например, у вас может быть игровое место, которое одновременно является и развлечением, и отдыхом на свежем воздухе.
Центральная точка
Географические координаты, соответствующие центральной точке местоположения. Центральная точка используется для определения того, попадает ли местоположение в область интереса.
SnappedPoint
Географические координаты, соответствующие местоположению, привязаны к тротуару ближайшей дороги (если близлежащая дорога существует). Вы можете использовать точку привязки для размещения игровых объектов, когда владельцы бизнеса не хотят, чтобы игроки находились в их помещениях. Если точка привязки недоступна, следует использовать центральную точку.
тип биома
Когда игровая локация находится внутри биома, это поле заполняется одним или несколькими значениями BiomeType . Примерами биомов являются леса, водно-болотные угодья и городские районы.

Дизайн

Выбор очков для игры

Выбор рекомендуемых местоположений

Как упоминалось выше, кураторские локации — это реальные точки интереса (POI), которые считаются подходящими для игрового процесса. Далее будет представлен общий обзор конвейера данных (с критериями выбора и фильтрации), который можно использовать для создания этих местоположений. Целью этого конвейера является вывод SStable курируемых местоположений с ключами S2CellId, которые впоследствии могут быть переданы в базу данных для запросов в реальном времени для воспроизводимых местоположений в заданном регионе.

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

Конвейер работает с использованием комбинированного подхода к списку разрешенных/черных списков, где на одном этапе мы выбираем все POI, которые соответствуют списку разрешенных типов, которые считаются подходящими для игрового процесса (например, кафе, библиотека, цветочный магазин и т. д.), а на другом этапе мы отфильтровываем все POI, которые попадают в набор исключенных регионов. Исключенные регионы формируются с использованием геометрии (например, ограничивающих прямоугольников) предопределенного набора элементов карты, которые считаются непригодными для игрового процесса (например, военные базы, кладбища) для создания покрытия S2. Затем эти покрытия S2 можно использовать, чтобы увидеть, попадает ли какой-либо из выбранных POI в исключенные регионы, и, если да, отфильтровать их. Окончательный набор курируемых локаций затем индексируется путем преобразования их центральных точек в S2CellId на уровне 30. Это позволяет выполнять поиск воспроизводимых локаций на основе диапазона в указанном регионе.

Curated locations pipeline diagram.

Выбор сгенерированных местоположений

Как упоминалось выше, сгенерированные локации используются в дополнение к игровым локациям в областях, где реальные POI не имеют необходимой плотности для игрового процесса. Как правило, мы обнаружили, что около 9 игровых локаций в каждой ячейке S2 уровня 16 (~ 0,02 км ^ 2) должны быть достаточно плотными для игр, основанных на местоположении.

Генерация этих «случайных» географических точек также выполняется с использованием комбинированного подхода к спискам разрешенных/черных списков. Список разрешенных — это список объектов карты, где считается подходящим для создания точек (например, парки, тротуары и т. д.), а черный список — это области, точки которых следует исключить (например, водоемы, автомобильные дороги и т. д.). В обоих случаях геометрия объектов карты используется для создания покрытия S2 их соответствующих областей, и когда два набора объединяются, перекрывающиеся исключенные области вычитаются из включенных областей для создания окончательного набора областей-кандидатов для сгенерированных местоположений. В качестве последнего шага мы «произвольно» генерируем географические точки в этих областях и записываем в SStable, проиндексированный с использованием S2CellIds на уровне 30, представляющих центральные точки. Для сгенерированных местоположений плюс-коды используются в качестве идентификаторов мест.

Generated locations pipeline diagram.

Обзор конвейера

Как упоминалось выше, результатом двух предыдущих конвейеров данных являются два объекта SSTable PlayableLocation, индексированные с использованием идентификаторов S2CellId на уровне S2 30. Эти файлы можно загрузить в любое хранилище упорядоченных значений ключа для поиска с пространственной индексацией. Одним из вариантов является распределенная база данных SQL Spanner от Google.

Locations ordered key-value pipeline diagram.

Биомы

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

Когда игровая локация находится внутри биома, поле biomeType может быть заполнено одним или несколькими значениями BiomeType .

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

Ниже описан процесс добавления информации о биомах в игровые локации в рамках конвейера локаций, описанного выше. Google Earth Engine имеет несколько наборов данных о земном покрове с такими классами информации, как лес, пастбища и вода, которые можно использовать для получения информации о биоме. Мы рекомендуем следующие высокоуровневые шаги для добавления информации о биоме:

  • Курируйте данные, которые содержат информацию как о биоме, так и о геолокации.
  • Назначьте информацию о биоме в качестве атрибута существующим игровым локациям на основе их геолокации, и обычно это можно сделать с помощью пространственного соединения. Например, если информация о биоме доступна на уровне ячейки S2 17, а игровые местоположения индексируются с использованием их S2CellId на уровне 30, соединение может быть выполнено следующим образом:
    1. Сопоставьте игровые локации с их ячейками S2 на уровне 17: PlayableLocation.s2CellId.parent(17)
    2. Присоединяйтесь к Biome S2CellIds на уровне 17
  • Подавайте игровую локацию вместе с атрибутом биома, если он доступен.

Biome repository to playable locations diagram.

Запрос игровых локаций

Если следовать приведенным выше рекомендациям и мы индексируем игровые местоположения с помощью S2CellIds на уровне 30 (см. библиотеку S2 для преобразования из LatLng в идентификатор ячейки), мы можем выполнить сканирование на основе диапазона, чтобы получить все игровые местоположения в определенном регионе.

Пример запроса:

Если бы мы хотели получить все игровые локации, расположенные в S2Cell на уровне 12 (~ 5 км ^ 2), мы могли бы выполнить следующий запрос:

S2CellId : 0x89c2599000000000 Минимальный диапазон : 0x89c2598000000001 (s2CellId.rangeMin().id()) Максимальный диапазон : 0x89c2599ffffffffff (s2CellId.rangeMax().id())

SELECT * FROM PlayableLocations
WHERE S2CellId BETWEEN 0x89c2598000000001 AND 0x89c2599fffffffff;

Расстояние

S2Library снова может быть полезна для управления плотностью игровых локаций в вашей игре. Уровни S2 являются иерархическими, поэтому каждая ячейка на уровне 14 содержит 4 ячейки на уровне 15 и т. д. (см. Статистику ячеек S2 ). Эти свойства можно использовать при размещении игровых объектов в игре. Например, вы можете выбрать одного «монстра» на ячейку 14-го уровня, и, чтобы равномерно распределить 64 «драгоценности» в той же области, вы помещаете одну «драгоценность» в каждую ячейку 17-го уровня (каждая ячейка 14-го уровня содержит 64 ячейки 17-го уровня). ).

Запросы и кэширование взаимодействий

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

Playable locations querying and caching diagram.

Сообщение о неверном местоположении

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

Мы рекомендуем реализовать отчеты о неверных местоположениях, выполнив следующие действия:

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

Bad location reporting diagram.

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

Критерии Пример
Небезопасно
  • Игровая локация находится в пределах 50 метров от края обрыва.
  • Игровая локация находится посреди крупной магистрали или недалеко от быстро движущегося транспорта.
Частные зоны
  • Запрещенные государственные учреждения. Например, военная база.
недоступный
  • Участки, которые огорожены.
  • Ориентиры в воде.
Временно недоступен
  • Помещения, закрытые на ремонт.
  • Места, закрытые в сезон.
  • Дороги закрыты на ремонт больше недели.
Культурно чувствительный
  • Кладбища.
  • Места поклонения.