Présentation de la conception de l'API Playable Locations

L'API Playable Locations diffuse des ensembles de points géographiques sélectionnés et générés (lieux jouables). Chaque emplacement jouable est choisi par Google en fonction de son éligibilité à une utilisation dans les jeux basés sur la position, comme des points de génération pour les dépôts de réparation et les prix dans les jeux, par exemple.

Certains lieux jouables sont situés à proximité de points d'intérêt importants. D'autres sont installés sur des trottoirs le long des routes, tandis que d'autres sont installés de manière aléatoire dans des parcs, des aires de jeux, des places publiques et d'autres zones accessibles au public.

L'objectif de ce document est de fournir un aperçu de la mise en œuvre de l'API afin que les développeurs tiers puissent exploiter les concepts clés pour générer leur propre ensemble de lieux jouables à l'aide d'une autre source de données.

Contexte

Cette section présente les bibliothèques Support utilisées et présente les concepts de base liés aux emplacements jouables.

Bibliothèques Support

Les bibliothèques Support suivantes sont utilisées tout au long de ce guide.

Bibliothèque Description
Géométrie S2 Assistance flexible pour l'indexation spatiale.
Protocol Buffers Moyen extensible et indépendant du langage et de la plate-forme de sérialisation des données structurées à utiliser dans les protocoles de communication, le stockage de données, etc.

Bibliothèque S2 Geometry

La bibliothèque S2 Geometry est un système d'informations géographiques qui représente des données sur une sphère tridimensionnelle. Cette bibliothèque comprend les fonctionnalités suivantes:

  • Prise en charge de l'indexation spatiale.
    • Cela vous permet d'estimer des zones arbitraires sous forme de collections de cellules S2 discrètes.
    • Indexation spatiale en mémoire rapide de collections de points, de polylignes et de polygones.
  • Opérations constructives robustes (telles que l'intersection, l'union et la simplification) et les prédicats booléens (tels que les tests de confinement)
  • Opérations de requête efficaces pour rechercher des objets à proximité, mesurer des distances et calculer des centroïdes.
  • Ensemble de prédicats mathématiques permettant de tester les relations entre les primitives géométriques.
  • Arrondissement de l'ancrage.

Statistiques de la cellule S2

Les statistiques des cellules S2 sont utiles pour calculer des éléments tels que le temps nécessaire pour télécharger un ensemble de données à une RPS particulière.

Dépôts de code de géométrie S2

Clonez l'un de ces dépôts pour commencer à utiliser les cellules S2.

SSTables

Le format de fichier SSTable permet de stocker, traiter et échanger efficacement des ensembles de données. Une table SSTable est une carte immuable, ordonnée et persistante des clés et des valeurs, où les clés et les valeurs sont des chaînes d'octets arbitraires.

Emplacements de lecture

