AVISO: Los servicios de juego de Google Maps Platform dejarán de estar disponibles el 18 de octubre de 2021. Los usuarios actuales tendrán acceso continuo hasta el 31 de diciembre de 2022. Durante este período, seguiremos brindando asistencia y soluciones para los errores y las interrupciones importantes. Consulta la Guía de transición a los servicios de juego para obtener recursos que te ayudarán a planificar los siguientes pasos de tus proyectos.

Descripción general del diseño de la API de Ubicaciones reproducibles

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La API de ubicaciones reproducibles entrega colecciones de puntos geográficos seleccionados y generados (ubicaciones reproducibles). Google elige cada ubicación reproducible según su idoneidad para usarla en juegos basados en la ubicación como puntos de preparación, entre los que se incluyen depósitos de reparación y premios.

Algunas ubicaciones reproducibles se encuentran cerca de puntos de interés importantes, algunas se encuentran en aceras de los caminos, mientras que otras se ubican al azar dentro de los parques, áreas de juegos, plazas urbanas 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, de modo que los desarrolladores externos puedan aprovechar los conceptos clave para 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 usadas y se presentan conceptos básicos relacionados con las ubicaciones reproducibles.

Bibliotecas de compatibilidad

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

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

Biblioteca de geometría S2

La Biblioteca de geometría 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 discretas S2.
    • 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 ajuste

Estadísticas de celda S2

Las estadísticas de celdas S2 son útiles para calcular elementos, como el tiempo que lleva descargar un conjunto de datos en una QPS en particular.

Repositorios de código de geometría de S2

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

Tablas SS

El formato de archivo SSTable se utiliza para almacenar, procesar e intercambiar conjuntos de datos de manera eficiente. Una SSTable proporciona un mapa inmutable, ordenado y persistente de claves a valores, en el que los valores y las claves 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 reproducible es una ubicación que se considera adecuada para colocar objetos de juego en juegos en el mundo real (es decir, como puntos de origen para cosas como premios).

Tipos de ubicaciones reproducibles

Seleccionado

Las ubicaciones reproducibles seleccionadas son puntos geográficos que se asocian con objetos que existen en ubicaciones específicas. sino que representan las ubicaciones de los lugares de interés extraídos de una base de datos de lugares.

Generado

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

El objetivo es proporcionar una densidad mínima de ubicaciones reproducibles, como mínimo, con los siguientes criterios:

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

Propiedades de ubicación reproducibles

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

placeId;
Es una string alfanumérica que identifica de forma exclusiva la ubicación. Es un ID de lugar para ubicaciones reproducibles seleccionadas (por ejemplo, Chlj79ZW1ohQwokRWPhGmWQ2K4). Puedes usar el ID de lugar seleccionado de una ubicación reproducible para adjuntar metadatos específicos del juego a la ubicación.
plusCode.
Es un código plus que identifica de forma exclusiva la ubicación reproducible. Los Plus Codes son strings 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
Un arreglo de tipos de ubicación reproducibles (strings) que especifican el tipo de ubicación reproducible. El primer tipo del arreglo se considera el tipo principal. Por ejemplo, podrías tener una ubicación que se pueda jugar tanto para entretenimiento como para actividades al aire libre.
centroDePunto
Las coordenadas geográficas correspondientes 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
Las coordenadas geográficas correspondientes a la ubicación ajustada 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 quieren jugadores en sus instalaciones. Cuando un punto ajustado no está disponible, se debe usar el punto central.
tipo_biome
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

Selección de ubicaciones seleccionadas

Como se mencionó anteriormente, las ubicaciones seleccionadas son lugares de interés reales que se consideran adecuados para juegos. 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 una SStable de ubicaciones seleccionadas codificadas en S2CellIds que posteriormente se puedan enviar a una base de datos para consultas en tiempo real de ubicaciones reproducibles de una región determinada.

Se da por supuesto que el desarrollador tiene acceso a una característica de mapa o a un repositorio de Place Repository que contiene un conjunto potencial de lugares de interés, además de geometrías de regiones excluidas (no debería haber ubicaciones reproducibles).

La canalización funciona con un enfoque combinado de lista de anunciantes permitidos o de lista de elementos bloqueados, en el que en una fase seleccionamos todos los lugares de interés que coinciden con una lista de tipos permitidos que se consideran adecuados para juegos (p. ej., cafetería, biblioteca, florería, etc.), y en otro filtramos todos los lugares de interés dentro de un conjunto de regiones excluidas. Las regiones excluidas se forman mediante la geometría (p.ej., cuadros de límite) del conjunto predefinido de elementos del mapa que se consideran inadecuados para el juego (p.ej., bases militares o cementerios) a fin de generar un cover de S2. Esos covers S2 se pueden usar para ver si alguno de los lugares de interés seleccionados se encuentra dentro de las regiones excluidas y, si es 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 realizar búsquedas basadas en rangos de ubicaciones reproducibles dentro de una región específica.

