Descripción general del diseño de la API de Playable Locations

La API de Playable Locations entrega colecciones de puntos geográficos seleccionados y generados (ubicaciones reproducibles). Google elige cada ubicación reproducible según su idoneidad para usarse en juegos basados en la ubicación como puntos de generación de elementos como depósitos de reparación y premios.

Algunas ubicaciones jugables están cerca de puntos de interés importantes, otras están en aceras junto a las rutas y otras de forma aleatoria dentro de parques, zonas de juegos, plazas y otras áreas de acceso público.

El objetivo de este documento es proporcionar una descripción general de cómo se implementó la API para que los desarrolladores externos puedan aprovechar los conceptos clave a fin de generar su propio conjunto de ubicaciones reproducibles mediante una fuente de datos alternativa.

Información general

En esta sección, se proporciona una descripción general de las bibliotecas de compatibilidad utilizadas y se presentan conceptos básicos relacionados con las ubicaciones reproducibles.

Bibliotecas de compatibilidad

En toda esta guía, se usan las siguientes bibliotecas de compatibilidad.

Biblioteca Descripción
Geometría de S2 Compatibilidad flexible para la indexación espacial.
Protocol Buffers Es una forma extensible y neutral en cuanto al lenguaje y la plataforma, de serializar datos estructurados para usarlos en protocolos de comunicación, almacenamiento de datos y mucho más.

La biblioteca de geometría de S2

La biblioteca de geometría de S2 es un sistema de información geográfica que representa datos en una esfera tridimensional. La biblioteca incluye las siguientes funciones:

  • Compatibilidad con la indexación espacial.
    • Esto te permite aproximar áreas arbitrarias como colecciones de celdas S2 discretas.
    • Indexación espacial rápida en la memoria de colecciones de puntos, polilíneas y polígonos
  • Operaciones constructivas sólidas (como intersección, unión y simplificación) y predicados booleanos (como pruebas de contención).
  • Operaciones de consulta eficientes para encontrar objetos cercanos, medir distancias y calcular centroides
  • Una colección de predicados matemáticos para probar relaciones entre primitivas geométricas.
  • Redondeo de ajustes

Estadísticas de celdas S2

Las estadísticas de celda S2 son útiles para calcular datos como el tiempo que se tarda en descargar un conjunto de datos con una QPS en particular.

Repositorios de código de geometría de S2

Clona cualquiera de estos repositorios para comenzar a trabajar con celdas S2.

SSTables

El formato de archivo SSTable se usa para almacenar, intercambiar y procesar conjuntos de datos de manera eficiente. Un SSTable proporciona un mapa inmutable, ordenado y persistente de claves a valores, en el que las claves y los valores son strings de bytes arbitrarios.

Ubicaciones reproducibles

En términos generales, una ubicación es un punto geográfico en un mapa, pero una ubicación para jugar es una ubicación que se considera adecuada para colocar objetos de juego en juegos del mundo real (es decir, como puntos de aparición de elementos como premios).

Tipos de ubicaciones reproducibles

Seleccionado

Las ubicaciones jugadas seleccionadas son puntos geográficos asociados con objetos que existen en ubicaciones específicas. Representan las ubicaciones de los lugares de interés extraídos de una base de datos de Places.

Generado

Si no hay suficientes ubicaciones reproducibles seleccionadas para satisfacer tus criterios, la API de Playable Locations genera ubicaciones adicionales para jugar. Estas ubicaciones reproducibles generadas son puntos geográficos que no están asociados con objetos existentes. En cambio, estos puntos geográficos se crean de manera programática y se colocan de forma aleatoria a lo largo de aceras, parques, playas, parques infantiles, plazas y otras áreas de acceso público.

El objetivo es proporcionar al menos una densidad mínima de ubicaciones reproducibles, teniendo en cuenta los siguientes criterios:

