تعاریف GBFS

قبل از ادامه این بخش، اگر قبلاً این کار را انجام نداده‌اید، سیستم‌های micromobility پشتیبانی‌شده‌ای را که در حال ساخت فید برای آن‌ها هستید، تأیید کنید.

در بخش‌های زیر، هر سرصفحه دارای قالب زیر است: Required|Optional|Conditionally required: Feed name (System supported) . سیستم های زیر پشتیبانی می شوند:

  • سیستم داک شده
  • سیستم بدون بارانداز
  • سیستم Docked و Dockless

برای ادغام موفقیت‌آمیز با Google، فقط فایل‌های مورد نیاز برای سیستمی را که فید شما توضیح می‌دهد ارائه کنید و فیلدهای مورد نیاز موجود در بخش‌های مربوطه را مشخص کنید. برای فیلدهای مشروط الزامی، برای راهنمایی به توضیحات فیلد مراجعه کنید. همچنین می‌توانید فیلدهای اختیاری را مشخص کنید که اطلاعات را اضافه می‌کنند و تجربه کاربری بهتری را ارائه می‌کنند.

هدر مورد نیاز برای فیدهای Micromobility

فیدهای Micromobility فیدهایی هستند که شامل داده‌های ساختار یافته Micromobility یا بدون اتصال هستند که در این مقاله تعریف شده است.

همه فیدها باید همیشه فیلدهای موجود در جدول زیر را در سطح بالای شیء JSON، که در مجموع به عنوان سرصفحه GBFS رایج شناخته می‌شود، مشخص کنند.

نام زمینه تایپ کنید مورد نیاز شرح
last_updated مهر زمان ضروری یک مهر زمانی POSIX، که تعدادی ثانیه از 1 ژانویه 1970 ساعت 00:00:00 UTC را مشخص می کند.

آخرین باری را تنظیم کنید که داده های موجود در فید به روز شده است.

ttl عدد صحیح غیر منفی ضروری یک عدد صحیح غیر منفی که نشان دهنده تعداد ثانیه هایی است که تا زمان به روز رسانی فید باقی می ماند.

اگر داده ها باید با سرعت ثابت به روز شوند، این مقدار را روی 0 قرار دهید.

data JSON ضروری JSON که حاوی فیلدهای داده برای فید فردی است.

به عنوان مثال، یک فید جمع‌آوری شده free_bike_status.json که هدر رایج GBFS را مشخص می‌کند، ممکن است به صورت زیر باشد:

{
    "ttl": 30,
    "last_updated": 1576123774,
    "data": {
        "bikes": [ ... ]  // GBFS free bike status objects.
    }
}

مورد نیاز: system_information.json (سیستم Docked و Dockless)

در صورت نیاز به مشخصات GBFS مراجعه کنید.

این فید جزئیات مربوط به اپراتور سیستم را ارائه می دهد.

نام زمینه تایپ کنید مورد نیاز شرح
system_id شناسه ضروری یک شناسه منحصر به فرد جهانی برای سیستم اشتراک خودرو. این مقدار در نظر گرفته شده است که در طول عمر سیستم ثابت بماند. هر سیستم یا منطقه جغرافیایی مشخصی که وسایل نقلیه در آن کار می کنند، باید system_id خود را داشته باشد. شناسه‌های سیستم‌ها باید به عنوان متعلق به یک سیستم خاص به جای رشته‌های تصادفی قابل تشخیص باشند - برای مثال bcycle_austin یا biketown_pdx.
name رشته ضروری نام سیستمی که به مشتریان نمایش داده می شود.
rental_apps هدف - شی ضروری یک شی JSON که حاوی اطلاعات برنامه اجاره ای برای Android و iOS در فیلدهای مربوطه است.
rental_apps.android هدف - شی مشروط مورد نیاز است حاوی اطلاعات دانلود و کشف برنامه اجاره ای برای پلتفرم Android در store_uri و discovery_uri است. اگر ارائه‌دهنده سیستم یک برنامه اجاره اندروید دارد، این قسمت الزامی است.
rental_apps.android.store_uri URI ضروری URI که در آن می توان برنامه اندروید اجاره ای را از آن دانلود کرد. این معمولاً یک URI به یک فروشگاه برنامه مانند Google Play است. اگر URI به فروشگاه برنامه‌ای مانند Google Play اشاره می‌کند، توصیه می‌کنیم که URI از بهترین شیوه‌های Android پیروی کند تا برنامه مشاهده بتواند مستقیماً URI را به‌جای وب‌سایت به برنامه فروشگاه برنامه بومی باز کند.
rental_apps.android.discovery_uri URI ضروری URI که دارای فرم your_custom_scheme://your/path/here است. URI می‌تواند توسط PackageManager.queryIntentActivities() برای کشف اینکه آیا برنامه اندروید اجاره‌ای روی دستگاه نصب شده است یا خیر استفاده شود.
rental_apps.ios هدف - شی مشروط مورد نیاز است حاوی اطلاعات دانلود و کشف برنامه اجاره ای برای پلتفرم iOS در store_uri و discovery_uri است. اگر ارائه‌دهنده سیستم یک برنامه اجاره iOS دارد، این قسمت الزامی است.
rental_apps.ios.store_uri URI ضروری URI که در آن می توان برنامه اجاره ای iOS را از آن دانلود کرد. این معمولاً یک URI به یک فروشگاه برنامه مانند Apple App Store است. اگر URI به یک فروشگاه برنامه مانند Apple App Store اشاره می‌کند، توصیه می‌کنیم که URI از بهترین روش‌های iOS پیروی کند تا برنامه مشاهده بتواند مستقیماً URI را به‌جای وب‌سایت به برنامه فروشگاه برنامه اصلی باز کند.
rental_apps.ios.discovery_uri URI ضروری URI با فرم your_custom_scheme:// . URI می تواند توسط UIApplication canOpenURL: برای کشف اینکه آیا برنامه iOS اجاره ای روی دستگاه نصب شده است یا خیر.

