Ringkasan Desain Playable Location API

Playable Locations API menayangkan koleksi titik geografis yang diseleksi dan dihasilkan (lokasi yang dapat diputar). Setiap lokasi yang dapat dimainkan dipilih oleh Google berdasarkan kesesuaiannya untuk digunakan dalam game berbasis lokasi sebagai spawn points untuk hal-hal seperti toko reparasi dan hadiah game.

Beberapa lokasi yang dapat dimainkan terletak di dekat lokasi menarik terkenal, beberapa berada di trotoar di sepanjang jalan, sementara yang lainnya terletak secara acak di taman, taman bermain, alun-alun kota, dan area lain yang dapat diakses secara publik.

Tujuan dokumen ini adalah untuk memberikan ringkasan tentang cara penerapan API sehingga developer pihak ketiga dapat memanfaatkan konsep utama untuk membuat kumpulan lokasi yang dapat dimainkan sendiri menggunakan sumber data alternatif.

Latar belakang

Bagian ini memberikan ringkasan tentang support library yang digunakan dan memperkenalkan konsep dasar terkait lokasi yang dapat diputar.

Support Library

Library dukungan berikut digunakan di seluruh panduan ini.

Perpustakaan Deskripsi
Geometri S2 Dukungan fleksibel untuk pengindeksan spasial.
Buffering Protokol Cara yang tidak tergantung bahasa, netral platform, dan dapat diperluas untuk menserialisasi data terstruktur untuk digunakan dalam protokol komunikasi, penyimpanan data, dan banyak lagi.

Library Geometri S2

Library Geometri S2 adalah sistem informasi geografis yang merepresentasikan data pada bola dunia tiga dimensi. Library ini menyertakan fitur berikut:

  • Dukungan untuk pengindeksan spasial.
    • Hal ini memungkinkan Anda memperkirakan area arbitrer sebagai kumpulan Sel S2 yang terpisah.
    • Pengindeksan spasial dalam memori yang cepat untuk kumpulan titik, polyline, dan poligon.
  • Operasi konstruktif yang kuat (seperti persimpangan, penyatuan, dan penyederhanaan) dan predikat boolean (seperti pengujian untuk pembatas).
  • Operasi kueri yang efisien untuk menemukan objek di sekitar, mengukur jarak, dan menghitung sentroid.
  • Kumpulan predikat matematis untuk menguji hubungan di antara primitif geometris.
  • Pembulatan snap.

Statistik sel S2

Statistik Sel S2 berguna untuk menghitung hal-hal seperti durasi waktu yang diperlukan untuk mendownload set data pada QPS tertentu.

Repositori kode geometri S2

Clone salah satu repositori ini untuk mulai menggunakan Sel S2.

SSTables

Format file SSTable digunakan untuk menyimpan, memproses, dan bertukar set data secara efisien. SSTable menyediakan peta persisten yang diurutkan dan tidak dapat diubah dari kunci ke nilai, dengan kunci dan nilai berupa string byte arbitrer.

Lokasi Dapat Diputar

Secara umum, lokasi adalah titik geografis pada peta, tetapi lokasi yang dapat dimainkan adalah lokasi yang dianggap cocok untuk menempatkan objek game dalam game dunia nyata (yaitu, sebagai poin spawn untuk hal-hal seperti hadiah).

Jenis lokasi yang dapat dimainkan

Diseleksi

Lokasi pilihan yang dapat dimainkan adalah titik geografis yang dikaitkan dengan objek yang ada di lokasi tertentu. Objek tersebut mewakili lokasi Lokasi Menarik (POI) yang diambil dari database Tempat.

Dibuat

Jika tidak ada cukup lokasi pemutaran hasil seleksi untuk memenuhi kriteria Anda, Playable Locations API akan menghasilkan lokasi tambahan yang dapat diputar. Lokasi yang dihasilkan dan dapat diputar tersebut adalah titik geografis yang tidak terkait dengan objek yang ada. Sebaliknya, titik geografis ini dibuat secara terprogram, dan ditempatkan secara acak di sepanjang trotoar, di dalam taman, di pantai, dan di dalam taman bermain, alun-alun kota, dan area yang dapat diakses publik lainnya.

Sasarannya adalah untuk menyediakan setidaknya kepadatan minimum lokasi yang dapat diputar, dengan pertimbangan yang mempertimbangkan kriteria berikut:

