הגדרות של GBFS

לפני שממשיכים לקטע הזה, אם עדיין לא עשיתם זאת, עליכם לבדוק את מערכות המיקרו-ניידות הנתמכות ושבהן אתם יוצרים את הפיד.

בקטעים הבאים, יש לכל כותרת את הפורמט הבא: Required|Optional|Conditionally required: Feed name (System supported). יש תמיכה במערכות הבאות:

  • מערכת עגינה
  • מערכת עגינה
  • מערכת עגינה ואביזר עגינה

כדי שהאפליקציה תשתלב עם Google בהצלחה, עליכם לספק רק את הקבצים הדרושים למערכת שהפיד מתאר, ולציין את שדות החובה בסעיפים הרלוונטיים. לשדות חובה המותנים בתנאים, יש לעיין בתיאור השדה. ניתן גם לציין שדות אופציונליים שמוסיפים מידע ומספקים חוויית משתמש טובה יותר.

כותרת נדרשת לפידים של מיקרו ניידות

פידים של מיקרו ניידות הם פידים שמכילים נתונים מובְנים של אביזר עגינה או ללא עגינה, כפי שמוגדר במאמר זה.

כל הפידים תמיד צריכים לציין את השדות הכלולים בטבלה הבאה ברמה העליונה של אובייקט ה-JSON, שנקרא בשם כותרת GBFS נפוצה.

שם השדה סוג דרישה תיאור
last_updated Timestamp נדרש חותמת זמן של 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 (מערכת עגינה ואביזר עגינה)

אפשר לעיין במפרט של GBFS.

הפיד הזה מספק פרטים לגבי מפעיל המערכת.

שם השדה סוג דרישה תיאור
system_id אינדונזיה נדרש מזהה ייחודי גלובלי של מערכת שיתוף הרכב. הערך הזה נועד להישאר ללא שינוי לאורך חיי המערכת. לכל מערכת או אזור גיאוגרפי נפרדים שבהם כלי הרכב מופעלים יש להקצות מזהה מערכת משלו. מזהי מערכת צריכים להיות מזוהים כמוצרים ששייכים למערכת מסוימת, ולא כמחרוזות אקראיות. לדוגמה, bcycle_austin או Bikeטאון_pdx.
name מחרוזת נדרש שם המערכת, שמוצג ללקוחות.
rental_apps פריט נדרש אובייקט JSON שמכיל את הפרטים של אפליקציית ההשאלה ל-Android ול-iOS בשדות המתאימים.
rental_apps.android פריט נדרש תנאי מכיל מידע על השכרות והורדות של אפליקציות להשכרה עבור פלטפורמת Android בשדות store_uri ו-discovery_uri. אם לספק המערכת יש אפליקציה להשכרת Android, השדה הזה הוא חובה.
rental_apps.android.store_uri URI נדרש URI שממנו ניתן להוריד את אפליקציית Android להשכרה. זהו בדרך כלל URI של חנות אפליקציות כמו Google Play. אם ה-URI מפנה לחנות כמו Google Play, מומלץ להשתמש ב-URI בהתאם לשיטות המומלצות ל-Android. כך, אפליקציית ה-URI תוכל לפתוח את ה-URI ישירות לאפליקציה של חנות האפליקציות במקום באתר.
rental_apps.android.discovery_uri URI נדרש URI בפורמט your_custom_scheme://your/path/here. ה-URI יכול לשמש את PackageManager.queryIntentActivities() כדי לבדוק אם האפליקציה ל-Android שהושכרה מותקנת במכשיר.
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 (מערכת ללא אביזר עגינה)

אפשר לעיין במפרט של GBFS.

הפיד הזה מגדיר את המיקומים והמאפיינים של כלי רכב עצמאיים. מטעמי פרטיות, אסור להציג בפיד הזה כלי רכב שהם חלק מהשכרה פעילה.