مورد نیاز: free_bike_status.json (سیستم Dockless)

در صورت نیاز به مشخصات GBFS مراجعه کنید.

این فید مکان‌ها و ویژگی‌های وسایل نقلیه آزاد موجود را تعریف می‌کند. به دلایل حفظ حریم خصوصی، وسایل نقلیه ای که بخشی از یک اجاره فعال هستند نباید در این فید ظاهر شوند.

نام زمینه تایپ کنید مورد نیاز شرح
bikes آرایه ضروری مجموعه‌ای از دوچرخه‌های متوقف شده در حال حاضر موجود که هر دوچرخه یک شی است.
bikes[].bike_id شناسه ضروری شناسه دوچرخه

برای محافظت از حریم خصوصی، شناسه را می توان پس از هر سفر به یک رشته تصادفی تغییر داد.

bikes[].lat عرض جغرافیایی ضروری عرض جغرافیایی دوچرخه WGS 84، در قالب درجه اعشار.
bikes[].lon طول جغرافیایی ضروری طول جغرافیایی WGS 84 دوچرخه، در قالب درجه اعشار.
bikes[].is_reserved بولی ضروری اینکه آیا دوچرخه در حال حاضر رزرو شده است، به شرح زیر است:
  • اگر دوچرخه در حال حاضر رزرو شده است، روی true تنظیم کنید.
  • اگر دوچرخه در حال حاضر رزرو نشده است، روی false تنظیم کنید.
bikes[].is_disabled بولی ضروری این که آیا دوچرخه در حال حاضر از کار افتاده یا خراب است، به شرح زیر است:
  • اگر دوچرخه در حال حاضر غیرفعال است، روی true تنظیم کنید.
  • اگر دوچرخه در حال حاضر غیرفعال نیست، روی false تنظیم کنید.
bikes[].rental_uris هدف - شی ضروری یک شی JSON که شامل URIهای اجاره‌ای برای Android، iOS و وب در فیلدهای مربوطه است.
bikes[].rental_uris.android URI مشروط مورد نیاز است یک URI که می‌تواند به یک برنامه Android با هدف android.intent.action.VIEW برای پشتیبانی از پیوندهای عمیق Android منتقل شود. rental_uris ارائه شده باید پیوندهای برنامه Android باشد تا در صورتی که کاربر برنامه ارائه دهنده را نصب نکرده باشد، برنامه مشاهده نیازی به مدیریت دستی تغییر مسیر کاربر به فروشگاه برنامه نداشته باشد.

این URI باید یک پیوند عمیق مخصوص دوچرخه فردی باشد، نه یک صفحه اجاره کلی که شامل اطلاعات بیش از یک دوچرخه است. پیوند عمیق باید کاربر را مستقیماً بدون هیچ گونه درخواست، صفحات بینابینی یا ورود به سیستم به دوچرخه برساند. اطمینان حاصل کنید که کاربران می توانند دوچرخه را ببینند حتی اگر هرگز برنامه را باز نکرده باشند.

URI ها لزوماً لازم نیست که bike_id دوچرخه را درج کنند، تا زمانی که شریک ابزار دیگری برای شناسایی دوچرخه مربوطه داشته باشد. برای مثال، اپلیکیشن اجاره می‌تواند از شناسه‌های دیگری در URI برای شناسایی منحصربه‌فرد دوچرخه استفاده کند.

اگر شریک برنامه اجاره اندروید دارد، این فیلد الزامی است.

مثال پیوندهای برنامه اندروید:

https://www.example.com/app?sid=1234567890&platform=android

bikes[].rental_uris.ios URI مشروط مورد نیاز است یک URI که می تواند در iOS برای راه اندازی برنامه اجاره دوچرخه استفاده شود. برای اطلاعات بیشتر در این مورد، به مقاله اپل درباره طرح‌های URL سفارشی iOS مراجعه کنید. rental_uris ارائه شده باید پیوندهای جهانی iOS باشد تا در صورتی که کاربر برنامه ارائه دهنده را نصب نکرده باشد، برنامه مشاهده نیازی به مدیریت دستی تغییر مسیر کاربر به فروشگاه برنامه نداشته باشد.

این URI باید یک پیوند عمیق مخصوص دوچرخه فردی باشد، نه یک صفحه اجاره کلی که شامل اطلاعات بیش از یک دوچرخه است. پیوند عمیق باید کاربر را مستقیماً بدون هیچ گونه درخواست، صفحات بینابینی یا ورود به سیستم به دوچرخه برساند. اطمینان حاصل کنید که کاربران می توانند دوچرخه را ببینند حتی اگر هرگز برنامه را باز نکرده باشند.

URI ها لزوماً لازم نیست که شناسه دوچرخه را درج کنند، تا زمانی که شریک ابزار دیگری برای شناسایی دوچرخه مربوطه داشته باشد. برای مثال، اپلیکیشن اجاره می‌تواند از شناسه‌های دیگری در URI برای شناسایی منحصربه‌فرد دوچرخه استفاده کند.

