API مکانهای قابل پخش مجموعهای از نقاط جغرافیایی انتخابشده و ایجاد شده (مکانهای قابل پخش) را ارائه میکند. هر مکان قابل بازی توسط Google بر اساس مناسب بودن آن برای استفاده در بازیهای مبتنی بر مکان به عنوان نقاط تخمگذاری برای مواردی مانند انبارهای تعمیر و جوایز بازی انتخاب میشود.
برخی از مکانهای قابل بازی در نزدیکی نقاط دیدنی برجسته قرار دارند، برخی در پیادهروها در امتداد جادهها قرار دارند، در حالی که برخی دیگر بهطور تصادفی در پارکها، زمینهای بازی، میادین شهر و سایر مناطق در دسترس عموم قرار دارند.
هدف این سند ارائه یک نمای کلی از نحوه پیادهسازی API است تا توسعهدهندگان 3P بتوانند از مفاهیم کلیدی برای تولید مجموعه مکانهای قابل پخش خود با استفاده از یک منبع داده جایگزین استفاده کنند.
زمینه
این بخش یک نمای کلی از کتابخانه های پشتیبانی مورد استفاده ارائه می دهد و مفاهیم اولیه مربوط به مکان های قابل پخش را معرفی می کند.
حمایت از کتابخانه ها
از کتابخانه های پشتیبانی زیر در سراسر این راهنما استفاده می شود.
کتابخانه | شرح |
هندسه S2 | پشتیبانی انعطاف پذیر برای نمایه سازی فضایی. |
بافرهای پروتکل | روشی غیر زبانی، بدون پلت فرم و قابل گسترش برای سریال سازی داده های ساخت یافته برای استفاده در پروتکل های ارتباطی، ذخیره سازی داده ها و موارد دیگر. |
کتابخانه هندسه S2
S2 Geometry Library یک سیستم اطلاعات جغرافیایی است که داده ها را بر روی یک کره سه بعدی نشان می دهد. این کتابخانه شامل ویژگی های زیر است:
- پشتیبانی از نمایه سازی فضایی
- این به شما امکان می دهد مناطق دلخواه را به عنوان مجموعه ای از سلول های گسسته S2 تقریبی کنید.
- نمایه سازی فضایی سریع مجموعه نقاط، چند خط و چند ضلعی در حافظه.
- عملیات سازنده قوی (مانند تقاطع، اتحاد، و ساده سازی) و محمولات بولی (مانند آزمایش برای مهار).
- عملیات جستجوی کارآمد برای یافتن اشیاء نزدیک، اندازهگیری فواصل، و محاسبات مرکزها.
- مجموعهای از محمولهای ریاضی برای آزمایش روابط بین اولیههای هندسی.
- گرد کردن ضربه محکم و ناگهانی.
آمار سلول S2
S2 Cell Statistics برای محاسبه مواردی مانند مدت زمانی که برای دانلود یک مجموعه داده در یک QPS خاص نیاز است مفید است.
مخازن کد هندسی S2
برای شروع کار با سلول های S2، هر یک از این مخازن را شبیه سازی کنید.
SSTables
فرمت فایل SSTable برای ذخیره، پردازش و تبادل کارآمد مجموعه داده ها استفاده می شود. یک SSTable یک نقشه ثابت و مرتب شده تغییرناپذیر از کلیدها به مقادیر ارائه می کند، که در آن کلیدها و مقادیر هر دو رشته بایت دلخواه هستند.
مکان های قابل پخش
به طور کلی، یک مکان یک نقطه جغرافیایی روی نقشه است، اما مکان قابل بازی مکانی است که برای قرار دادن اشیاء بازی در بازیهای دنیای واقعی (یعنی به عنوان نقاط تخمریزی برای چیزهایی مانند جوایز) مناسب است.
انواع مکان های قابل پخش
سرپرستی
مکانهای قابل پخش انتخابشده، نقاط جغرافیایی هستند که با اشیایی که در مکانهای خاص وجود دارند مرتبط هستند. آنها نشان دهنده مکان های نقاط مورد علاقه (POI) هستند که از پایگاه داده مکان ها ترسیم شده اند.
تولید شده است
اگر مکانهای قابل پخش به اندازه کافی وجود نداشته باشد که معیارهای شما را برآورده کند، API مکانهای قابل پخش مکانهای قابل پخش اضافی ایجاد میکند . این مکانهای قابل پخش ایجاد شده، نقاط جغرافیایی هستند که با اشیاء موجود مرتبط نیستند . در عوض، این نقاط جغرافیایی به صورت برنامهریزی شده ایجاد میشوند و بهطور تصادفی در کنار پیادهروها، در پارکها، در سواحل، و در زمینهای بازی، میادین شهر و سایر مناطق قابل دسترس عموم قرار میگیرند.
هدف این است که حداقل تراکم مکانهای قابل پخش را با در نظر گرفتن معیارهای زیر فراهم کنیم:
شاخص | مثال |
ایمنی بازیکن | جوایز بازی نباید در وسط بزرگراه ها یا داخل پایگاه های نظامی ظاهر شوند. |
مناسب بودن برای بازی | بازیکنان نباید مزاحم قبرستان ها یا مکان های عبادت شوند. |
ویژگی های مکان قابل پخش
در ادامه برخی از ویژگیهای مرتبط با اشیاء مکان قابل پخش در پیادهسازی Google که توسعهدهندگان ممکن است برای ساخت بازیهای مبتنی بر مکان مفید بدانند، بحث میکند.
- شناسه مکان
- یک رشته الفبایی که به طور منحصر به فرد مکان را مشخص می کند. این یک شناسه مکان برای مکانهای قابل پخش انتخابشده است (به عنوان مثال، Chlj79ZW1ohQwokRWPhGmWQ2K4 ). میتوانید از شناسه مکان یک مکان قابل پخش برای پیوست کردن فوقدادههای خاص بازی به مکان استفاده کنید.
- plusCode
- کد پلاس که مکان قابل پخش تولید شده را به طور منحصر به فرد شناسایی می کند. کدهای پلاس رشته های الفبایی هستند. به عنوان مثال، 23CPRV2R+WG76 . میتوانید از کد پلاس یک مکان ایجاد شده برای پیوست کردن ابردادههای خاص بازی به مکان استفاده کنید.
- انواع
- آرایه ای از انواع مکان قابل پخش (رشته ها) که نوع مکان قابل پخش را مشخص می کند. نوع اول در آرایه نوع اولیه در نظر گرفته می شود. برای مثال، میتوانید یک مکان قابل پخش داشته باشید که هم سرگرمی باشد و هم تفریحی در فضای باز.
- مرکز پوینت
- مختصات جغرافیایی مربوط به نقطه مرکزی مکان. نقطه مرکزی برای تعیین اینکه آیا یک مکان در یک منطقه مورد علاقه قرار می گیرد یا خیر استفاده می شود.
- snappedpoint
- مختصات جغرافیایی متناظر با موقعیت مکانی به پیاده رو نزدیکترین جاده (زمانی که جاده ای در نزدیکی وجود دارد) می چسبد. هنگامی که صاحبان کسب و کار نمی خواهند بازیکنان بازی در محل خود باشند، می توانید از نقطه شکسته برای قرار دادن اشیاء بازی استفاده کنید. هنگامی که یک نقطه قطع شده در دسترس نیست، باید از نقطه مرکزی استفاده شود.
- نوع بیوم
- هنگامی که یک مکان قابل پخش در یک بیوم قرار دارد، این قسمت با یک یا چند مقدار BiomeType پر می شود. نمونههایی از بیومها جنگلها، تالابها و مناطق شهری هستند.
طرح
انتخاب نقطه برای بازی
انتخاب مکان های انتخاب شده
همانطور که در بالا ذکر شد، مکانهای انتخاب شده، نقاط مورد علاقه (POI) در دنیای واقعی هستند که برای گیمپلی مناسب تلقی میشوند. موارد زیر نمای کلی سطح بالایی از خط لوله داده (با معیارهای انتخاب و فیلتر) را ارائه می دهد که ممکن است برای ایجاد این مکان ها استفاده شود. هدف این خط لوله، خروجی یک SStable از مکانهای انتخابشده است که روی S2CellIds کلید میخورد که میتواند متعاقباً به یک پایگاه داده برای جستجوهای بلادرنگ برای مکانهای قابل پخش در یک منطقه داده شده وارد شود.
فرض بر این است که توسعهدهنده به یک ویژگی نقشه یا مخزن مکان دسترسی دارد که شامل مجموعهای از POIهای کاندید علاوه بر هندسههای مناطق مستثنی شده است (جایی که مکانهای قابل پخش نباید وجود داشته باشند).
خط لوله با استفاده از رویکرد ترکیبی لیست مجوز/فهرست مسدود کار میکند، جایی که در یک مرحله، همه POIهایی را انتخاب میکنیم که با لیست مجاز انواعی که برای گیمپلی مناسب تلقی میشوند مطابقت دارند (مانند کافه، کتابخانه، گلفروشی و غیره) و در مرحلهی دیگر، همه POIهایی که در آن قرار دارند را فیلتر میکنیم. مجموعه ای از مناطق حذف شده مناطق حذف شده با استفاده از هندسه (مثلاً جعبه های مرزی) مجموعه ای از ویژگی های نقشه از پیش تعریف شده که برای بازی نامناسب تلقی می شوند (مثلاً پایگاه های نظامی، گورستان) برای تولید پوشش S2 تشکیل می شوند. سپس میتوان از آن پوششهای S2 برای مشاهده اینکه آیا هر یک از POIهای انتخاب شده در مناطق مستثنی شده قرار میگیرند، استفاده کرد و اگر چنین است آنها را فیلتر کنید. سپس مجموعه نهایی مکانهای انتخابشده با تبدیل نقاط مرکزی آنها به S2CellIds در سطح 30 فهرستبندی میشوند. این امکان جستجوهای مبتنی بر محدوده مکانهای قابل پخش در یک منطقه مشخص را فراهم میکند.
انتخاب مکان های تولید شده
همانطور که در بالا ذکر شد، مکان های ایجاد شده برای تکمیل مکان های قابل پخش در مناطقی که POI های دنیای واقعی تراکم لازم برای گیم پلی را ندارند، استفاده می شود. به عنوان یک قانون کلی، ما حدود 9 مکان قابل بازی در هر سلول سطح 16 S2 (~0.02 کیلومتر^2) پیدا کردهایم که باید تراکم کافی برای بازیهای مبتنی بر مکان داشته باشد.
تولید این نقاط جغرافیایی "تصادفی" نیز با استفاده از رویکرد ترکیبی مجوز/فهرست مسدود انجام می شود. لیست مجاز لیستی از ویژگی های نقشه است که در آن برای ایجاد نقاط مناسب تشخیص داده می شود (مانند پارک ها، پیاده روها و غیره) و لیست بلوک مناطقی است که نقاطی باید حذف شوند (مانند آب، جاده های وسایل نقلیه موتوری و غیره). در هر دو مورد، هندسههای ویژگی نقشه برای ایجاد پوشش S2 از نواحی مربوطه خود استفاده میشوند و هنگامی که این دو مجموعه به هم متصل میشوند، نواحی حذفشده با هم تداخل دارند، از مناطق گنجانده شده کم میشوند تا مجموعه نهایی مناطق کاندید برای مکانهای تولید شده ایجاد شود. به عنوان آخرین مرحله، ما به صورت تصادفی نقاط جغرافیایی را در آن مناطق ایجاد می کنیم و در یک SStable که با استفاده از S2CellIds در سطح 30 نمایه شده است، می نویسیم. برای مکان های ایجاد شده، کدهای بعلاوه به عنوان شناسه مکان استفاده می شود.
نمای کلی خط لوله مکان ها
همانطور که در بالا ذکر شد خروجی دو خط لوله داده قبلی دو SSTable از اشیاء PlayableLocation هستند که با استفاده از S2CellIds در سطح S2 30 نمایه شده اند. این فایل ها را می توان در هر فروشگاه Ordered Key-Value برای جستجوهای نمایه سازی شده فضایی بارگذاری کرد. یکی از گزینه ها، Spanner پایگاه داده SQL توزیع شده Google است.
بیوم ها
بیوم مجموعه ای از گیاهان و جانوران است که ویژگی های سازگاری محیطی مشترکی دارند. بیوم ها در پاسخ به یک آب و هوای فیزیکی مشترک شکل می گیرند. نمونههایی از بیومها جنگلها، تالابها و مناطق شهری هستند.
هنگامی که یک مکان قابل پخش در یک بیوم قرار دارد، یک فیلد biomeType را می توان با یک یا چند مقدار BiomeType پر کرد.
شما می توانید از اطلاعات بیوم برای قرار دادن انواع مختلف اشیاء بازی روی نقشه استفاده کنید. به عنوان مثال، اگر میدان بیوم حاوی علفزار ارزش باشد، می تواند نوع متفاوتی از موجودات را نسبت به زمانی که میدان بیوم حاوی مقدار شهری باشد، ایجاد کند.
در زیر فرآیندی برای افزودن اطلاعات بیوم به مکانهای قابل پخش به عنوان بخشی از خط لوله مکانها در بالا توضیح داده میشود. موتور زمین Google دارای مجموعه دادههای متعددی از پوشش زمین با کلاسهای اطلاعاتی مانند جنگل، علفزار و آب است که میتوان از آنها برای منبع اطلاعات بیوم استفاده کرد. ما مراحل سطح بالا زیر را برای افزودن اطلاعات بیوم توصیه می کنیم:
- دادههایی را که هم اطلاعات بیوم و هم موقعیت جغرافیایی دارند را انتخاب کنید.
- اطلاعات بیوم را به عنوان یک ویژگی به مکانهای قابل پخش موجود بر اساس موقعیت جغرافیایی آنها اختصاص دهید، و این معمولاً میتواند با اتصال فضایی انجام شود. به عنوان مثال، اگر اطلاعات Biome در S2 Cell سطح 17 در دسترس باشد و مکانهای قابل پخش با استفاده از S2CellId در سطح 30 ایندکس شوند، میتوان اتصال را به صورت زیر انجام داد:
- نقشه مکان های قابل پخش به سلول های S2 آنها در سطح 17: PlayableLocation.s2CellId.parent(17)
- با Biome S2CellIds در سطح 17 بپیوندید
- در صورت وجود، مکان قابل پخش را همراه با ویژگی biome ارائه دهید.
جستجو در مکان های قابل پخش
اگر توصیههای بالا رعایت شود و مکانهای قابل پخش را با استفاده از S2CellIds در سطح 30 نمایه کنیم (به کتابخانه S2 برای تبدیل از LatLng به شناسه سلول مراجعه کنید)، میتوانیم اسکنهای مبتنی بر محدوده را انجام دهیم تا همه مکانهای قابل پخش در یک منطقه خاص را بازیابی کنیم.
پرس و جوی مثال:
اگر میخواستیم همه مکانهای قابل پخش واقع در S2Cell در سطح 12 (~5km^2) را بازیابی کنیم، میتوانیم درخواست زیر را صادر کنیم:
S2CellId : 0x89c259900000000 محدوده حداقل : 0x89c2598000000001 (s2CellId.rangeMin().id()) حداکثر محدوده : 0x89c2599fffffffff (s2CellId).
SELECT * FROM PlayableLocations
WHERE S2CellId BETWEEN 0x89c2598000000001 AND 0x89c2599fffffffff;
فاصله گذاری
S2Library یک بار دیگر می تواند برای کنترل تراکم مکان های قابل پخش در بازی شما مفید باشد. سطوح S2 سلسله مراتبی هستند، بنابراین هر سلول در سطح 14 شامل 4 سلول در سطح 15 و غیره است (به آمار سلول S2 مراجعه کنید). این ویژگی ها را می توان در هنگام قرار دادن اشیاء بازی در بازی خود مورد استفاده قرار داد. به عنوان مثال، ممکن است انتخاب کنید که در هر سلول سطح 14 یک "هیولا" داشته باشید و به منظور توزیع یکنواخت 64 "جواهرات" در همان ناحیه، یک "جواهر" را در هر سلول سطح 17 قرار دهید (هر سلول سطح 14 شامل 64 سلول سطح 17 است. ).
پرس و جو و تعاملات حافظه پنهان
جریان منطقی توصیه شده بین کلاینت بازی، سرور بازی، پایگاه داده وضعیت بازی و پایگاه داده مکان های قابل بازی در نمودار دنباله زیر نشان داده شده است. توجه داشته باشید که ممکن است امکان ترکیب وضعیت بازی و مکانهای قابل بازی در یک DB وجود داشته باشد، اما برای وضوح در اینجا جداگانه گذاشته شدهاند.
گزارش موقعیت مکانی بد
در زیر فرآیندی برای جمعآوری بازخورد در مورد کیفیت مکانهای قابل بازی از داخل بازی شما با اجازه دادن به بازیکنان برای گزارش مکانهای غیرقابل استفاده برای بازی توضیح داده میشود. این گزارش ها را می توان در خط لوله داده پردازش کرد و برای حذف مکان های بد از پایگاه داده مکان های قابل پخش استفاده کرد.
توصیه می کنیم با استفاده از مراحل زیر گزارش موقعیت مکانی بد را پیاده سازی کنید:
- یک نقطه ورود سمت مشتری (فرم موبایل یا وب) برای بازیکنان بسازید تا گزارشهای ساختار یافته نقاط بد را به توسعهدهنده بازی ارسال کنند.
- یک خط لوله داده برای پردازش همه گزارشهای دریافتی و تولید سیگنالهایی برای کمک به طبقهبندی میزان بد بودن هر مکان ایجاد کنید.
- بسته به مورد استفاده واقعی، برای حذف مکانهای نامناسب از PlayableLocationsDB، میتوان از یک مدل ML خالص یا یک راهحل ترکیبی ML model+Human برای مقیاسبندی فرآیند تعدیل استفاده کرد.
در زیر مجموعهای از معیارهای نمونه است که میتواند برای کمک به تشخیص بد بودن مکان قابل پخش استفاده شود:
شاخص | مثال |
ناامن |
|
مناطق غیر عمومی |
|
غیر قابل دسترس |
|
به طور موقت غیر قابل دسترس |
|
از نظر فرهنگی حساس است |
|