שם השדה סוג דרישה תיאור
bikes מערך נדרש מערך זמין של אופניים שהופסקו, כאשר כל אופנוע הוא אובייקט.
bikes[].bike_id אינדונזיה נדרש המזהה של אופניים.

כדי להגן על הפרטיות, אפשר לשנות את המזהה למחרוזת אקראית אחרי כל נסיעה.

bikes[].lat קו רוחב נדרש קו הרוחב של האופניים WGS 84, בפורמט מעלות עשרוניות.
bikes[].lon קו אורך נדרש קו האורך 84 של ה-WGS בפורמט האופניים.
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 קישורי עומק ל-Android. הרכיב rental_uris חייב להיות קישורים לאפליקציה ל-Android, כדי שאפליקציית הצפייה לא תצטרך לנהל באופן ידני את ההפניה האוטומטית של המשתמש לחנות האפליקציות במקרה שהאפליקציה לא מותקנת אצל הספק.

ה-URI הזה צריך להיות קישור עומק ספציפי לאופניים, ולא דף השכרה כללי שכולל מידע על יותר מאופנוע אחד. קישור העומק חייב להעביר את המשתמש ישירות לאופניים ללא בקשות, דפי ביניים או פרטי התחברות. מוודאים שהמשתמשים יכולים לראות את האופניים גם אם האפליקציה מעולם לא נפתחה.

מזהי URI לא חייבים לכלול את bike_id עבור האופניים, כל עוד לשותף יש אמצעי זיהוי אחרים. לדוגמה, אפליקציית ההשאלה יכולה להשתמש במזהים אחרים שב-URI כדי לזהות את האופניים באופן ייחודי.

אם לשותף יש אפליקציה להשכרת Android, חובה למלא את השדה הזה.

דוגמה לקישורים לאפליקציות ל-Android:

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

bikes[].rental_uris.ios URI נדרש תנאי URI שניתן להשתמש בו ב-iOS כדי להפעיל את אפליקציית ההשאלה לאופניים. למידע נוסף בנושא זה, ניתן לעיין במאמר של Apple בנושא # סכמות של כתובות URL מותאמות אישית ב-iOS. הרכיב rental_uris חייב להיות קישורים אוניברסליים ל-iOS, כדי שאפליקציית הצפייה לא תצטרך לנהל באופן ידני את ההפניה האוטומטית של המשתמש לחנות האפליקציות במקרה שלא הותקנה אפליקציית הספק על ידי המשתמש.

ה-URI הזה צריך להיות קישור עומק ספציפי לאופניים, ולא דף השכרה כללי שכולל מידע על יותר מאופנוע אחד. קישור העומק חייב להעביר את המשתמש ישירות לאופניים ללא בקשות, דפי ביניים או פרטי התחברות. מוודאים שהמשתמשים יכולים לראות את האופניים גם אם האפליקציה מעולם לא נפתחה.

מזהי URI לא חייבים לכלול את האופניים [id_id] עבור האופניים, כל עוד לשותף יש אמצעי זיהוי אחרים. לדוגמה, אפליקציית ההשאלה יכולה להשתמש במזהים אחרים בתוך ה-URI כדי לזהות את האופניים באופן ייחודי.

אם לשותף יש אפליקציה להשכרת iOS, חובה למלא את השדה הזה.

דוגמה לקישורים אוניברסליים ל-iOS:

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

bikes[].rental_uris.web כתובת URL אופציונלי

כתובת URL לשימוש בדפדפן אינטרנט כדי להציג מידע נוסף על השכרת רכב ברכב הזה.

כתובת ה-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 Timestamp אופציונלי מגדירים את הפעם האחרונה ש הרכב דיווח על הסטטוס שלו לקצה העורפי של האופרטור.

הנה דוגמה עבור 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
}
]