اگر شریک برنامه اجاره iOS داشته باشد، این قسمت الزامی است.

مثال پیوندهای جهانی iOS:

https://www.example.com/app?sid=1234567890&platform=ios

bikes[].rental_uris.web URL اختیاری

نشانی اینترنتی که می تواند توسط مرورگر وب برای نشان دادن اطلاعات بیشتر در مورد اجاره خودرو در این وسیله نقلیه استفاده شود.

این نشانی اینترنتی باید یک پیوند عمیق مخصوص دوچرخه فردی باشد، نه یک صفحه اجاره کلی که شامل اطلاعات بیش از یک دوچرخه است. پیوند عمیق باید کاربر را مستقیماً بدون هیچ گونه درخواست، صفحات بینابینی یا ورود به سیستم به دوچرخه برساند. اطمینان حاصل کنید که کاربران می توانند دوچرخه را ببینند حتی اگر هرگز برنامه را باز نکرده باشند.

لزوماً لازم نیست URLها دارای bike_id برای دوچرخه باشند یا از قراردادهای معنایی URLهای اجاره ای برای Android یا iOS پیروی کنند. برنامه اجاره می‌تواند از شناسه‌های دیگری در URL استفاده کند که دوچرخه را به‌طور منحصربه‌فرد شناسایی می‌کند.

اگر این قسمت تنظیم نشده باشد، به این معنی است که پیوندهای عمیق برای مرورگر وب پشتیبانی نمی شوند.

مقدار مثال:

https://www.example.com/app?sid=1234567890

bikes[].vehicle_type_id شناسه ضروری vehicle_type_id وسیله نقلیه همانطور که در بخش vehicle_types.json توضیح داده شده است.
bikes[].pricing_plan_id شناسه ضروری شناسه طرح قیمتی که هنگام اجاره این نوع خودرو اعمال می‌شود، همانطور که در بخش system_pricing_plans.json توضیح داده شده است.
bikes[].current_range_meters شناور غیر منفی مشروط مورد نیاز است اگر تعریف vehicle_type که مربوط به وسیله نقلیه است دارای موتور باشد، این قسمت الزامی است.

با توجه به میزان شارژ یا سطح سوخت فعلی خودرو، دورترین فاصله را بر حسب متر تنظیم کنید که وسیله نقلیه می تواند بدون نیاز به شارژ یا سوخت گیری مجدد طی کند.

bikes[].last_reported مهر زمان اختیاری آخرین باری را که وسیله نقلیه وضعیت خود را به بخش پشتیبان اپراتور گزارش کرد تنظیم کنید.

مثال زیر برای free_bike_status.json :

"bikes": [{
    "bike_id": "xyz123",
    "lat": 12.34,
    "lon": 56.78,
    "is_reserved": true,
    "is_disabled": false,
    "rental_uris":{
      "android": "https://www.example.com/app?sid=1234567890&platform=android",
      "ios": "https://www.example.com/app?sid=1234567890&platform=ios",
      "web": "https://www.example.com/app?sid=1234567890"
    },
    "vehicle_type_id": "scooter_electric",
    "pricing_plan_id": "sydneyPlan1",
    "current_range_meters": 4500,
    "last_reported": 1434054678
},
{
    "bike_id": "abc123",
    "lat": 1.34,
    "lon": 146.78,
    "is_reserved": false,
    "is_disabled": true,
    "rental_uris":{
      "android": "https://www.example.com/app?sid=1234567890&platform=android",
      "ios": "https://www.example.com/app?sid=1234567890&platform=ios",
      "web": "https://www.example.com/app?sid=1234567890"
    },
    "vehicle_type_id": "bike_manual",
    "pricing_plan_id": "sydneyPlan1",
    "last_reported": 1434054241
}
]

مورد نیاز: automjet_types.json (سیستم متصل و بدون بارانداز)

در صورت نیاز به مشخصات GBFS مراجعه کنید.

این فید جزئیات انواع خودروهای جداگانه را که در بخش free_bike_status.json به آن اشاره شده است، تعریف می کند.

نام زمینه تایپ کنید مورد نیاز شرح
vehicle_types آرایه ضروری آرایه ای از اشیاء، که در آن هر شی یک نوع وسیله نقلیه مجزا را در کاتالوگ ارائه دهنده تعریف می کند. برای یک نوع وسیله نقلیه فقط یک شیء می تواند وجود داشته باشد.
vehicle_types[].vehicle_type_id شناسه ضروری یک شناسه منحصر به فرد برای یک نوع وسیله نقلیه مشخص.
vehicle_types[].form_factor Enum ضروری یک عدد که ضریب فرم کلی خودرو را از لیست مقادیر معتبر فعلی زیر نشان می‌دهد:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type Enum ضروری یک عدد که نوع پیشرانه اولیه خودرو را از لیست مقادیر معتبر فعلی زیر نشان می‌دهد:
  • human : پیشرانه پدال یا پا
  • electric_assist : فقط در کنار نیروی محرکه انسان، نیرو را تامین می کند
  • electric : دارای حالت دریچه گاز با موتوری که با باتری کار می کند
  • combustion : شامل حالت دریچه گاز با موتور گازسوز است
vehicle_types[].max_range_meters شناور غیر منفی مشروط مورد نیاز است اگر propulsion_type روی human تنظیم نشده باشد، وسیله نقلیه دارای یک موتور است و بنابراین این قسمت مورد نیاز است.

