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 de jeu). Chaque emplacement jouable est choisi par Google en fonction de son éligibilité à une utilisation dans les jeux basés sur la position. Cela permet de générer des points pour des équipements tels que des dépôts de réparation et des prix dans les jeux.

Certains lieux jouables sont situés à proximité de points d'intérêt importants, d'autres sont situés sur les trottoirs le long des routes, tandis que d'autres sont situé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 l'implémentation 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 les concepts de base liés aux emplacements jouables.

Bibliothèques Support

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

Bibliothèque Description
Géométrie S2 Prise en charge flexible de l'indexation spatiale.
Protocol Buffers Un moyen extensible de sérialisation des données structurées à utiliser dans des protocoles de communication, un stockage de données, etc.

La bibliothèque de géométrie S2

La bibliothèque de géométrie S2 est un système d'information géographique qui représente des données sur une sphère tridimensionnelle. Elle comprend les fonctionnalités suivantes:

  • Prise en charge de l'indexation spatiale.
    • Cela vous permet d'estimer des zones arbitraires en tant que 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 du confinement).
  • Opérations de requête efficaces pour trouver 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 des cellules S2

Les statistiques de 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 donnée.

Dépôts de code géométrique 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, tandis qu'un lieu jouable est un lieu jugé adapté pour placer des objets de jeu dans des jeux réels (c'est-à-dire des points d'apparition pour des récompenses telles que des prix).

Types de lieux de lecture

Sélection

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

Généré

S'il n'y a pas suffisamment d'emplacements de lecture 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 de manière programmatique et placés de manière aléatoire le long des trottoirs, dans les parcs, sur les plages, dans les aires de jeux, sur les 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.
Adaptation au jeu Les joueurs ne doivent pas perturber les cimetières ni les lieux de culte.

Propriétés des emplacements de lecture

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

placeId
Chaîne alphanumérique permettant d'identifier le lieu de façon 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 emplacement jouable sélectionné pour y associer des métadonnées spécifiques au jeu.
plusCode
Plus Code qui identifie de manière unique le lieu lisible 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 au jeu.
de recherche
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 "loisirs" et "loisirs_extérieur".
centerPoint
Coordonnées géographiques correspondant au point central du lieu. Le point central est utilisé pour déterminer si un lieu se situe dans une zone d'intérêt.
snappedPoint
Coordonnées géographiques correspondant à l'emplacement, alignées sur le trottoir de la route la plus proche (lorsqu'une route est à 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 soient présents dans leurs locaux. Lorsqu'aucun point d'ancrage n'est disponible, le point central doit être utilisé.
biomeType
Lorsqu'un emplacement de lecture 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 jugés 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) permettant de générer ces emplacements. L'objectif de ce pipeline est de générer une table SStable des emplacements sélectionnés rattachés à des S2CellIds, qui pourraient ensuite être transmis à une base de données pour des requêtes en temps réel sur les emplacements de lecture dans une région donnée.

L'hypothèse est que le développeur a accès à un élément cartographique ou à un dépôt de lieux qui contient un ensemble potentiel de POI en plus des géométries des régions exclues (où les lieux de lecture ne devraient pas exister).

Le pipeline fonctionne à l'aide d'une approche combinant liste de blocage et liste de blocage. Lors d'une phase, nous sélectionnons tous les POI correspondant à une liste autorisée de types considérés comme 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) d'un ensemble prédéfini d'éléments cartographiques 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 voir si l'un des POI sélectionnés se trouve dans les régions exclues et, le cas échéant, les filtrer. Le dernier ensemble 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 intégrés dans une région spécifiée.

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

Sélection des emplacements générés

Comme indiqué ci-dessus, les lieux générés sont utilisés en complément des lieux de jeu dans les zones où les POI réels n'ont pas la densité requise pour jouer. En règle générale, nous avons constaté qu'environ neuf lieux intégrés dans chaque cellule S2 de niveau 16 (environ 0,02 km^2) devraient avoir une densité suffisante pour les jeux basés sur la position.