De manière générale, un lieu est un point géographique sur une carte, mais un lieu jouable est un lieu considéré comme approprié pour placer des objets dans des jeux du monde réel (c'est-à-dire comme des points de génération pour des éléments tels que des prix).

Types de lieux de lecture

Sélection

Les lieux de lecture sélectionnés sont des points géographiques associés à des objets qui existent à des emplacements spécifiques. Ils représentent les emplacements de points d'intérêt (POI) extraits d'une base de données Places.

Généré

S'il n'y a pas suffisamment d'emplacements jouables sélectionnés pour répondre à vos critères, l'API Playable Locations génère des emplacements jouables supplémentaires. Ces emplacements de lecture générés sont des points géographiques qui ne sont pas associés à des objets existants. Au lieu de cela, ces points géographiques sont créés par programmation et sont placés de manière aléatoire le long des trottoirs, dans des parcs, sur des plages, dans des aires de jeux, sur des places publiques et dans d'autres zones accessibles au public.

L'objectif est de fournir au moins une densité minimale de lieux jouables, en tenant compte des critères suivants:

Critères Exemple
Sécurité des joueurs Les récompenses dans les jeux ne doivent pas apparaître au milieu d'autoroutes ni dans des bases militaires.
Adéquation avec le jeu Les joueurs ne doivent pas déranger les cimetières ni les lieux de culte.

Propriétés de l'emplacement de lecture

Vous trouverez ci-dessous certaines des propriétés associées aux objets Jouables dans l'implémentation de Google que les développeurs peuvent trouver utiles pour créer des jeux basés sur la localisation.

identifiant de lieu
Chaîne alphanumérique identifiant le lieu de manière unique. Il s'agit d'un ID de lieu pour les emplacements de lecture sélectionnés (par exemple, Chlj79ZW1ohQwokRWPhGmWQ2K4). Vous pouvez utiliser l'ID de lieu d'un lieu jouable sélectionné pour y associer des métadonnées spécifiques à un jeu.
PlusCode
Plus Code qui identifie de manière unique l'emplacement de lecture généré. Les Plus Codes sont des chaînes alphanumériques. Par exemple, 23CPRV2R+WG76. Vous pouvez utiliser le Plus Code d'un établissement généré pour lui associer des métadonnées spécifiques à un jeu.
d'appareils.
Tableau de types d'emplacements de lecture (chaînes) qui spécifient le type de lieu de lecture. Le premier type du tableau est considéré comme le type principal. Par exemple, vous pouvez avoir un emplacement jouable à la fois de divertissement et de loisirs en plein air.
centerPoint
Coordonnées géographiques correspondant au point central du lieu. Il permet de déterminer si un lieu se situe dans une zone d'intérêt.
snappedPoint
Coordonnées géographiques correspondant à l'emplacement sur le trottoir de la route la plus proche (lorsqu'une route existe à proximité). Vous pouvez utiliser le point d'ancrage pour placer des objets de jeu lorsque les propriétaires d'entreprise ne souhaitent pas que des joueurs interviennent dans leurs locaux. Lorsqu'aucun point d'ancrage n'est disponible, le point central doit être utilisé.
biomeType
Lorsqu'un emplacement lisible se trouve dans un biome, ce champ est renseigné avec une ou plusieurs valeurs BiomeType. Les forêts, les zones humides et les zones urbaines sont des exemples de biomes.

Design

Sélection des points pour les jeux

Sélectionner des lieux sélectionnés

Comme indiqué ci-dessus, les lieux sélectionnés sont des points d'intérêt (POI) réels qui sont considérés comme adaptés au jeu. Vous trouverez ci-dessous une vue d'ensemble d'un pipeline de données (avec des critères de sélection et de filtrage) que vous pouvez utiliser pour générer ces emplacements. L'objectif de ce pipeline est de générer une table SStable des emplacements sélectionnés associés à des S2CellIds, qui pourront ensuite être transmis à une base de données pour les requêtes en temps réel des emplacements lisibles dans une région donnée.

Nous partons du principe que le développeur a accès à une fonctionnalité de carte ou à un dépôt de lieux qui contient un ensemble potentiel de POI en plus des géométries de régions exclues (où les lieux lisibles ne devraient pas exister).

Le pipeline fonctionne à l'aide d'une approche combinée à une liste d'autorisation/liste de blocage. Dans un premier temps, nous sélectionnons tous les POI correspondant à une liste autorisée de types adaptés au jeu (par exemple, café, bibliothèque, fleuriste, etc.). Dans une autre phase, nous filtrons tous les POI appartenant à un ensemble de régions exclues. Les régions exclues sont formées à l'aide de la géométrie (par exemple, des cadres de délimitation) de l'ensemble prédéfini d'éléments géographiques de la carte jugés inadaptés au jeu (bases militaires, cimetières, etc.) afin de générer une couverture S2. Ces couvertures S2 peuvent ensuite être utilisées pour déterminer si l'un des POI sélectionnés se trouve dans les régions exclues et, le cas échéant, les filtrer. L'ensemble final d'emplacements sélectionnés est ensuite indexé en convertissant leurs points centraux en S2CellIds au niveau 30. Cela permet d'effectuer des recherches basées sur des plages des emplacements Playables dans une région spécifiée.