زمانی که خودرو کاملاً سوخت یا شارژ شده است، دورترین فاصله را بر حسب متر تنظیم کنید که وسیله نقلیه می‌تواند بدون نیاز به شارژ مجدد یا سوخت‌گیری طی کند.

مثال زیر برای vehicle_types.json :

"vehicle_types": [
  {
    "vehicle_type_id": "bike_manual",
    "form_factor": "bicycle",
    "propulsion_type": "human"
  },
  {
    "vehicle_type_id": "scooter_electric",
    "form_factor": "scooter",
    "propulsion_type": "electric",
    "max_range_meters": 10000
  }
]

مورد نیاز: system_pricing_plans.json (سیستم Dockless)

در صورت نیاز به مشخصات GBFS مراجعه کنید.

این خوراک، طرح‌های قیمتی خودروهای ایستاده را مشخص می‌کند. ما از ارائه‌دهندگان می‌خواهیم اطلاعات قیمت خودروهای ایستاده را نشان دهند.

نام زمینه تایپ کنید مورد نیاز شرح
plans آرایه ضروری آرایه ای از اشیا که در آن هر شی یک طرح قیمت معین را تعریف می کند.
plans[].plan_id شناسه ضروری رشته ای که نشان دهنده یک شناسه منحصر به فرد برای طرح قیمت معینی است که ارائه دهنده ارائه می دهد.
plans[].url URL اختیاری URL که کاربران نهایی را به اطلاعات بیشتر در مورد طرح قیمت راهنمایی می کند.
plans[].currency رشته ضروری استاندارد ISO 4217 برای طرح قیمت.
plans[].price شناور غیر منفی ضروری

طرح قیمت باید به عنوان یک طرح قیمتی بدون رتبه یا یک طرح قیمت رتبه بندی شده تعریف شود:

طرح قیمت بدون رتبه

این طرح یک کرایه تک و ثابت است.

فیلد زیر را تنظیم کنید:

  • price : قیمت ثابت کل سفر.
طرح قیمت رتبه بندی شده

این طرح یک قیمت نرخ تکه ای و خطی است.

فیلد زیر را تنظیم کنید:

  • price : قیمت پایه که دقیقاً یک بار در هر سفر شارژ می شود.

یک یا هر دو فیلد زیر را تنظیم کنید:

  • per_km_pricing : قیمت سفر با نرخ هر کیلومتر مشخص شده است.
  • per_min_pricing : قیمت سفر با نرخ در دقیقه مشخص شده است.
plans[].per_km_pricing آرایه مشروط مورد نیاز است

اگر قیمت تابعی از مسافت طی شده است که بر حسب کیلومتر نمایش داده می شود، این قسمت الزامی است.

آرایه ای از اشیاء که در آن هر شی یک قطعه تقسیم شده با فاصله مشخص را تعریف می کند. مقدار start هر بخش باید کمتر یا مساوی با مقدار start بخش بعدی باشد.

برای تعیین قیمت کل طرح داده شده، plans[].price را به قیمت‌های انباشته برای بخش‌های plans[].per_km_pricing و plans[].per_min_pricing .

اگر این فیلد تنظیم نشده باشد، قیمت های متغیری بر اساس مسافت وجود ندارد و بنابراین، هیچ کدام به عنوان بخشی از قیمت کل لحاظ نمی شود.

plans[].per_km_pricing[].start عدد صحیح غیر منفی ضروری تعداد کیلومترهایی که در آن نرخ قطعه شروع به شارژ می کند. این فیلد روی مقدار فراگیر تنظیم شده است که محدوده بخش را شروع می کند. بنابراین، پس از سپری شدن تعداد کیلومترها، rate یک بار شارژ می شود.
plans[].per_km_pricing[].rate شناور ضروری نرخی که برای هر interval در نظر گرفته می‌شود، که از ابتدای بخش start می‌شود. اگر این فیلد روی عدد منفی تنظیم شود، مسافر تخفیف دریافت می کند.
plans[].per_km_pricing[].interval عدد صحیح غیر منفی ضروری

فاصله زمانی بر حسب کیلومتر که در آن rate قطعه به طور نامحدود دوباره اعمال می شود، مگر اینکه end قطعه روی هر عدد صحیح غیر منفی تنظیم شود.

rate یک بار در شروع هر interval اعمال می شود و هیچ دور کردن فاصله در نظر گرفته نمی شود.

اگر end بخش روی هر عدد صحیح غیر منفی تنظیم شود، rate بخش تا زمانی که مقدار end بخش را شامل نمی شود، دوباره اعمال می شود.

اگر این فیلد روی 0 تنظیم شود، rate دقیقاً یک بار در start بخش شارژ می شود.

plans[].per_km_pricing[].end عدد صحیح غیر منفی اختیاری

تعداد کیلومترهایی که در آن نقطه rate برای بخش دیگر اعمال نمی شود. این فیلد روی مقدار انحصاری تنظیم می شود که به محدوده بخش پایان می دهد. به عنوان مثال، اگر end روی 40 تنظیم شود، این rate دیگر در 40 کیلومتر اعمال نمی شود.

اگر این فیلد تنظیم نشده باشد یا خالی باشد، rate برای بخش تا پایان سفر، علاوه بر بخش‌های اضافی که به دنبال آن است، محاسبه می‌شود.

plans[].per_min_pricing آرایه مشروط مورد نیاز است

اگر قیمت تابعی از زمان سپری شده است که بر حسب دقیقه نمایش داده می شود، این قسمت الزامی است.