חובה: Vehicle_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) נדרש טיפוסים בני מנייה (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 (מערכת ללא אביזר)

אפשר לעיין במפרט של 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 של הפלח הבא, או שווה לו.

כדי לקבוע את המחיר הכולל של התוכנית הנתונה, יש להוסיף את הערך הנתון של תוכנית ##39;s plans[].price למחירים מצטברים עבור פלחים plans[].per_km_pricing ו-plans[].per_min_pricing.

אם השדה הזה לא מוגדר, אין מחירים משתנים בהתאם למרחק, ולכן אף אחד מהם לא כלול במחיר הכולל.

plans[].per_km_pricing[].start מספר שלם לא שלילי נדרש מספר הקילומטרים שבו מתחיל שיעור הפילוח. השדה הזה מוגדר כערך כולל שמתחיל את הטווח של הפלח. כך, לאחר שחלף מספר הקילומטרים, rate מחויב פעם אחת.
plans[].per_km_pricing[].rate מספר ממשי (Float) נדרש התעריף שבו מתבצע החיוב עבור כל 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 של הקטע הבא.

כדי לקבוע את המחיר הכולל של התוכנית הנתונה, יש להוסיף את הערך הנתון של תוכנית ##39;s plans[].price למחירים מצטברים עבור פלחים plans[].per_km_pricing ו-plans[].per_min_pricing.

אם השדה הזה לא מוגדר, אין מחירים משתנים המבוססים על זמן, ולכן אף אחד מהם לא נכלל במחיר הכולל.

plans[].per_min_pricing[].start מספר ממשי (Float) נדרש מספר הדקות שבהן החיוב על שיעור הפילוח מתחיל. השדה הזה מוגדר כערך כולל שמתחיל את הטווח של הפלח. כלומר, לאחר מספר הדקות שהוגדר, rate יחויב פעם אחת.
plans[].per_min_pricing[].rate מספר ממשי (Float) נדרש התעריף שבו אנחנו מחייבים עבור כל 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 USD
    • אם הנסיעה נמשכת פחות מדקה, המשתמש משלם 8 ש"ח.
    • דוגמה: נסיעה של 59 שניות
  • [1,2] $3 USD
    • אם המסלול ארוך יותר או שווה לדקה אחת, אבל פחות מ-2 דקות, המשתמש משלם 8 ש"ח + 4 ש"ח = 12 ש"ח.
    • דוגמאות: נסיעה למשך דקה אחת, נסיעה של 15 דקות באורך 45 שניות
  • x מספר הדקות שבו x גדול מ-2 או שווה ל-2: 12 ש"ח + (8 ש"ח + 4 ש"ח) * (x - 2 + 1)) דולר ארה"ב
    • אם המסלול ארוך יותר או שווה ל-2 דקות, המשתמש משלם 12 ש"ח על החלק הזה של הנסיעה פחות מ-2 דקות, ואז (4 ש"ח [המשך מהרשומה הראשונה ברשימה per_min_pricing] + 8 ש"ח [הכניסה השנייה ברשימה של per_min_pricing]) לכל דקה אחרי ההכללה של שתי דקות.
    • דוגמאות:
      • עלות הנסיעה למשך 2 דקות היא 12 ש"ח + (8 ש"ח + 4 ש"ח) = 24 ש"ח
      • 2 דקות בנות 30 שניות, עלות 12 ש"ח + (8 ש"ח + 4 ש"ח) = 24 ש"ח
      • 3 דקות הליכה, עלות 12 ש"ח + ((8 ש"ח + 4 ש"ח) * 2) = 36 ש"ח
      • עלות הנסיעה: 10 דקות + 12 ש"ח + (8 ש"ח + 4 ש"ח) * 9) = 120 ש"ח
{
  "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 דולר קנדי. פירוט העלויות הוא:
    • 12 ש"ח, מחיר בסיסי
    • 0.25 דולר ארה"ב * 2, שחויב פעם אחת בתחילת הנסיעה ופעם אחת במרחק של ק"מ אחד.
    • $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
    }]
  }
}

חובה לפי תנאי: Geofbidding_zones.json (מערכת עגינה ואביזר עגינה)

אפשר לעיין במפרט של GBFS.