Schéma du pipeline des lieux sélectionnés.

Sélectionner les lieux générés

Comme indiqué ci-dessus, les lieux générés sont utilisés pour compléter les lieux jouables dans les zones où les POI réels n'ont pas la densité requise pour le gameplay. En règle générale, nous avons déterminé qu'environ neuf lieux de jeu dans chaque cellule S2 de niveau 16 (environ 0,02 km^2) devraient suffire pour les jeux basés sur la position.

La génération de ces points géographiques "aléatoires" s'effectue également à l'aide d'une approche combinée d'une liste d'autorisation/liste de blocage. La liste d'autorisation est une liste d'éléments de la carte dans lesquels il est possible de générer des points (par exemple, des parcs, des trottoirs, etc.). La liste de blocage répertorie les zones dans lesquelles les points doivent être exclus (par exemple, plans d'eau, routes de véhicules à moteur, etc.). Dans les deux cas, les géométries d'éléments géographiques de la carte sont utilisées pour générer une couverture S2 de leurs zones respectives. Lorsque les deux ensembles sont joints, les régions exclues se chevauchant sont soustraites des régions incluses afin de générer l'ensemble final de zones candidates pour les emplacements générés. Pour la dernière étape, nous générons "de manière aléatoire" des points géographiques dans ces zones et écrivons dans une table SStable indexée à l'aide de S2CellIds au niveau 30 représentant les points centraux. Pour les établissements générés, les plus codes sont utilisés comme ID de lieu.

Schéma du pipeline des emplacements générés.

Présentation du pipeline des établissements

Comme indiqué ci-dessus, les résultats des deux pipelines de données précédents sont deux SSTables d'objets PlayableLocation indexés à l'aide de S2CellIds au niveau S2 30. Ces fichiers peuvent être chargés dans n'importe quel magasin de clés-valeurs triées pour effectuer des recherches indexées dans l'espace. Vous pouvez, par exemple, utiliser la base de données SQL distribuée de Google Spanner.

Schéma du pipeline des clés-valeurs commandées par emplacements.

Biomes

Un biome est une communauté de plantes et d'animaux qui partagent des caractéristiques d'adaptation environnementale communes. Les biomes se forment en réponse au climat physique partagé. Les forêts, les zones humides et les zones urbaines sont des exemples de biomes.

Lorsqu'un emplacement lisible se trouve dans un biome, un champ biomeType peut être renseigné avec une ou plusieurs valeurs BiomeType.

Vous pouvez utiliser les informations du biome pour placer différents types d'objets de jeu sur la carte. Par exemple, si le champ de biome contenait la valeur grassland, il pourrait générer un type d'animal différent de celui si le champ de biome contenait la valeur urban.

Vous trouverez ci-dessous la description d'un processus permettant d'ajouter des informations de biome aux emplacements jouables dans le cadre du pipeline "Locations" ci-dessus. Google Earth Engine dispose de plusieurs ensembles de données de couverture terrestre avec des classes d'informations telles que les forêts, les prairies et l'eau, qui peuvent être utilisées pour obtenir des informations biométiques. Nous vous recommandons de suivre les étapes générales suivantes pour ajouter des informations biome:

  • Sélectionnez des données contenant à la fois des informations de biome et de géolocalisation.
  • Attribuez les informations de biome en tant qu'attribut aux lieux de lecture existants en fonction de leur géolocalisation. Cela peut généralement être fait par une jointure spatiale. Par exemple, si les informations du Biome sont disponibles au niveau de la cellule S2 17 et que les emplacements jouables sont indexés à l'aide de leurs S2CellId au niveau 30, une jointure peut être effectuée comme suit :
    1. Mapper les lieux lisibles avec leurs cellules S2 au niveau 17: PlayableLocation.s2CellId.parent(17)
    2. Rejoindre avec Biome S2CellIds au niveau 17
  • Diffusez l'établissement jouable avec l'attribut biome, le cas échéant.