آرایه ای از اشیاء که در آن هر شی یک بخش تقسیم شده با زمان معین را تعریف می کند. مقدار start هر بخش باید کمتر یا مساوی با مقدار start بخش بعدی باشد.

برای تعیین قیمت کل طرح داده شده، plans[].price را به قیمت‌های انباشته برای بخش‌های plans[].per_km_pricing و plans[].per_min_pricing .

اگر این فیلد تنظیم نشده باشد، قیمت‌های متغیری براساس زمان وجود ندارد و بنابراین هیچ کدام به عنوان بخشی از قیمت کل لحاظ نمی‌شوند.

plans[].per_min_pricing[].start شناور ضروری تعداد دقیقه‌هایی که در آن نرخ بخش شروع به شارژ می‌کند. این فیلد روی مقدار فراگیر تنظیم شده است که محدوده بخش را شروع می کند. بنابراین، پس از سپری شدن تعداد دقیقه تعیین شده، rate یک بار شارژ می شود.
plans[].per_min_pricing[].rate شناور ضروری نرخی که برای هر interval شارژ می شود. نرخ از ابتدای بخش start می شود. اگر این فیلد روی عدد منفی تنظیم شود، مسافر تخفیف دریافت می کند.
plans[].per_min_pricing[].interval عدد صحیح غیر منفی ضروری

فاصله زمانی بر حسب دقیقه که در آن rate بخش به طور نامحدود دوباره اعمال می شود، مگر اینکه end قطعه روی هر عدد صحیح غیر منفی تنظیم شود.

rate یک بار در شروع هر interval اعمال می شود و هیچ دور کردن زمان سفر در نظر گرفته نمی شود.

اگر end بخش روی هر عدد صحیح غیر منفی تنظیم شود، rate بخش تا زمانی که مقدار end بخش را شامل نمی شود، دوباره اعمال می شود.

اگر این فیلد روی 0 تنظیم شود، rate دقیقاً یک بار در start بخش شارژ می شود.

plans[].per_min_pricing[].end عدد صحیح غیر منفی اختیاری

تعداد دقیقه‌هایی که در آنها rate برای بخش دیگر اعمال نمی‌شود. این فیلد روی مقدار انحصاری تنظیم می شود که به محدوده بخش پایان می دهد. برای مثال، اگر end روی 20 تنظیم شود، rate دیگر در 20 دقیقه اعمال نمی شود.

اگر این فیلد تنظیم نشده باشد یا خالی باشد، rate برای بخش تا پایان سفر، علاوه بر بخش‌های اضافی که به دنبال آن است، محاسبه می‌شود.

نمونه هایی برای system_pricing_plans.json

این بخش نمونه کدهای system_pricing_plans.json را ارائه می دهد. جزئیات و نتایج مربوط به هر مثال نیز ارائه شده است.

مثال 1 برای system_pricing_plans.json

نمونه کد طرح قیمت زیر هزینه ها را بر اساس زمان سفر برای فواصل زمانی زیر نشان می دهد:

  • [0،1): 2 دلار آمریکا
    • اگر سفر کمتر از یک دقیقه باشد، کاربر 2 دلار آمریکا می پردازد.
    • مثال: سفر 59 ثانیه ای
  • [1،2): 3 دلار آمریکا
    • اگر سفر طولانی تر یا مساوی یک دقیقه اما کمتر از دو دقیقه باشد، کاربر 2 دلار + 1 دلار = 3 دلار آمریکا می پردازد.
    • مثال: سفر 1 دقیقه ای. سفر 1 دقیقه ای 45 ثانیه ای
  • x تعداد دقیقه هایی که x بیشتر یا مساوی 2 است: $3 + (($2 + $1) * ( x - 2 + 1)) USD
    • اگر سفر طولانی‌تر یا برابر با دو دقیقه باشد، کاربر برای بخشی از سفر کمتر از دو دقیقه 3 دلار می‌پردازد و (1 دلار [ادامه از اولین ورودی فهرست per_min_pricing ] + 2 دلار [دومین ورودی فهرست per_min_pricing ]) برای هر دقیقه بعد و شامل دو دقیقه.
    • مثال ها:
      • هزینه سفر 2 دقیقه ای 3 دلار + (2 دلار + 1 دلار) = 6 دلار آمریکا
      • هزینه سفر 2 دقیقه ای 30 ثانیه ای 3 دلار + (2 دلار + 1 دلار) = 6 دلار آمریکا
      • هزینه سفر 3 دقیقه ای 3 دلار + ((2 دلار + 1 دلار) * 2) = 9 دلار آمریکا
      • هزینه سفر 10 دقیقه ای 3 دلار + ((2 دلار + 1 دلار) * 9) = 30 دلار آمریکا
{
  "plans": {
    "plan_id": "plan1",
    "currency": "USD",
    "price": 2,
    "per_min_pricing": [
      {
          "interval": 1,
          "rate": 1,
          "start": 1
      },
      {
          "interval": 1,
          "rate": 2,
          "start": 2
      }
    ],
  }
}

مثال 2 برای system_pricing_plans.json

