Ringkasan Desain Playable Location API

Playable Locations API menyajikan 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 point untuk hal-hal seperti depot perbaikan dan hadiah game.

Beberapa lokasi yang dapat dimainkan terletak di dekat lokasi menarik terkemuka, beberapa berada di trotoar di sepanjang jalan, sementara yang lainnya berada secara acak di dalam 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 yang terkait dengan lokasi yang dapat dimainkan.

Library Dukungan

Library dukungan berikut digunakan di seluruh panduan ini.

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

Library Geometri S2

Library Geometri S2 adalah sistem informasi geografis yang mewakili data pada bola dunia tiga dimensi. Library ini menyertakan fitur-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 pada kumpulan titik, polyline, dan poligon.
  • Operasi konstruktif yang kuat (seperti persimpangan, union, dan penyederhanaan) dan predikat boolean (seperti pengujian untuk containment).
  • Operasi kueri yang efisien untuk menemukan objek di sekitar, mengukur jarak, dan menghitung sentroid.
  • Kumpulan predikat matematika untuk menguji hubungan antar-primitif geometris.
  • Pembulatan snap.

Statistik sel S2

Statistik Sel S2 berguna untuk menghitung hal-hal seperti lama 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 tidak dapat diubah dan diurutkan dari kunci ke nilai, dengan kunci dan nilai merupakan 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 spawn point 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. Lokasi tersebut mewakili lokasi Lokasi Menarik (POI) yang diambil dari database Tempat.

Dibuat

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

Tujuannya adalah untuk menyediakan setidaknya kepadatan minimum lokasi yang dapat dimainkan, dengan pertimbangan yang diberikan pada kriteria berikut:

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

Properti Lokasi Pemutaran

Bagian berikut membahas beberapa properti yang terkait dengan objek Lokasi Dapat Diputar dalam penerapan 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 diseleksi (misalnya, Chlj79YW1ohQwokRWPhGmWQ2K4). Anda dapat menggunakan ID Tempat lokasi yang dapat dimainkan pilihan untuk melampirkan metadata khusus game ke lokasi tersebut.
plusCode
Plus Codes yang secara unik mengidentifikasi lokasi pemutaran yang dihasilkan. Plus Codes adalah string alfanumerik. Misalnya, 23CPRV2R+WG76. Anda dapat menggunakan kode plus lokasi yang dibuat untuk melampirkan metadata khusus game ke lokasi.
jenis
Array jenis Lokasi yang Dapat Diputar (string) yang menentukan jenis lokasi yang dapat diputar. Jenis pertama dalam array dianggap sebagai jenis primer. 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 lokasi berada dalam area minat.
snappedPoint
Koordinat geografis yang sesuai dengan lokasi yang dipaskan ke trotoar jalan terdekat (saat ada jalan terdekat). Anda dapat menggunakan snap-point untuk menempatkan objek game saat pemilik bisnis tidak ingin 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

Pemilihan Titik 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 umum 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 dikuncikan pada S2CellIds yang selanjutnya dapat dimasukkan ke dalam 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 (di mana Lokasi Dapat Diputar seharusnya tidak ada).

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

Diagram pipeline lokasi pilihan.

Memilih Lokasi yang Dibuat

Seperti yang disebutkan di atas, lokasi yang dihasilkan digunakan untuk melengkapi Lokasi yang Dapat Diputar di area tempat POI dunia nyata tidak memiliki kepadatan yang diperlukan untuk gameplay. Sebagai aturan umum, kami telah 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 membuat titik (mis.taman, trotoar, dll.) dan daftar yang tidak diizinkan adalah area yang titiknya harus dikecualikan (mis.perairan, jalan kendaraan bermotor, dll.). Dalam kedua kasus tersebut, geometri fitur peta digunakan untuk menghasilkan cakupan S2 di areanya masing-masing, dan saat kedua set tersebut digabungkan, region yang dikecualikan yang tumpang-tindih akan dikurangi dari region 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 pada level 30 yang mewakili titik tengah. Untuk Lokasi yang Dibuat, kode plus digunakan sebagai ID Tempat.

Diagram pipeline lokasi yang dibuat.

Ringkasan Pipeline Lokasi

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

Diagram pipeline nilai kunci yang diurutkan berdasarkan 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 tersebut dapat menghasilkan jenis makhluk yang berbeda dibandingkan jika kolom bioma berisi nilai urban.

Berikut adalah proses untuk menambahkan informasi bioma ke Lokasi yang Dapat Diputar 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 sebagai sumber informasi bioma. Kami merekomendasikan 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 geolokasi, dan ini biasanya dapat dilakukan dengan penggabungan spasial. Misalnya, jika informasi Biome tersedia di S2 Cell level 17 dan Lokasi yang Dapat Diputar diindeks menggunakan S2CellId mereka pada level 30, join 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 bioma ke lokasi yang dapat diputar.

Membuat Kueri Lokasi yang Dapat Diputar

Jika rekomendasi di atas diikuti dan kami mengindeks Lokasi yang Dapat Diputar menggunakan S2CellIds pada 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 kita ingin mengambil semua Lokasi Dapat Dimainkan yang terletak dalam S2Cell di level 12 (~5km^2), kita dapat mengeluarkan kueri berikut:

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

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

Spasi

S2Library sekali lagi berguna untuk mengontrol kepadatan Lokasi yang Dapat Diputar di game Anda. 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 di 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, tempatkan satu "permata" di setiap sel level 17 (setiap sel level 14 berisi 64 sel level 17).

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 lokasi yang dapat diputar yang mengkueri dan caching.

Pelaporan Lokasi Buruk

Berikut ini adalah proses pengumpulan masukan terkait kualitas lokasi yang dapat dimainkan dari dalam game dengan memungkinkan pemain melaporkan lokasi yang tidak dapat dimainkan. Laporan ini dapat diproses di pipeline data dan digunakan untuk menghapus lokasi yang buruk dari Database Lokasi Dapat Dimainkan.

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 manusia dapat digunakan untuk menskalakan proses moderasi, untuk menghapus lokasi yang tidak pantas dari PlayableLocationsDB.

Diagram pelaporan lokasi buruk.

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

Kriteria Contoh
Tidak Aman
  • Lokasi yang bisa dimainkan terletak 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 diberi 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.