Kriteria Contoh
Keamanan pemain Hadiah game tidak boleh muncul di tengah jalan bebas hambatan atau di dalam pangkalan militer.
Kelayakan untuk gameplay Pemain tidak boleh mengganggu pemakaman atau tempat ibadah.

Properti Lokasi yang Dapat Diputar

Bagian berikut membahas beberapa properti yang terkait dengan objek Lokasi Dapat Diputar dalam implementasi Google yang mungkin berguna bagi developer untuk membuat game berbasis lokasi.

placeId
String alfanumerik yang mengidentifikasi lokasi secara unik. Ini adalah ID Tempat untuk lokasi yang dapat diputar yang telah diseleksi (misalnya, Chlj79Zd1ohQwokRWPhGMWQ2K4). Anda dapat menggunakan ID Tempat lokasi permainan pilihan untuk melampirkan metadata khusus game ke lokasi.
plusCode
Plus Codes yang secara unik mengidentifikasi lokasi pemutaran yang dihasilkan. Kode plus adalah string alfanumerik. Misalnya, 23CPRV2R+WG76. Anda dapat menggunakan kode plus lokasi yang dihasilkan untuk melampirkan metadata khusus game ke lokasi.
jenis
Array jenis Lokasi Dapat Diputar (string) yang menentukan jenis lokasi yang dapat diputar. Jenis pertama dalam array dianggap sebagai jenis utama. Misalnya, Anda dapat memiliki lokasi yang dapat dimainkan yang merupakan hiburan dan outdoor_reCreation.
centerPoint
Koordinat geografis yang sesuai dengan titik tengah lokasi. Titik tengah digunakan untuk menentukan apakah suatu lokasi berada dalam area minat.
snappedPoint
Koordinat geografis yang sesuai dengan lokasi yang disesuaikan dengan trotoar jalan terdekat (saat ada jalan terdekat). Anda dapat menggunakan titik yang diikat untuk menempatkan objek game saat pemilik bisnis tidak menginginkan pemain game berada di dalam lokasi mereka. Jika titik yang diikat tidak tersedia, titik tengah harus digunakan.
biomeType
Jika lokasi yang dapat diputar berada dalam bioma, kolom ini akan diisi dengan satu atau beberapa nilai BiomeType. Contoh bioma adalah hutan, lahan basah, dan daerah perkotaan.

Desain

Pilihan Poin untuk Game

Memilih Lokasi Pilihan

Seperti disebutkan di atas, lokasi pilihan adalah Lokasi Menarik (POI) di dunia nyata yang dianggap cocok untuk gameplay. Berikut ini akan memberikan ringkasan tingkat tinggi tentang pipeline data (dengan kriteria pemilihan dan pemfilteran) yang mungkin digunakan untuk menghasilkan lokasi ini. Tujuan pipeline ini adalah untuk menghasilkan SStable dari Lokasi yang Diseleksi yang dikunci pada S2CellIds yang selanjutnya dapat dimasukkan ke database untuk kueri real-time untuk Lokasi Dapat Diputar di region tertentu.

Asumsinya adalah developer memiliki akses ke Fitur Peta atau Repositori Tempat yang berisi kumpulan kandidat POI selain geometri wilayah yang dikecualikan (tempat Lokasi Dapat Diputar tidak boleh ada).

Pipeline ini berfungsi menggunakan pendekatan gabungan yang diizinkan/tidak diizinkan.Dalam satu fase, kami memilih semua POI yang cocok dengan daftar jenis yang diizinkan yang dianggap sesuai untuk gameplay (misalnya kafe, perpustakaan, toko bunga, dll.) dan dalam fase lain kami memfilter semua POI yang termasuk dalam kumpulan wilayah yang dikecualikan. Wilayah yang dikecualikan dibentuk menggunakan geometri (misalnya kotak pembatas) dari kumpulan fitur peta bawaan yang dianggap tidak cocok untuk gameplay (misalnya pangkalan militer, kuburan) untuk membuat Penutup S2. Penutup S2 tersebut kemudian dapat digunakan untuk melihat apakah ada POI yang dipilih yang berada dalam region yang dikecualikan, dan jika demikian, filter POI tersebut. Kumpulan lokasi hasil seleksi akhir akan diindeks dengan mengonversi titik tengahnya menjadi S2CellIds di level 30. Hal ini memungkinkan pencarian berbasis rentang dari Lokasi Dapat Diputar dalam region tertentu.