در این مثال، نمونه کدی را برای طرح قیمتی نشان می‌دهیم که با نرخ دقیقه و کیلومتر شارژ می‌شود:

  • به طور خاص، کاربر نهایی 0.25 دلار کانادا در هر کیلومتر و همچنین 0.50 دلار کانادا در هر دقیقه هزینه دریافت می کند.
  • هر دوی این نرخ ها به طور همزمان اتفاق می افتد و به یکدیگر وابسته نیستند.
  • بنابراین، یک سفر یک کیلومتری که 10 دقیقه طول می کشد، 9 دلار کانادا هزینه دارد. تفکیک هزینه ها به شرح زیر است:
    • 3 دلار، قیمت پایه
    • 0.25 دلار * 2، یک بار در شروع سفر و یک بار در علامت 1 کیلومتر شارژ می شود.
    • 0.5 دلار * 11، یک بار در شروع هر دقیقه شارژ می شود. شارژ از 0 ثانیه شروع می شود و آخرین فاصله زمانی 10 دقیقه شارژ می شود.
{
  "plans": {
    "plan_id": "plan2",
    "currency": "CAD",
    "price": 3,
    "per_km_pricing": [{
      "start": 0,
      "rate": 0.25,
      "interval": 1
    }],
    "per_min_pricing": [{
      "start": 0,
      "rate": 0.50,
      "interval": 1
    }]
  }
}

به صورت مشروط مورد نیاز است: geofencing_zones.json (سیستم متصل و بدون بارانداز)

در صورت نیاز به مشخصات GBFS مراجعه کنید.

این فید داده‌های geofencing را برای خودروهای ایستاده تعریف می‌کند. داده‌های ژئوفنسینگ شامل مرزهای جغرافیایی است که مشخص می‌کند وسایل نقلیه مجاز به شروع و پایان سواری هستند، همراه با سرعتی که وسایل نقلیه می‌توانند با آن حرکت کنند. این سرعت یا حداکثر سرعت خودرو یا محدودیت سرعت جاده ای است که وسیله نقلیه در آن قرار دارد، هر کدام کمتر باشد. رانندگان باید قوانین و مقررات محلی را رعایت کنند.

ما از این داده‌ها استفاده می‌کنیم تا وقتی کاربر یک مسیر معین را جستجو می‌کند، اگر پایان سفر خارج از geofence‌های خاص باشد، نتیجه Micrimobility فیلتر می‌شود. اگر geofences ارائه نشده باشد، Google با این سرویس به گونه ای رفتار می کند که گویی هیچ محدودیت مرزی ندارد.

نام زمینه تایپ کنید مورد نیاز شرح
geofencing_zones هدف - شی ضروری یک شی FeatureCollection همانطور که توسط IETF RFC 7946 توضیح داده شده است، یک شی است که دارای یک فیلد به نام features . مقدار features ها یک آرایه JSON است. هر عنصر آرایه JSON یک شی Feature است.

هر منطقه جغرافیایی، قوانین و ویژگی های مرتبط با آن، و تعاریف FeatureCollection در اینجا به عنوان بخشی از تعاریف فید geofencing_zones.json مشخص شده است.

geofencing_zones.type رشته ضروری همانطور که توسط IETF RFC 7946 توضیح داده شده است، روی FeatureCollection تنظیم کنید.
geofencing_zones.features آرایه ضروری یک آرایه JSON، که در آن هر عنصر آرایه JSON یک شی Feature است.
geofencing_zones.features[].type رشته ضروری همانطور که توسط IETF RFC 7946 توضیح داده شده است، روی Feature تنظیم کنید.
geofencing_zones.features[].geometry چند ضلعی GeoJSON ضروری یک GeoJSON Multipolygon که توضیح می‌دهد که سواری‌ها نمی‌توانند از کجا شروع شوند، به پایان برسند، از آن عبور کنند، علاوه بر محدودیت‌های دیگر. آرایش نقاط در جهت عقربه های ساعت، ناحیه محصور شده توسط چند ضلعی را مشخص می کند، در حالی که یک ترتیب خلاف جهت عقربه های ساعت، ناحیه خارج از چند ضلعی را مشخص می کند. برای اطلاعات بیشتر در این مورد، به قانون دست راست مراجعه کنید.
geofencing_zones.features[].properties هدف - شی ضروری شیئی که کمک هزینه ها و محدودیت های سفر را مشخص می کند.
geofencing_zones.features[].properties.rules آرایه اختیاری آرایه ای از اشیا، که در آن هر شی یک و تنها یک قانون را تعریف می کند. اگر دو یا چند قانون با هم تداخل داشته باشند، با هم برخورد کنند یا به نحوی با هم تداخل داشته باشند، اولین قانون تعریف شده در ترتیب فایل JSON اولویت دارد.
geofencing_zones.features[].properties.rules[].vehicle_type_id آرایه اختیاری آرایه‌ای از شناسه‌های نوع خودرو، که در آن هر عنصر یک vehicle_type_id است، که هر گونه محدودیتی باید برای آن اعمال شود. اگر هیچ vehicle_type_id مشخص نشده باشد، محدودیت ها برای همه انواع خودرو اعمال می شود.
geofencing_zones.features[].properties.rules[].ride_allowed بولی ضروری این که آیا دوچرخه‌سواری بدون اسکله آزاد می‌تواند در منطقه شروع و پایان یابد، به شرح زیر:
  • اگر دوچرخه سواری باز شده می تواند در منطقه شروع و پایان یابد، روی true تنظیم کنید.
  • اگر دوچرخه سواری باز شده نمی تواند در منطقه شروع و پایان یابد، روی false تنظیم کنید.

مثال زیر برای geofencing_zones.json است:

"geofencing_zones":{
  "type":"FeatureCollection",
  "features":[{
    "type":"Feature",
    "properties":{
      "rules":[{
        "vehicle_type_id":"scooter",
        "ride_allowed": false
      }]
    },
    "geometry":{
      "type":"MultiPolygon",
      "coordinates":[[[
        [-122.66780376434326, 45.49896266763551],
        [-122.66810417175292, 45.49824825558575],
        [-122.66830801963805, 45.49632305799116],
        [-122.66780376434326, 45.49896266763551]
      ]]]
    }
  }]
}