Schéma du dépôt de biome vers les lieux lisibles.

Interrogation des lieux de lecture

Si vous suivez les recommandations ci-dessus et que nous indexons les emplacements lisibles à l'aide de S2CellIds au niveau 30 (consultez la bibliothèque S2 pour convertir des valeurs LatLng en ID de cellule), nous pouvons effectuer des analyses basées sur une plage pour récupérer tous les emplacements lisibles dans une région particulière.

Exemple de requête:

Si vous souhaitez récupérer tous les emplacements lisibles situés dans un S2Cell de niveau 12 (~5 km^2), nous pouvons exécuter la requête suivante:

S2CellId: 0x89c2599000000000 Min. plage: 0x89c2598000000001 (s2CellId.rangeMin().id()) Plage maximale: 0x89c2599ffffff (Maxs2CellId.rangefff().id().id()).

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

Espacement

Là encore, S2Library peut être utile pour contrôler la densité des emplacements jouables dans votre jeu. Les niveaux S2 sont hiérarchiques, de sorte que chaque cellule au niveau 14 contient 4 cellules au niveau 15 et ainsi de suite (voir Statistiques des cellules S2). Vous pouvez exploiter ces propriétés lorsque vous placez des objets dans votre jeu. Par exemple, vous pouvez choisir d'avoir un "monstre" par cellule de niveau 14 et, afin de distribuer uniformément les 64 "joyaux" dans la même zone, placez un "joyau" dans chaque cellule de niveau 17 (chaque cellule de niveau 14 contient 64 cellules de niveau 17).

Interactions d'interrogation et de mise en cache

Le flux logique recommandé entre le client de jeu, le serveur de jeu, la base de données d'état du jeu et la base de données des emplacements jouables est illustré dans le schéma séquentiel suivant. Notez qu'il peut être possible de combiner l'état du jeu et les emplacements jouables en une seule base de données. Toutefois, ils sont séparés ici par souci de clarté.

Schéma d'interrogation et de mise en cache des lieux jouables.

Mise à jour de la position incorrecte

Vous trouverez ci-dessous la procédure à suivre pour recueillir des commentaires sur la qualité des lieux jouables dans votre jeu en permettant aux joueurs de signaler ces lieux. Ces rapports peuvent être traités dans un pipeline de données et utilisés pour supprimer les emplacements incorrects de la base de données des emplacements lisibles.

Nous vous recommandons d'implémenter une mise à jour de position incorrecte en procédant comme suit:

  • Créez un point d'entrée côté client (formulaire mobile ou Web) pour que les joueurs puissent envoyer des rapports structurés sur les points incorrects au développeur du jeu.
  • Créez un pipeline de données pour traiter tous les rapports reçus et générez des signaux pour aider à déterminer la gravité de chaque emplacement.
  • Selon le cas d'utilisation réel, vous pouvez utiliser un modèle de ML pur ou un modèle de ML hybride avec une solution humaine pour mettre à l'échelle le processus de modération afin de supprimer les emplacements inappropriés de la PlayableLocationsDB.

Schéma incorrect du rapport sur la position.

Voici un ensemble d'exemples de critères permettant de déterminer si un emplacement jouable est mauvais:

Critères Exemple
Non sécurisé
  • Le lieu de jeu se trouve à 50 mètres du bord de la falaise.
  • Le lieu de lecture se trouve au milieu d'une artère principale ou à proximité d'une circulation rapide.
Zones non publiques
  • Établissements gouvernementales soumis à des restrictions. comme une base militaire.
Inaccessible
  • Zones clôturées.
  • Monuments sur l'eau.
Momentanément inaccessible
  • Établissements fermés pour rénovation.
  • Établissements fermés pendant la saison.
  • Routes fermées pour réparation pendant plus d'une semaine.
Sensibles à la culture
  • Cimetières
  • Lieux de culte.