Diagrama de la 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 en las que los lugares de interés del mundo real no tienen la densidad que se necesita para jugar. Como regla general, encontramos alrededor de 9 ubicaciones reproducibles en cada celda S2 de nivel 16 (~0.02 km^2) debería tener suficiente densidad 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 lista de entidades permitidas o de lista de elementos bloqueados. La lista de entidades permitidas es una lista de elementos del mapa en los que se considera que es adecuado generar puntos (p. ej., parques, aceras, etc.) y la lista de entidades bloqueadas son los lugares donde se deben excluir los puntos (p. ej., masas de agua, rutas de vehículos motorizados, etcétera). En ambos casos, las geometrías de los atributos de 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 a fin de generar el conjunto final de áreas candidatas para las ubicaciones generadas. Como paso final, generamos al azar puntos geográficos dentro de esas áreas y escribimos en un SStable indexado con los S2CellIds del nivel 30 que representan los puntos centrales. Para las ubicaciones generadas, los más códigos se usan como ID de lugar.

Diagrama de la canalización de ubicaciones generadas

Descripción general de la canalización de ubicaciones

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

Diagrama de la canalización de clave-valor de las 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 se puede propagar con uno o más valores BiomeType.

Puedes usar la información biométrica para colocar diferentes tipos de objetos de juego en el mapa. Por ejemplo, si el campo bioma contiene el valor grassland, puede generar un tipo de criatura diferente al del campo urban.

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

  • Selecciona datos que tengan información sobre la ubicación geográfica y el bioma.
  • Asigna la información del bioma como un atributo a las ubicaciones reproducibles existentes según su ubicación geográfica, y esto suele hacerse mediante una unión espacial. Por ejemplo, si la información de Biome 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. Únete con los ID de S2Cello de Biome en el nivel 17
  • Sirve para publicar la ubicación reproducible junto con el atributo bioma.

Diagrama del repositorio de Biometo a ubicaciones reproducibles

Consultar ubicaciones reproducibles

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

Consulta de ejemplo:

Si queremos recuperar todas las ubicaciones reproducibles ubicadas en un S2Cell en el nivel 12 (~5 km^2), podríamos emitir la siguiente consulta:

S2CellId: 0x89c25990000000000 Range Min: 0x89c2598000000001 (s2CellId.rangeMin().id()) Range Max: 0x89c2599fffffffff (s2CellId.rangeMax().id())

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

Espaciado

Una vez más, la S2Library puede ser útil para controlar la densidad de las ubicaciones reproducibles en tu juego. Los niveles de 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 celda de S2). Estas propiedades se pueden aprovechar cuando se colocan objetos de juego en tu juego. Por ejemplo, puedes elegir tener un "monstruo" por celda de nivel 14 y distribuir de manera uniforme 64 "joyas" en la misma área donde colocas una "joya" en cada celda de nivel 17 (cada celda de nivel 14 contiene 64 celdas de nivel 17).

Interacciones de consulta 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 de estado del juego y la base de datos de ubicaciones reproducibles. Ten en cuenta que es posible combinar el estado del juego y las ubicaciones reproducibles en una sola base de datos, pero se dejan por separado aquí para brindar mayor claridad.

Diagrama sobre el almacenamiento en caché y las consultas de ubicaciones reproducibles.

Informes de ubicación incorrectos

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

Te recomendamos que implementes los informes de ubicación incorrectos mediante los siguientes pasos:

  • Crea un punto de entrada del lado del cliente (formulario para dispositivos móviles o web) para que los jugadores envíen informes de punto malo estructurados al desarrollador del juego.
  • Crear una canalización de datos para procesar todos los informes recibidos y generar indicadores que te ayuden a clasificar el estado de 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 + una solución humana para escalar el proceso de moderación, a fin de quitar ubicaciones inadecuadas de PlayableLocationsDB.

Diagrama de Informes de Ubicación erróneo.

El siguiente es un conjunto de criterios de ejemplo que se podrían usar para ayudar a determinar si una ubicación reproducible es mala:

Criterio Ejemplo
No seguro
  • La ubicación reproducible se encuentra a 50 metros del borde de un acantilado.
  • La ubicación reproducible se encuentra en medio de una calle principal o cerca del tráfico en movimiento.
Áreas no públicas
  • Instalaciones gubernamentales restringidas. Por ejemplo, una base militar.
Inaccesible
  • Áreas protegidas.
  • Puntos de referencia en el agua.
Inaccesible temporalmente
  • Ubicaciones que están cerradas por renovaciones.
  • Ubicaciones que están cerradas según la temporada.
  • Las rutas están cerradas por reparaciones durante más de una semana.
Sensible a la cultura
  • Cementerios.
  • Lugares de culto.