Diagram pipeline lokasi pilihan.

Memilih Lokasi yang Dibuat

Seperti disebutkan di atas, lokasi yang dihasilkan digunakan untuk melengkapi Lokasi Dapat Diputar di area di mana POI dunia nyata tidak memiliki kepadatan yang diperlukan untuk gameplay. Sebagai aturan umum, kami menemukan sekitar 9 Lokasi Dapat Dimainkan di setiap sel S2 level 16 (~0,02 km^2) harus memiliki kepadatan yang cukup untuk game berbasis lokasi.

Pembuatan titik geografis "acak" ini juga dilakukan menggunakan pendekatan gabungan yang diizinkan/tidak diizinkan. Daftar yang diizinkan adalah daftar fitur peta yang dianggap sesuai untuk menghasilkan titik (misalnya taman, trotoar, dll.) dan daftar yang tidak diizinkan adalah area tempat titik harus dikecualikan (misalnya perairan, jalan kendaraan bermotor, dll.). Dalam kedua kasus tersebut, geometri fitur peta digunakan untuk menghasilkan cakupan S2 di area masing-masing, dan saat kedua set tersebut digabungkan, wilayah yang dikecualikan yang tumpang-tindih akan dikurangi dari wilayah yang disertakan untuk menghasilkan kumpulan area kandidat akhir untuk lokasi yang dihasilkan. Sebagai langkah terakhir, kami "secara acak" menghasilkan titik geografis dalam area tersebut dan menulis ke SStable yang diindeks menggunakan S2CellIds di level 30 yang mewakili titik tengah. Untuk Lokasi yang Dibuat, kode plus digunakan sebagai ID Tempat.

Diagram pipeline lokasi yang dihasilkan.

Ringkasan Pipeline Lokasi

Seperti yang disebutkan di atas, output dari dua pipeline data sebelumnya adalah dua SSTable objek PlayableLocation yang diindeks menggunakan S2CellIds pada level S2 30. File ini dapat dimuat ke penyimpanan Ordered Key-Value untuk pencarian yang diindeks secara spasial. Salah satu opsinya adalah Spanner database SQL terdistribusi Google.

Diagram pipeline nilai kunci urutan lokasi.

Bioma

Bioma adalah komunitas tumbuhan dan hewan yang memiliki kesamaan karakteristik adaptasi lingkungan yang umum. Bioma terbentuk sebagai respons terhadap iklim fisik yang sama. Contoh bioma adalah hutan, lahan basah, dan daerah perkotaan.

Jika lokasi yang dapat diputar berada dalam bioma, kolom biomeType dapat diisi dengan satu atau beberapa nilai BiomeType.

Anda dapat menggunakan informasi bioma untuk menempatkan berbagai jenis objek game di peta. Misalnya, jika kolom bioma berisi nilai padang rumput, kolom bioma dapat menghasilkan jenis makhluk yang berbeda dibandingkan jika bidang bioma berisi nilai urban.

Berikut adalah penjelasan proses untuk menambahkan informasi bioma ke Playable Locations sebagai bagian dari pipeline Lokasi di atas. Earth Engine Google memiliki beberapa set data tutupan lahan dengan kelas informasi seperti hutan, padang rumput, dan air yang dapat digunakan untuk mendapatkan informasi bioma. Sebaiknya lakukan langkah-langkah tingkat tinggi berikut untuk menambahkan informasi bioma:

  • Menyeleksi data yang memiliki informasi bioma dan geolokasi.
  • Tetapkan informasi bioma sebagai atribut ke Lokasi Dapat Diputar yang sudah ada berdasarkan geolokasinya, dan ini biasanya dapat dilakukan dengan gabungan spasial. Misalnya, jika informasi Biome tersedia di Sel S2 level 17 dan Lokasi Dapat Diputar diindeks menggunakan S2CellId di level 30, penggabungan dapat dilakukan sebagai berikut:
    1. Petakan Lokasi yang dapat dimainkan ke Sel S2 mereka di level 17: PlayableLocation.s2CellId.parent(17)
    2. Bergabung dengan Biome S2CellIds di level 17
  • Tayangkan Lokasi Dapat Diputar bersama dengan atribut bioma jika tersedia.