مورد نیاز: station_information.json (سیستم متصل)

در صورت نیاز به مشخصات GBFS مراجعه کنید.

این فید اطلاعات کلی در مورد ایستگاه های اشتراک دوچرخه عمومی را تعریف می کند.

نام زمینه تایپ کنید مورد نیاز شرح
stations آرایه ضروری آرایه ای از اشیا که در آن هر شی یک و تنها یک ایستگاه را تعریف می کند.
stations[].station_id رشته ضروری شناسه ایستگاه
stations[].name رشته ضروری نام عمومی ایستگاه به زبان محلی شهری که ایستگاه در آن واقع شده است. name باید به آنچه در تابلوهای ایستگاه استفاده می شود، در صورت وجود، مطابقت داشته باشد، یا باید بازتابی از مکان ایستگاه از طریق استفاده از یک علامت باشد. تقاطع خیابان یا نقطه عطف محلی از کلمات اختصاری مانند St. برای "خیابان" مگر اینکه به صراحت در تابلوها استفاده شود، و name باید در حروف مختلط به دنبال قراردادهای محلی برای حروف بزرگ کردن نام مکان‌ها باشد و نه با حروف بزرگ.
stations[].lat عرض جغرافیایی ضروری عرض جغرافیایی WGS 84 ایستگاه، در قالب درجه اعشار.
stations[].lon طول جغرافیایی ضروری طول جغرافیایی WGS 84 ایستگاه، در قالب درجه اعشار.
stations[].capacity عدد صحیح غیر منفی اختیاری یک عدد صحیح غیر منفی که تعداد کل نقاط اتصال نصب شده در ایستگاه را نشان می دهد، چه موجود و چه غیر قابل دسترس.
stations[].rental_uris هدف - شی ضروری

یک شی JSON که شامل URIهای اجاره‌ای برای Android، iOS و وب در فیلدهای مربوطه است.

اگر این URI‌ها مشخص شده باشند، پیوندهای عمیق پیش‌فرض را که هنگام ورود ارائه‌دهنده تنظیم شده‌اند، لغو می‌کنند.

stations[].rental_uris.android URI مشروط مورد نیاز است

یک URI که می‌تواند به یک برنامه Android با هدف android.intent.action.VIEW برای پشتیبانی از پیوندهای عمیق Android منتقل شود. rental_uris ارائه شده باید پیوندهای برنامه Android باشد تا در صورتی که کاربر برنامه ارائه دهنده را نصب نکرده باشد، برنامه مشاهده نیازی به مدیریت دستی تغییر مسیر کاربر به فروشگاه برنامه نداشته باشد.

این URI باید یک پیوند عمیق مخصوص هر ایستگاه باشد، نه یک صفحه اجاره عمومی که شامل اطلاعات بیش از یک ایستگاه است. پیوند عمیق باید کاربر را مستقیماً بدون هیچ گونه درخواست، صفحات بینابینی یا لاگینی به ایستگاه برساند. اطمینان حاصل کنید که کاربران می توانند ایستگاه را ببینند حتی اگر هرگز برنامه را باز نکرده باشند.

تا زمانی که شریک ابزار دیگری برای شناسایی ایستگاه مربوطه داشته باشد، لزوماً نیازی به URI نیست که station_id را برای ایستگاه درج کند. به عنوان مثال، برنامه اجاره می‌تواند از شناسه‌های دیگری در URI برای شناسایی منحصربه‌فرد ایستگاه استفاده کند.

اگر شریک برنامه اجاره اندروید دارد، این فیلد الزامی است.

مثال پیوندهای برنامه اندروید:

https://www.example.com/app?sid=1234567890&platform=android

stations[].rental_uris.ios URI مشروط مورد نیاز است

یک URI که می تواند در iOS برای راه اندازی برنامه اجاره ایستگاه استفاده شود. برای اطلاعات بیشتر در این مورد، به مقاله اپل درباره طرح‌های URL سفارشی iOS مراجعه کنید. rental_uris ارائه شده باید پیوندهای جهانی iOS باشد تا در صورتی که کاربر برنامه ارائه دهنده را نصب نکرده باشد، برنامه مشاهده نیازی به مدیریت دستی تغییر مسیر کاربر به فروشگاه برنامه نداشته باشد.

این URI باید یک پیوند عمیق مخصوص هر ایستگاه باشد، نه یک صفحه اجاره عمومی که شامل اطلاعات بیش از یک ایستگاه است. پیوند عمیق باید کاربر را مستقیماً بدون هیچ گونه درخواست، صفحات بینابینی یا لاگینی به ایستگاه برساند. اطمینان حاصل کنید که کاربران می توانند ایستگاه را ببینند حتی اگر هرگز برنامه را باز نکرده باشند.

لزوماً نیازی به URI نیست که station_id را برای ایستگاه درج کند. برنامه اجاره می تواند از شناسه های دیگر در URI برای شناسایی منحصر به فرد ایستگاه استفاده کند.

اگر شریک برنامه اجاره iOS داشته باشد، این قسمت الزامی است.

مثال پیوندهای جهانی iOS:

https://www.example.com/app?sid=1234567890&platform=ios

stations[].rental_uris.web URL اختیاری