Criterios Ejemplo
Seguridad del jugador Los premios de los juegos no deben aparecer en medio de autopistas ni dentro de bases militares.
Adecuación para el juego Los jugadores no deben ir a los cementerios ni a los lugares de culto.

Propiedades de la ubicación reproducible

A continuación, se analizan algunas de las propiedades asociadas con los objetos de ubicación reproducible en la implementación de Google que los desarrolladores pueden encontrar útiles para compilar juegos basados en la ubicación.

placeId
Es una cadena alfanumérica que identifica la ubicación de forma única. Este es un ID de lugar para ubicaciones seleccionadas con reproducción (por ejemplo, Chlj79ZW1ohQwokRWPhGmWQ2K4). Puedes usar el ID de lugar de una ubicación reproducible seleccionada para adjuntar metadatos específicos del juego a la ubicación.
plusCode
Es un Plus Code que identifica de forma única la ubicación reproducible generada. Los Plus Codes son cadenas alfanuméricas, Por ejemplo, 23CPRV2R+WG76. Puedes usar el código plus de una ubicación generada para adjuntar metadatos específicos del juego a la ubicación.
tipos
Es un array de tipos de ubicación reproducible (cadenas) que especifican el tipo de ubicación reproducible. El primer tipo del array se considera el tipo principal. Por ejemplo, podrías tener una ubicación reproducible que sea entretenimiento y recreación al aire libre.
centerPoint
Las coordenadas geográficas que corresponden al punto central de la ubicación. El punto central se usa para determinar si una ubicación se encuentra dentro de un área de interés.
snappedPoint
Son las coordenadas geográficas correspondientes a la ubicación, ajustadas a la acera de la ruta más cercana (cuando existe una ruta cercana). Puedes usar el punto ajustado para colocar objetos de juego cuando los propietarios de empresas no quieran que los jugadores estén dentro de sus instalaciones. Cuando un punto ajustado no está disponible, se debe usar el punto central.
biomeType
Cuando una ubicación reproducible se encuentra dentro de un bioma, este campo se propaga con uno o más valores de BiomeType. Algunos ejemplos de biomas son los bosques, los humedales y las áreas urbanas.

Diseño

Selección de puntos para videojuegos

Cómo seleccionar ubicaciones seleccionadas

Como se mencionó anteriormente, las ubicaciones seleccionadas son lugares de interés del mundo real que se consideran adecuados para el juego. A continuación, se proporciona una descripción general de alto nivel de una canalización de datos (con criterios de selección y filtrado) que se podría usar para generar estas ubicaciones. El objetivo de esta canalización es generar un SStable de ubicaciones seleccionadas con clave en S2CellIds, que luego se podría enviar a una base de datos para consultas en tiempo real sobre ubicaciones reproducibles en una región determinada.

Se da por sentado que el desarrollador tiene acceso a un componente de mapa o un repositorio de lugares que contiene un conjunto candidato de lugares de interés, además de las geometrías de las regiones excluidas (donde no deberían existir las ubicaciones reproducibles).

La canalización funciona con un enfoque combinado de listas de entidades permitidas y bloqueadas, en la que en una fase seleccionamos todos los lugares de interés que coinciden con una lista permitida de tipos que se consideran adecuados para el juego (p. ej., cafetería, biblioteca, florería, etc.) y, en otra, filtramos todos los lugares de interés que pertenecen a un conjunto de regiones excluidas. Las regiones excluidas se forman con la geometría (p.ej., cuadros delimitadores) de un conjunto predefinido de componentes de mapa que se consideran inadecuados para los juegos (p.ej., bases militares o cementerios) para generar una cobertura de S2. Esas coberturas de S2 se pueden usar para ver si alguno de los lugares de interés seleccionados se encuentra dentro de las regiones excluidas y, de ser así, filtrarlos. El conjunto final de ubicaciones seleccionadas se indexa mediante la conversión de sus puntos centrales en S2CellIds en el nivel 30. Esto permite búsquedas basadas en rangos de ubicaciones reproducibles dentro de una región específica.