Diagram repositori Biome ke lokasi yang dapat diputar.

Membuat Kueri Lokasi Ruang Game

Jika rekomendasi di atas diikuti dan kami mengindeks Lokasi Dapat Diputar menggunakan S2CellIds di level 30 (lihat Library S2 untuk mengonversi dari LatLng ke id sel), kami dapat melakukan pemindaian berbasis rentang untuk mengambil semua lokasi yang dapat diputar di region tertentu.

Contoh Kueri:

Jika ingin mengambil semua Lokasi yang Dapat Dimainkan yang terletak dalam S2Cell di level 12 (~5km^2), kita dapat mengeluarkan kueri berikut:

S2CellId: 0x89c2599000000000 Rentang Min: 0x89c2598000000001 (s2CellId.rangeMin().id()) Rentang Maks: 0x89c2599fffffffff (s2CellId.rangeMax().id())

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

Spasi

Sekali lagi, S2Library dapat berguna untuk mengontrol kepadatan Lokasi yang Dapat Diputar dalam game. Level S2 bersifat hierarkis sehingga setiap sel di level 14 berisi 4 sel di level 15 dan seterusnya (Lihat Statistik Sel S2). Properti ini dapat dimanfaatkan saat menempatkan objek game dalam game Anda. Misalnya, Anda dapat memilih untuk memiliki satu "monster" per level 14 sel dan untuk mendistribusikan 64 "permata" secara merata di area yang sama, Anda perlu menempatkan satu "permata" di setiap 17 sel level (setiap sel level 14 berisi 64 level 17 sel).

Interaksi Kueri dan Cache

Alur logika yang direkomendasikan antara klien game, server game, database status game, dan database lokasi yang dapat dimainkan digambarkan dalam diagram urutan berikut. Perhatikan bahwa Anda dapat menggabungkan status game dan lokasi yang dapat dimainkan ke dalam satu DB, tetapi keduanya dibiarkan terpisah di sini agar lebih jelas.

Diagram pembuatan kueri dan cache lokasi pemutaran.

Pelaporan Lokasi Buruk

Hal berikut menjelaskan proses untuk mengumpulkan masukan terkait kualitas lokasi yang dapat dimainkan dari dalam game Anda dengan memungkinkan pemain melaporkan lokasi yang dapat dimainkan. Laporan ini dapat diproses di pipeline data dan digunakan untuk menghapus lokasi buruk dari Database Lokasi Dapat Diputar.

Sebaiknya terapkan pelaporan lokasi yang buruk menggunakan langkah-langkah berikut:

  • Buat titik entri sisi klien (formulir seluler atau web) bagi pemain untuk mengirimkan laporan poin buruk terstruktur kepada developer game.
  • Buat pipeline data untuk memproses semua laporan yang diterima dan menghasilkan sinyal untuk membantu mengklasifikasikan seberapa buruk setiap lokasi.
  • Bergantung pada kasus penggunaan yang sebenarnya, model ML murni atau model ML hybrid + Solusi Human dapat digunakan untuk menskalakan proses moderasi, untuk menghapus lokasi yang tidak sesuai dari PlayableLocationsDB.

Diagram pelaporan lokasi buruk.

Berikut ini adalah serangkaian contoh kriteria yang dapat digunakan untuk membantu menentukan apakah Lokasi Dapat Diputar buruk:

Kriteria Contoh
Tidak Aman
  • Lokasi yang dapat dimainkan berada dalam jarak 50 meter dari tepi tebing.
  • Lokasi yang dapat dimainkan terletak di tengah jalan raya utama, atau dekat dengan lalu lintas yang bergerak cepat.
Area non-publik
  • Fasilitas pemerintah yang dibatasi. Misalnya, pangkalan militer.
Tidak dapat diakses
  • Area yang dibatasi pagar.
  • Bangunan terkenal di air.
Tidak dapat diakses untuk sementara
  • Lokasi yang tutup untuk renovasi.
  • Lokasi yang tutup secara musiman.
  • Jalan ditutup untuk perbaikan selama lebih dari satu minggu.
Sensitif secara budaya
  • Makam.
  • Tempat ibadah.