نشانی اینترنتی که می تواند توسط مرورگر وب برای نشان دادن اطلاعات بیشتر در مورد نحوه اجاره خودرو در این ایستگاه استفاده شود.

این نشانی وب باید یک پیوند عمیق مخصوص ایستگاه فردی باشد، نه یک صفحه اجاره کلی که شامل اطلاعات بیش از یک ایستگاه است. پیوند عمیق باید کاربر را مستقیماً بدون هیچ گونه درخواست، صفحات بینابینی یا لاگینی به ایستگاه برساند. اطمینان حاصل کنید که کاربران می توانند ایستگاه را ببینند حتی اگر هرگز برنامه را باز نکرده باشند.

لزوماً نیازی به نشانی‌های اینترنتی نیست که شامل station_id برای ایستگاه باشند یا در غیر این صورت از قراردادهای معنایی URLهای اجاره‌ای برای Android یا iOS پیروی کنند. برنامه اجاره‌ای می‌تواند از شناسه‌های دیگری در URL استفاده کند که ایستگاه را به‌صورت منحصربه‌فرد شناسایی می‌کند.

اگر این قسمت تنظیم نشده باشد، به این معنی است که پیوندهای عمیق برای مرورگر وب پشتیبانی نمی شوند.

مقدار مثال:

https://www.example.com/app?sid=1234567890

مثال زیر برای station_information.json :

"stations": [
  {
    "station_id": "597",
    "name": "Silverthorne Road, Battersea",
    "lat": 51.472865,
    "lon": -0.148059,
    "capacity": 10,
    "rental_uris": {
        "android": "https://www.example.com/app?sid=1234567890&platform=android",
        "ios": "https://www.exampleexample.com/app?sid=1234567890&platform=ios",
        "web": "https://www.example.com/app?sid=1234567890&platform=web"
    }
  },
]

مورد نیاز: station_status.json (سیستم متصل)

در صورت نیاز به مشخصات GBFS مراجعه کنید.

این فید وضعیت به روز و فعلی ایستگاه های اشتراک دوچرخه عمومی را مشخص می کند.

نام زمینه تایپ کنید مورد نیاز شرح
stations آرایه ضروری آرایه ای از اشیا، که در آن هر شی یک و تنها یک ایستگاه را تعریف می کند.
stations[].station_id رشته ضروری شناسه ایستگاه
stations[].num_bikes_available عدد صحیح غیر منفی ضروری

یک عدد صحیح غیر منفی که تعداد دوچرخه‌های کاربردی را نشان می‌دهد که از نظر فیزیکی در ایستگاه هستند و ممکن است برای اجاره ارائه شوند.

برای تعیین اینکه آیا ایستگاه در حال حاضر دوچرخه اجاره می کند یا خیر، باید قسمت is_renting ایستگاه را بررسی کنید و یک مقدار بولی واقعی پیدا کنید.

stations[].vehicle_types_available آرایه اختیاری

مجموعه‌ای از اشیاء که تعداد کل وسایل نقلیه را مشخص می‌کند و بر اساس نوع وسیله نقلیه موجود در ایستگاه طبقه‌بندی می‌شود. هر شیء تعداد کل وسیله نقلیه را برای نوع وسیله نقلیه مرتبط مدل می کند. تعداد کل وسایل نقلیه از هر یک از این اشیا باید جمع شود تا با مقدار مشخص شده در قسمت num_bikes_available داشته باشد.

stations[].vehicle_types_available[].vehicle_type_id شناسه ضروری

vehicle_type_id هر نوع وسیله نقلیه موجود در ایستگاه همانطور که در automjet_types.json توضیح داده شده است.

stations[].vehicle_types_available[].count عدد صحیح غیر منفی ضروری

تعداد کل وسایل نقلیه موجود برای vehicle_type_id مربوطه در ایستگاه همانطور که در automjet_types.json تعریف شده است.

stations[].num_docks_available عدد صحیح غیر منفی مشروط مورد نیاز است

میدان مورد نیاز است، مگر اینکه ایستگاه ظرفیت اتصال نامحدودی داشته باشد. For example, virtual stations have unlimited docking capacities and the field isn't required.

A non-negative integer that represents the total number of functional docks physically at the station that are able to accept vehicle returns.

To determine whether the station currently accepts bike returns, you must inspect the station's is_returning field, and find a true Boolean value.

stations[].is_installed Boolean Required

A Boolean that indicates whether it's true that the station is currently on the street and installed.

If the station is installed on the street, set to true .

If the station isn't installed on the street, set to false .

stations[].is_renting Boolean Required

A Boolean that indicates whether it's true that the station currently rents bikes.

If the station currently rents bikes, set to true . Even if the station is empty, if it's set to allow rentals is_renting is set to true .

If the station doesn't currently rent bikes, set to false .

stations[].is_returning Boolean Required

A Boolean that indicates whether it's true that the station currently accepts bike returns.

If the station currently accepts bike returns, set to true . Even if the station is full, but would allow a return if it wasn't, is_returning is set to true .

If the station doesn't currently accept bike returns, set to false .

The following is an example of station_status.json :

"stations": [
        {
          "station_id": "2",
          "num_bikes_available": 6,
          "vehicle_types_available": [
            {
              "vehicle_type_id" : "scooter_electric",
              "count" : 2
            },
            {
              "vehicle_type_id" : "bike_manual",
              "count" : 4
            }
          ],
          "num_docks_available": 30,
          "is_installed": true,
          "is_renting": true,
          "is_returning": true,
          "last_reported": 1576119631
        },
]