Diagrama de canalización de ubicaciones seleccionadas.

Selección de ubicaciones generadas

Como se mencionó anteriormente, las ubicaciones generadas se usan para complementar las ubicaciones reproducibles en áreas donde los lugares de interés del mundo real no tienen la densidad requerida para el juego. Como regla general, encontramos alrededor de 9 ubicaciones reproducibles en cada celda S2 de nivel 16 (~0.02 km^2) que debería ser una densidad suficiente para los juegos basados en la ubicación.

La generación de estos puntos geográficos “aleatorios” también se realiza mediante un enfoque combinado de listas de entidades bloqueadas/lista de entidades bloqueadas. La lista de elementos permitidos es una lista de componentes del mapa en los que se considera apto para generar puntos (p. ej., parques, aceras, etc.), mientras que la lista de elementos bloqueados incluye áreas en las que se deben excluir ciertos puntos (p. ej., cuerpos de agua, rutas de vehículos motorizados, etcétera). En ambos casos, las geometrías de los componentes del mapa se utilizan para generar una cobertura S2 de sus respectivas áreas y, cuando los dos conjuntos se unen, las regiones excluidas superpuestas se restan de las regiones incluidas para generar el conjunto final de áreas candidatas para las ubicaciones generadas. Como paso final, generamos "aleatoriamente" puntos geográficos dentro de esas áreas y escribimos en una SStable indexada mediante el uso de S2CellIds en el nivel 30 que representa los puntos centrales. En las ubicaciones generadas, los Plus Codes se usan como IDs de lugar.

Diagrama de canalización de ubicaciones generado.

Descripción general de la canalización de ubicaciones

Como se mencionó anteriormente, el resultado de las dos canalizaciones de datos anteriores son dos SSTables de objetos PlayableLocation indexados mediante S2CellIds en el nivel de S2 30. Estos archivos se pueden cargar en cualquier almacén de pares clave-valor ordenados para búsquedas indexadas espacialmente. Una opción es Spanner, la base de datos SQL distribuida de Google.

Diagrama de canalización de clave-valor ordenado de ubicaciones.

Biomas

Un bioma es una comunidad de plantas y animales que comparten características comunes de adaptación ambiental. Los biomas se forman en respuesta a un clima físico compartido. Algunos ejemplos de biomas son los bosques, los humedales y las áreas urbanas.

Cuando una ubicación reproducible se encuentra dentro de un bioma, un campo biomeType puede propagarse con uno o más valores de BiomeType.

Puedes usar información bioma para colocar diferentes tipos de objetos de juego en el mapa. Por ejemplo, si el campo de bioma contiene el valor pradera, podría generar un tipo de criatura diferente a si el campo de bioma tuviera el valor urbano.

A continuación, se describe un proceso para agregar información bioma a las ubicaciones reproducibles como parte de la canalización de ubicaciones anterior. Earth Engine de Google tiene varios conjuntos de datos sobre la cobertura terrestre con clases de información como bosque, pradera y agua que se pueden usar para obtener información bioma. Recomendamos los siguientes pasos de alto nivel para agregar información bioma:

  • Selecciona los datos que contengan información sobre el bioma y la ubicación geográfica.
  • Asigna la información bioma como un atributo a las ubicaciones reproducibles existentes según su ubicación geográfica. Por lo general, esto se puede hacer mediante una unión espacial. Por ejemplo, si la información del bioma está disponible en el nivel 17 de la celda S2 y las ubicaciones reproducibles se indexan mediante sus S2CellId en el nivel 30, se puede realizar una unión de la siguiente manera:
    1. Asigna ubicaciones reproducibles a sus celdas S2 en el nivel 17: PlayableLocation.s2CellId.parent(17)
    2. Unir con Biome S2CellIds en el nivel 17
  • Publica la ubicación reproducible junto con el atributo bioma cuando esté disponible.