Ces points géographiques "aléatoires" sont également générés à l'aide d'une approche combinée de listes d'autorisation et de blocage. La liste d'autorisation est une liste d'éléments cartographiques où il est possible de générer des points (par exemple, des parcs, des trottoirs, etc.). La liste de blocage répertorie les zones où les points doivent être exclus (étendues d'eau, routes pour véhicules motorisés, etc.). Dans les deux cas, les géométries d'éléments cartographiques 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. La dernière étape consiste à générer "de manière aléatoire" des points géographiques dans ces zones et à écrire dans une table SStable indexée à l'aide des 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.

Diagramme du pipeline des emplacements générés.

Présentation du pipeline des emplacements

Comme indiqué ci-dessus, la sortie des deux pipelines de données précédents est constituée de 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 paires clé-valeur 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.

Diagramme du pipeline clés-valeurs commandées par emplacements.

Biomes

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

Lorsqu'un emplacement de lecture 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 produire un type d'animal différent de celui obtenu 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 à des emplacements lisibles dans le cadre du pipeline "Locations" ci-dessus. Earth Engine de Google dispose de plusieurs ensembles de données sur la couverture végétale avec des classes d'informations telles que les forêts, les prairies et l'eau, qui peuvent être utilisées pour obtenir des informations sur les biomes. Nous vous recommandons de suivre les étapes générales suivantes pour ajouter des informations sur les biomes:

  • sélectionner des données contenant à la fois des informations de biome et de géolocalisation ;
  • Attribuez les informations du biome en tant qu'attribut aux emplacements de jeu existants en fonction de leur géolocalisation. Cette opération peut généralement être effectuée via une jointure spatiale. Par exemple, si les informations Biome sont disponibles au niveau de la cellule S2 17 et que les emplacements jouables sont indexés à l'aide de leurs identifiants S2CellId au niveau 30, une jointure peut être effectuée comme suit :
    1. Mappez les emplacements lisibles avec leurs cellules S2 au niveau 17: PlayableLocation.s2CellId.parent(17)
    2. Participer avec Biome S2CellIds au niveau 17
  • Fournissez le lieu de jeu avec l'attribut de biome, le cas échéant.

Diagramme du dépôt Biome vers des lieux jouables.

Interrogation des lieux lisibles

Si vous suivez les recommandations ci-dessus et que nous indexons les emplacements de lecture à l'aide de S2CellIds au niveau 30 (consultez la bibliothèque S2 pour convertir la valeur 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 spécifique.

Exemple de requête:

Pour récupérer tous les emplacements intégrés situés dans un S2Cell au niveau 12 (environ 5 km^2), nous pourrions émettre la requête suivante:

S2CellId: 0x89c2599000000000 Min. plage: 0x89c2598000000001 (s2CellId.rangeMin().id()) Max. plage: 0x89c2599ffffff (s2CellId.rangeMax().id())

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

Espacement

La bibliothèque S2Library peut à nouveau être utile pour contrôler la densité des emplacements jouables dans votre jeu. Les niveaux S2 sont hiérarchiques. Chaque cellule au niveau 14 contient donc quatre 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 cette même zone, placez un "joyau" dans chaque cellule de niveau 17 (chaque cellule de niveau 14 contient 64 cellules de niveau 17).

Interactions interrogation et 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 de séquence 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, pour plus de clarté, ils sont ici séparés.

Diagramme illustrant l'interrogation et la 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 jouables.

Nous vous recommandons de mettre en œuvre 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 erronés au développeur du jeu.
  • Créez un pipeline de données pour traiter tous les rapports reçus et générer des signaux pour aider à classer le niveau d'intégrité 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 PlayableLocationsDB.

Diagramme de mise à jour de la position incorrect.

Voici un ensemble d'exemples de critères pouvant être utilisés pour déterminer si un emplacement de lecture est incorrect:

Critères Exemple
Non fiable
  • Le lieu de jeu se trouve à moins de 50 mètres du bord d'une falaise.
  • Le lieu jouable se trouve au milieu d'une artère principale ou à proximité d'une circulation rapide.
Zones privées
  • Installations gouvernementales soumises à des restrictions. Par exemple, une base militaire.
Inaccessible
  • Zones cloisonnées.
  • Monuments sur l'eau.
Temporairement inaccessible
  • Établissements fermés pour rénovation.
  • Établissements fermés à certaines périodes de l'année
  • Routes fermées pour réparation pendant plus d'une semaine.
Sensible d'un point de vue culturel
  • Cimetières
  • Lieux de culte