הפיד הזה מגדיר את נתוני הגידור הגיאוגרפי של כלי רכב עצמאיים. נתוני גבולות וירטואליים כוללים את הגבולות הגיאוגרפיים שמציינים היכן מותר לכלי הרכב להתחיל את הנסיעה ולסיים אותה, לצד המהירות שבה הרכבים יכולים לנסוע. המהירות הזו היא המהירות המקסימלית של הרכב או המהירות שלו. הנהגים חייבים לציית לחוקים ולחוקים מקומיים.

אנחנו משתמשים בנתונים האלה כך שכאשר משתמש מחפש מסלול מסוים, אם סוף הנסיעה חורג מגבולות הגיאוגרפיים הספציפיים, התוצאה של 'ניידות' מסוננת. אם לא צוינו גבולות וירטואליים, Google מתייחסת לשירות כאילו אין הגבלות על גבולות.

שם השדה סוג דרישה תיאור
geofencing_zones פריט נדרש אובייקט FeatureCollection כמתואר ב- IETF RFC 7946 הוא אובייקט שיש לו שדה, בשם features. הערך של features הוא מערך JSON. כל רכיב במערך JSON הוא אובייקט Feature.

כל אזור עם גבולות גיאוגרפיים, הכללים והמאפיינים המשויכים אליו, וההגדרות של FeatureCollection, מצוינים כאן כחלק מהגדרות הפיד של geofencing_zones.json.

geofencing_zones.type מחרוזת נדרש מוגדר ל-FeatureCollection כפי שמתואר ב- IETF RFC 7946.
geofencing_zones.features מערך נדרש מערך JSON, שבו כל רכיב במערך JSON הוא אובייקט Feature.
geofencing_zones.features[].type מחרוזת נדרש מוגדר ל-Feature כפי שמתואר ב- IETF RFC 7946.
geofencing_zones.features[].geometry רב-מצולע גיאוגרפי נדרש ריבוי פוליגונים גיאוגרפי, שמתאר היכן המתקנים לא יכולים להתחיל, להסתיים, לעבור, בנוסף למגבלות אחרות. סידור לפי נקודות בכיוון השעון מגדיר את האזור שמוקף בפוליגון, וסדר נגד כיוון השעון מגדיר את האזור מחוץ לפוליגון. ניתן לקבל מידע נוסף בנושא בכלל שבצד שמאל.
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." for "Street" אלא אם צריך להשתמש במפורש בשילוט, וname צריך להשתמש באותיות רישיות וקטנות לפי המוסכמות המקומיות לגבי שימוש באותיות רישיות בשמות, ולא באותיות רישיות בלבד.
stations[].lat קו רוחב נדרש קו הרוחב של התחנה WGS 84, במעלות עשרוניות.
stations[].lon קו אורך נדרש קו האורך 84 של התחנה, בפורמט עשרוני.
stations[].capacity מספר שלם לא שלילי אופציונלי מספר שלם לא שלילי שמייצג את המספר הכולל של נקודות הרציף שהותקנו בתחנה. הן זמינות והן לא זמינות.
stations[].rental_uris פריט נדרש

אובייקט JSON שמכיל URI של השכרה ל-Android, ל-iOS ולאינטרנט בשדות המתאימים.

אם מזהי ה-URI האלה מצוינים, הם מבטלים את קישורי העומק שהוגדרו כברירת מחדל כשצורף לספק.

stations[].rental_uris.android URI נדרש תנאי

URI שניתן להעביר לאפליקציה ל-Android עם כוונה מתוך android.intent.action.VIEW ל-Android, לתמוך בקישורי עומק מסוג Android. המאפיין rental_uris שסופק חייב להיות קישורים לאפליקציה ל-Android כדי שאפליקציית התצוגה לא תצטרך לנהל באופן ידני את ההפניה של המשתמש לחנות האפליקציות במקרה שהאפליקציה לא מותקנת אצל המשתמש.

