L'API Playable locations pubblica raccolte di punti geografici selezionati e generati (località riproducibili). Ogni luogo di gioco viene scelto da Google in base alla sua idoneità all'utilizzo in giochi basati sul luogo come punti di generazione per attività come depositi di riparazioni e premi per i giochi.
Alcuni giochi si trovano vicino a punti di interesse importanti, altri sul marciapiede lungo le strade, mentre altri si trovano in modo casuale all'interno di parchi, aree giochi, piazze e altre aree pubblicamente accessibili.
L'obiettivo di questo documento è fornire una panoramica dell'implementazione dell'API, in modo che gli sviluppatori di terze parti possano sfruttare i concetti chiave per generare il proprio insieme di posizioni riproducibili utilizzando un'origine dati alternativa.
Contesto
Questa sezione fornisce una panoramica delle librerie di supporto utilizzate e introduce concetti di base relativi ai luoghi giocabili.
Librerie di supporto
In questa guida vengono utilizzate le seguenti librerie di supporto.
Raccolta | Descrizione |
Geometria S2 | Supporto flessibile per l'indicizzazione spaziale. |
Buffer di protocollo | Un modo estensibile e indipendente dal linguaggio e dalla piattaforma per serializzare i dati strutturati per l'utilizzo nei protocolli di comunicazione, nell'archiviazione dei dati e altro ancora. |
S2 Geometry Library
La S2 Geometry Library è un sistema informativo geografico che rappresenta i dati su una sfera tridimensionale. La libreria include le seguenti funzionalità:
- Supporto per l'indicizzazione spaziale.
- In questo modo puoi approssimare le aree arbitrarie come raccolte di celle S2 discrete.
- Indicizzazione spaziale rapida in memoria di raccolte di punti, polilinee e poligoni.
- Operazioni costruttive solide (come intersezione, unione e semplificazione) e predicati booleani (come il test del contenimento).
- Operazioni di query efficienti per trovare oggetti vicini, misurare distanze e calcolare centroidi.
- Una raccolta di predicati matematici per verificare le relazioni tra le primitive geometriche.
- Aggancio arrotondamento.
Statistiche sulle celle S2
Le statistiche sulle celle S2 sono utili per calcolare elementi come il tempo necessario per scaricare un set di dati a un determinato QPS.
Repository di codice per la geometria S2
Clona uno di questi repository per iniziare a lavorare con le celle S2.
SSTables
Il formato file SSTable viene utilizzato per archiviare, elaborare e scambiare in modo efficiente i set di dati. Una tabella SSTable fornisce una mappa immutabile permanente e ordinata dalle chiavi ai valori, dove sia le chiavi che i valori sono stringhe di byte arbitrarie.
Posizioni disponibili per la riproduzione
In generale, una località è un punto geografico su una mappa, mentre una località giocabile è una posizione ritenuta adatta per posizionare oggetti di gioco in giochi reali (ovvero come punti di generazione per cose come i premi).
Tipi di luoghi riproducibili
Selezionati
Le posizioni riproducibili selezionate sono punti geografici associati agli oggetti che si trovano in posizioni specifiche. Rappresentano le posizioni dei punti d'interesse (PDI) ricavati da un database di Places.
Generati
Se non ci sono abbastanza luoghi giocabili selezionati per soddisfare i tuoi criteri, l'API Playable locations genera luoghi giocabili extra. Queste posizioni riproducibili generate sono punti geografici non associati ad oggetti esistenti. Questi punti geografici vengono invece creati in modo programmatico e vengono posizionati in modo casuale lungo i marciapiedi, all'interno di parchi, spiagge e parchi giochi, piazze cittadine e altre aree pubblicamente accessibili.
L'obiettivo è fornire almeno una densità minima di luoghi riproducibili, tenendo in considerazione i seguenti criteri:
Criteri | Esempio |
Sicurezza dei giocatori | I premi dei giochi non devono apparire tra le autostrade o all'interno di basi militari. |
Idoneità per il gameplay | I giocatori non devono disturbare cimiteri o luoghi di culto. |
Proprietà posizione riproducibili
Di seguito vengono descritte alcune delle proprietà associate agli oggetti Posizione Sala giochi nell'implementazione di Google che gli sviluppatori potrebbero trovare utili per creare giochi basati sulla posizione.
- placeId
- Una stringa alfanumerica che identifica in modo univoco la località. Si tratta di un ID luogo per le località riproducibili selezionate (ad esempio Chlj79ZW1ohQwokRWPhGmWQ2K4). Puoi utilizzare l'ID luogo di un luogo giocabile selezionato per allegare metadati specifici del gioco al luogo.
- plusCode
- Un Plus Code che identifica in modo univoco il luogo di riproduzione generato. I Plus Code sono stringhe alfanumeriche. Ad esempio, 23CPRV2R+WG76. Puoi utilizzare il Plus Code di un luogo generato per allegare metadati specifici del gioco alla località.
- tipi
- Un array di tipi di posizione per la riproduzione (stringhe) che specificano il tipo di luogo per la riproduzione. Il primo tipo dell'array è considerato il tipo primario. Ad esempio, potresti avere un luogo riproducibile che offre intrattenimento e svago all'aperto.
- centerPoint
- Le coordinate geografiche corrispondenti al punto centrale della località. Il punto centrale viene utilizzato per determinare se una località rientra in un'area di interesse.
- snappedPoint
- Le coordinate geografiche corrispondenti alla posizione agganciata al marciapiede della strada più vicina (quando è presente una strada vicina). Puoi utilizzare il punto agganciato per posizionare oggetti di gioco quando i proprietari di attività non vogliono giocatori nelle loro sedi. Quando un punto agganciato non è disponibile, deve essere utilizzato il punto centrale.
- biomeType
- Quando un luogo giocabile si trova all'interno di un bioma, questo campo viene popolato con uno o più valori BiomeType. Esempi di biomi sono foreste, paludi e aree urbane.
Design
Selezione con punti per giochi
Selezione delle località curate
Come accennato in precedenza, i luoghi selezionati sono punti di interesse (PDI) reali ritenuti adatti per il gameplay. Di seguito viene fornita una panoramica generale di una pipeline di dati (con criteri di selezione e filtro) che potrebbe essere utilizzata per generare queste località. L'obiettivo di questa pipeline è generare una tabella SStable di località selezionate codificata su S2CellId che potrebbe essere successivamente inserita in un database per query in tempo reale per le località riproducibili in una determinata regione.
Si presume che lo sviluppatore abbia accesso a una funzionalità della mappa o a un repository di luoghi che contiene un insieme candidato di PDI oltre alle geometrie delle regioni escluse (in cui non devono esistere le località riproducibili).
La pipeline funziona con un approccio combinato di liste consentite e liste bloccate: in una fase vengono selezionati tutti i PDI che corrispondono a un elenco consentito di tipi ritenuti adatti al gameplay (ad es.bar, biblioteca, fioraio e così via). In un'altra fase, vengono filtrati tutti i PDI che rientrano in un insieme di regioni escluse. Le regioni escluse sono create utilizzando la geometria (ad es. riquadri di delimitazione) di un insieme predefinito di caratteristiche della mappa che sono considerate inadatte per il gameplay (ad esempio basi militari, cimiteri) per generare una copertura S2. Queste coperture S2 possono essere utilizzate per vedere se i PDI selezionati rientrano nelle regioni escluse ed eventualmente escluderli. L'insieme finale delle località selezionate viene quindi indicizzato convertindo i punti centrali in S2CellId a livello 30. Ciò consente ricerche basate su intervallo di località riproducibili all'interno di una regione specificata.
Selezione delle località generate
Come accennato in precedenza, le località generate vengono utilizzate per integrare i luoghi di gioco nelle aree in cui i PDI reali non hanno la densità necessaria per il gameplay. Come regola generale abbiamo trovato circa 9 luoghi giocabili in ogni cella S2 di livello 16 (circa 0,02 km^2) dovrebbe essere una densità sufficiente per i giochi basati sulla posizione.
Anche la generazione di questi punti geografici "casuali" viene eseguita utilizzando un approccio combinato di liste consentite e liste bloccate. La lista consentita è un elenco di elementi della mappa per i quali si ritiene adatta la generazione di punti (ad es. parchi, marciapiedi e così via) mentre la lista bloccata indica le aree in cui i punti devono essere esclusi (ad es. corpi d'acqua, strade per veicoli a motore e così via). In entrambi i casi, le geometrie degli elementi della mappa vengono utilizzate per generare una copertura S2 delle rispettive aree e, quando i due insiemi vengono uniti, le regioni escluse sovrapposte vengono sottratte dalle regioni incluse per generare l'insieme finale di aree candidate per le località generate. Come passaggio finale, generiamo "in modo casuale" punti geografici all'interno di queste aree e scriviamo in un oggetto SStable indicizzato utilizzando gli S2CellId al livello 30 che rappresentano i punti centrali. Per le località generate, vengono utilizzati più codici come ID luogo.
Panoramica della pipeline delle località
Come accennato in precedenza, l'output delle due pipeline di dati precedenti è costituito da due SSTables di oggetti PlayableLocation indicizzati utilizzando S2CellIds a livello S2 30. Questi file possono essere caricati in qualsiasi archivio di valori-chiave ordinati per le ricerche indicizzate spazialmente. Un'opzione è il database SQL distribuito di Google Spanner.
Biomi
Un bioma è una comunità di piante e animali che condividono caratteristiche di adattamento ambientale comuni. I biomi si formano in risposta a un clima fisico condiviso. Esempi di biomi sono foreste, paludi e aree urbane.
Quando un luogo giocabile si trova all'interno di un bioma, un campo biomeType può essere popolato con uno o più valori BiomeType.
Puoi utilizzare le informazioni bioma per posizionare diversi tipi di oggetti di gioco sulla mappa. Ad esempio, se il campo bioma conteneva il valore grassland, potrebbe generare un tipo di creatura diverso rispetto al caso in cui il campo bioma contenesse il valore urban.
Di seguito viene descritta la procedura per aggiungere informazioni sul bioma alle Località di Sala giochi nell'ambito della pipeline Località indicata sopra. Earth Engine di Google dispone di diversi set di dati relativi alla copertura del suolo con classi di informazioni come foreste, praterie e acqua che possono essere utilizzate per reperire informazioni sulla bioma. Consigliamo i seguenti passaggi di alto livello per l'aggiunta di informazioni sul bioma:
- Seleziona dati contenenti informazioni sul bioma e sulla geolocalizzazione.
- Assegna le informazioni del bioma come attributo a luoghi di gioco esistenti in base alla loro geolocalizzazione, in genere mediante un join spaziale.
Ad esempio, se le informazioni sul bioma sono disponibili al livello 17 della cella S2 e le località riproducibili sono indicizzate utilizzando i rispettivi S2CellId al livello 30, è possibile eseguire un join come segue:
- Mappa i luoghi giocabili nelle loro celle S2 al livello 17: PlayableLocation.s2CellId.parent(17)
- Partecipa con Biome S2CellIds al livello 17
- Pubblica il luogo Sala giochi insieme all'attributo bioma, se disponibile.
Esecuzione di query sulle posizioni riproducibili
Se i suggerimenti precedenti vengono seguiti e indicizziamo le posizioni riproducibili utilizzando S2CellIds al livello 30 (vedi la libreria S2 per la conversione da LatLng all'ID cella), possiamo eseguire scansioni basate su intervallo per recuperare tutte le posizioni riproducibili in una determinata regione.
Query di esempio:
Se volessimo recuperare tutte le Posizioni riproducibili situate all'interno di una cella S2 a livello 12 (~5 km^2) potremmo eseguire la seguente query:
S2CellId: 0x89c2599000000000 Intervallo minimo: 0x89c2598000000001 (s2CellId.rangeMin().id()) Intervallo Max: 0x89c2599fffffffff (s2CellId())rangeMax.
SELECT * FROM PlayableLocations
WHERE S2CellId BETWEEN 0x89c2598000000001 AND 0x89c2599fffffffff;
Spaziatura
S2Library può essere di nuovo utile per controllare la densità delle posizioni di Sala giochi nel gioco. I livelli S2 sono gerarchici, quindi ogni cella del livello 14 contiene 4 celle nel livello 15 e così via (vedi Statistiche sulle celle S2). Queste proprietà possono essere sfruttate per posizionare oggetti di gioco nel gioco. Ad esempio, puoi scegliere di avere un "mostro" per cella di livello 14 e per distribuire uniformemente 64 "gioielli" nella stessa area devi posizionare un "gioiello" in ogni cella di livello 17 (ogni cella di livello 14 contiene 64 celle di livello 17).
Interazioni di query e memorizzazione nella cache
Il flusso logico consigliato tra il client di gioco, il server di gioco, il database dello stato del gioco e il database delle posizioni giocabili è illustrato nel seguente schema della sequenza. Tieni presente che potrebbe essere possibile combinare lo stato del gioco e le posizioni giocabili in un unico database, ma qui vengono lasciati separati per maggiore chiarezza.
Segnalazione della posizione errata
Di seguito viene descritta una procedura per raccogliere feedback sulla qualità dei luoghi di gioco dall'interno del gioco, consentendo ai giocatori di segnalare luoghi inutilizzabili. Questi report possono essere elaborati in una pipeline di dati e utilizzati per rimuovere località errate dal database delle località riproducibili.
Ti consigliamo di implementare la segnalazione della posizione errata procedendo nel seguente modo:
- Crea un punto di ingresso lato client (dispositivo mobile o web) per consentire ai giocatori di inviare report strutturati non corretti sui punti allo sviluppatore del gioco.
- Costruisci una pipeline di dati per elaborare tutti i report ricevuti e generare indicatori per aiutarti a classificare la gravità di ogni località.
- A seconda del caso d'uso effettivo, è possibile utilizzare un modello ML puro o una soluzione ML ibrida + modello ML per scalare il processo di moderazione in modo da rimuovere le località inappropriate da PlayableLocationsDB.
Di seguito è riportato un insieme di criteri di esempio che potrebbero essere utilizzati per determinare se una località Riproducibile è errata:
Criteri | Esempio |
Informazioni non sicure |
|
Aree non pubbliche |
|
Inaccessibile |
|
Temporaneamente inaccessibile |
|
Sensibile alla cultura |
|