Diagrama del repositorio de bioma a ubicaciones reproducibles.

Cómo consultar ubicaciones reproducibles

Si se siguen las recomendaciones anteriores e indexamos las ubicaciones reproducibles con S2CellIds en el nivel 30 (consulta la biblioteca de S2 para convertir de LatLng a un ID de celda), podemos realizar análisis basados en rangos para recuperar todas las ubicaciones reproducibles de una región en particular.

Consulta de ejemplo:

Si quisiéramos recuperar todas las ubicaciones reproducibles ubicadas en una S2Cell en el nivel 12 (~5 km^2), podríamos generar la siguiente consulta:

S2CellId: 0x89c2599000000000 Intervalo mínimo: 0x89c2598000000001 (s2CellId.rangeMin().id()) Rango máximo: 0x89c2599fffffffff (s2CellId.Maxrange().id())

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

Espaciado

La biblioteca S2Library puede volver a ser útil para controlar la densidad de las ubicaciones reproducibles en tu juego. Los niveles S2 son jerárquicos, por lo que cada celda del nivel 14 contiene 4 celdas en el nivel 15 y así sucesivamente (consulta Estadísticas de celdas S2). Estas propiedades se pueden aprovechar cuando se colocan objetos de juego en él. Por ejemplo, puedes elegir tener un "monstruo" por celda de nivel 14 y, para distribuir 64 "joyas" de manera uniforme en esa misma área, colocas una "joya" en cada celda de nivel 17 (cada celda de nivel 14 contiene 64 celdas de nivel 17).

Interacciones de consultas y almacenamiento en caché

En el siguiente diagrama de secuencia, se muestra el flujo lógico recomendado entre el cliente del juego, el servidor del juego, la base de datos del estado del juego y la base de datos de las ubicaciones reproducibles. Ten en cuenta que es posible combinar el estado del juego y las ubicaciones reproducibles en una sola base de datos. Sin embargo, se dejan separadas aquí para mayor claridad.

Diagrama de consulta de ubicaciones reproducibles y almacenamiento en caché.

Informes de ubicación incorrectos

A continuación, se describe un proceso para recopilar comentarios sobre la calidad de las ubicaciones jugables dentro de tu juego al permitir que los jugadores informen ubicaciones que no se pueden usar. Estos informes se pueden procesar en una canalización de datos y usarse para quitar ubicaciones incorrectas de la base de datos de ubicaciones reproducibles.

Recomendamos implementar informes de ubicación incorrectos. Para ello, sigue estos pasos:

  • Crea un punto de entrada del cliente (formulario web o para dispositivos móviles) para que los jugadores envíen informes estructurados de puntos incorrectos al desarrollador del juego.
  • Crea una canalización de datos para procesar todos los informes recibidos y generar indicadores que te ayuden a clasificar qué tan mala es cada ubicación.
  • Según el caso de uso real, se puede usar un modelo de AA puro o un modelo de AA híbrido y una solución humana para escalar el proceso de moderación a fin de quitar ubicaciones inapropiadas de PlayableLocationsDB.

Diagrama de informe de ubicación erróneo.

A continuación, se incluye un conjunto de criterios de ejemplo que se podrían usar para ayudar a determinar si una ubicación reproducible es incorrecta:

Criterios Ejemplo
No es seguro
  • La ubicación para jugar se encuentra a 50 metros del borde de un acantilado.
  • La ubicación reproducible se encuentra en el medio de una vía principal o está cerca de una circulación rápida del tráfico.
Áreas privadas
  • Instalaciones gubernamentales restringidas. Por ejemplo, una base militar.
Inaccesible
  • Áreas que están cercadas.
  • Puntos de referencia en el agua.
Inaccesible temporalmente
  • Ubicaciones cerradas por renovaciones
  • Ubicaciones que están cerradas por temporada.
  • Rutas cerradas por reparaciones durante más de una semana.
Sensible a la cultura
  • Cementerios
  • Lugares de culto