ה-URI הזה חייב להיות קישור עומק ספציפי לתחנה נפרדת, לא דף השכרה כללי שכולל מידע לגבי יותר מתחנה אחת. קישור העומק חייב להעביר את המשתמש ישירות לתחנה ללא הצגת בקשות, דפי ביניים או כניסות. ניתן לוודא שהמשתמשים יוכלו לראות את התחנה גם אם הם מעולם לא פתחו את האפליקציה.

מזהי URI לא חייבים לכלול את station_id בתחנה, כל עוד לשותף יש אמצעי זיהוי אחרים. לדוגמה, אפליקציית ההשאלה יכולה להשתמש במזהים אחרים שמופיעים ב-URI כדי לזהות את התחנה באופן ייחודי.

אם לשותף יש אפליקציה להשכרת Android, חובה למלא את השדה הזה.

דוגמה לקישורים לאפליקציות ל-Android:

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

stations[].rental_uris.ios URI נדרש תנאי

URI שניתן להשתמש בו ב-iOS כדי להפעיל את אפליקציית ההשאלה עבור התחנה. למידע נוסף על כך, ניתן לעיין במאמר של Apple בנושא סכמות של כתובות 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 אופציונלי

כתובת URL לשימוש בדפדפן אינטרנט כדי להציג מידע נוסף על השכרת רכב בתחנה זו.

כתובת ה-URL הזו צריכה להיות קישור עומק ספציפי לתחנה נפרדת, לא דף השכרה כללי שכולל מידע לגבי יותר מתחנה אחת. קישור העומק חייב להעביר את המשתמש ישירות לתחנה, ללא בקשות, דפי מעברון או כניסות. צריך לוודא שהמשתמשים יכולים לראות את התחנה גם אם הם מעולם לא פתחו את האפליקציה.

כתובות 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 מכל סוג רכב שזמין בתחנה כפי שמתואר ב-vehicle_types.json.

stations[].vehicle_types_available[].count מספר שלם לא שלילי נדרש

המספר הכולל של כלי הרכב הזמינים עבור vehicle_type_id התואמים בתחנה, כפי שמוגדר vehicle_types.json.

stations[].num_docks_available מספר שלם לא שלילי נדרש תנאי

חובה למלא את השדה הזה, אלא אם יש תחנה בעגינה ללא הגבלה. לדוגמה, לתחנות וירטואליות יש קיבולת תחנות עגינה בלתי מוגבלת והשדה אינו נדרש.

מספר שלם שאינו שלילי שמייצג את המספר הכולל של תחנות עגינה פונקציונליות בתחנה שיכולים לקבל החזרות.

כדי לראות אם התחנה מקבלת כרגע אופניים, עליך לבדוק את השדה is_returning בתחנה ולמצוא ערך בוליאני true.

stations[].is_installed בוליאני נדרש

ערך בוליאני שמציין אם התחנה נמצאת ברחוב והותקנה כרגע.

אם התחנה מותקנת ברחוב, יש להגדיר אותה ל-true.

אם התחנה לא מותקנת ברחוב, יש להגדיר אותה ל-false.

stations[].is_renting בוליאני נדרש

ערך בוליאני שמציין אם זה נכון שהתחנה מושכרת כרגע על אופניים.

אם כרגע מושכרות אופניים בתחנה, הגדרה היא true. גם אם התחנה ריקה, אם הערך מוגדר להתרת השכרות is_renting מוגדר ל-true.

אם התחנה לא השכרת אופניים כרגע, יש להגדיר את הערך false.

stations[].is_returning בוליאני נדרש

ערך בוליאני שמציין אם זה נכון שהתחנה מקבלת כרגע החזרות על אופניים.

אם התחנה מקבלת כרגע אופניים, יש להגדיר את true. גם אם התחנה מלאה, אבל תאפשר החזרה, אם הערך לא היה מוגדר, is_returning יוגדר כ-true.

אם התחנה לא מקבלת כרגע החזרות על אופניים, יש להגדיר את הערך false.

הנה דוגמה של 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
        },
]