GBFS Tanımları

Bu bölüme geçmeden önce, henüz yapmadıysanız feed'i oluşturduğunuz desteklenen mikro mobilite sistemlerini doğrulayın.

Aşağıdaki bölümlerde her başlık şu biçimdedir: Required|Optional|Conditionally required: Feed name (System supported). Aşağıdaki sistemler desteklenir:

  • Yuvaya yerleştirilmiş sistem
  • Yuvasız sistem
  • Yerleşik ve yerleşiksiz sistem

Google ile başarılı bir şekilde entegrasyon sağlamak için yalnızca feed'inizin tanımladığı sistem için gereken dosyaları sağlayın ve ilgili bölümlerde yer alan zorunlu alanları belirtin. Koşullu olarak zorunlu olan alanlarla ilgili yönergeler için alanın açıklamasına bakın. Ayrıca, bilgi ekleyen ve daha iyi bir kullanıcı deneyimi sağlayan isteğe bağlı alanları da belirtebilirsiniz.

Mikromobilite feed'leri için zorunlu başlık

Mikromobilite feed'leri, bu makalede tanımlandığı şekilde, yerleştirilmiş veya yerleştirilmemiş mikromobilite yapılandırılmış verilerini içeren feed'lerdir.

Tüm feed'ler, aşağıdaki tabloda yer alan alanları her zaman JSON nesnesinin en üst düzeyinde belirtmelidir. Bu alanlar toplu olarak ortak GBFS başlığı olarak bilinir.

Alan adı Tür Gereksinim Açıklama
last_updated Zaman damgası Zorunlu 1 Ocak 1970 00:00:00 UTC'den bu yana geçen saniye sayısını belirten bir POSIX zaman damgası.

Feed'deki verilerin en son güncellendiği zamana ayarlanır.

ttl Negatif olmayan tamsayı Zorunlu Feed'in güncellenmesine kadar kalan saniye sayısını gösteren negatif olmayan bir tam sayı.

Verilerin sabit bir hızda güncellenmesi gerekiyorsa bu değeri 0 olarak ayarlayın.

data JSON Zorunlu Tek tek özet akışlarının veri alanlarını içeren JSON.

Örneğin, ortak GBFS üstbilgisini belirten toplu bir free_bike_status.json feed'i aşağıdaki gibi olabilir:

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

Gerekli: system_information.json (Yuvaya yerleştirilmiş ve yuvaya yerleştirilmemiş sistem)

Gerekirse GBFS spesifikasyonuna bakın.

Bu feed, sistem operatörüyle ilgili ayrıntılar sağlar.

Alan adı Tür Gereksinim Açıklama
system_id Kimlik Zorunlu Araç paylaşım sisteminin genel olarak benzersiz tanımlayıcısı. Bu değerin, sistemin kullanım ömrü boyunca aynı kalması amaçlanmaktadır. Araçların kullanıldığı her farklı sistem veya coğrafi alanın kendi system_id'si OLMALIDIR. Sistem kimlikleri, rastgele dizeler yerine belirli bir sisteme ait olduğu tanınabilir OLMALIDIR. Örneğin, bcycle_austin veya biketown_pdx.
name Dize Zorunlu Müşterilere gösterilen sistemin adı.
rental_apps Nesne Zorunlu Kiralama uygulamasının Android ve iOS'e yönelik bilgilerini ilgili alanlarda içeren bir JSON nesnesi.
rental_apps.android Nesne Koşula bağlı olarak gerekli store_uri ve discovery_uri alanlarında Android platformu için kiralama uygulaması indirme ve uygulama keşfi bilgilerini içerir. Sistem sağlayıcının bir Android kiralama uygulaması varsa bu alan zorunludur.
rental_apps.android.store_uri URI Zorunlu Kiralık Android uygulamasının indirilebileceği URI. Bu genellikle Google Play gibi bir uygulama mağazasının URI'sidir. URI, Google Play gibi bir uygulama mağazasına yönlendiriyorsa görüntüleme uygulamasının URI'yi web sitesi yerine doğrudan yerel uygulama mağazası uygulamasında açabilmesi için URI'nin Android en iyi uygulamalarına uygun olmasını öneririz.
rental_apps.android.discovery_uri URI Zorunlu your_custom_scheme://your/path/here biçiminde olan URI. URI, PackageManager.queryIntentActivities() tarafından, kiralık Android uygulamasının cihaza yüklenip yüklenmediğini öğrenmek için kullanılabilir.
rental_apps.ios Nesne Koşula bağlı olarak gerekli store_uri ve discovery_uri alanlarında iOS platformu için kiralama uygulaması indirme ve uygulama keşfi bilgilerini içerir. Sistem sağlayıcının bir iOS kiralama uygulaması varsa bu alan zorunludur.
rental_apps.ios.store_uri URI Zorunlu Kiralama için kullanılan iOS uygulamasının indirilebileceği URI. Bu genellikle Apple App Store gibi bir uygulama mağazasının URI'sidir. URI, Apple App Store gibi bir uygulama mağazasına yönlendiriyorsa görüntüleme uygulamasının URI'yi doğrudan bir web sitesi yerine yerel uygulama mağazası uygulamasında açabilmesi için URI'nin iOS'teki en iyi uygulamalara uygun olmasını öneririz.
rental_apps.ios.discovery_uri URI Zorunlu your_custom_scheme:// biçiminde olan URI. URI, UIApplication canOpenURL: tarafından kiralama iOS uygulamasının cihaza yüklenip yüklenmediğini öğrenmek için kullanılabilir.

Zorunlu: free_bike_status.json (docksız sistem)

Gerekirse GBFS spesifikasyonuna bakın.

Bu feed, mevcut bağımsız araçların konumlarını ve özelliklerini tanımlar. Gizlilik nedeniyle, aktif kiralama kapsamında olan araçlar bu feed'de görünmemelidir.

Alan adı Tür Gereksinim Açıklama
bikes Dizi Zorunlu Şu anda kullanılabilen ve durdurulan bisikletlerin dizisi. Her bisiklet bir nesnedir.
bikes[].bike_id Kimlik Zorunlu Bir bisikletin tanımlayıcısı.

Gizliliği korumak için kimlik, her yolculuktan sonra rastgele bir dizeyle değiştirilebilir.

bikes[].lat Enlem Zorunlu Bisikletin ondalık derece biçiminde WGS 84 enlemi.
bikes[].lon Boylam Zorunlu Bisikletin ondalık derece biçimindeki WGS 84 boylamı.
bikes[].is_reserved Boole Zorunlu Bisikletin şu anda rezerve edilip edilmediği:
  • Bisiklet şu anda rezerve edilmişse true olarak ayarlayın.
  • Bisiklet şu anda rezerve edilmemişse false olarak ayarlayın.
bikes[].is_disabled Boole Zorunlu Bisikletin şu anda devre dışı olup olmadığı veya arızalı olup olmadığı aşağıdaki gibi gösterilir:
  • Bisiklet şu anda devre dışıysa true olarak ayarlayın.
  • Bisiklet şu anda devre dışı değilse false olarak ayarlayın.
bikes[].rental_uris Nesne Zorunlu Android, iOS ve web için kiralama URI'lerini ilgili alanlarda içeren bir JSON nesnesi.
bikes[].rental_uris.android URI Koşula bağlı olarak gerekli android.intent.action.VIEW Android intent'i ile Android uygulamasına aktarılabilen ve Android derin bağlantılarını destekleyen bir URI. rental_uris, kullanıcının sağlayıcı uygulaması yüklü olmaması durumunda görüntüleme uygulamasının kullanıcının uygulama mağazasına yönlendirilmesini manuel olarak yönetmesi gerekmemesi için Android App Links olmalıdır.

Bu URI, birden fazla bisikletle ilgili bilgileri içeren genel bir kiralama sayfası değil, bisiklete özel bir derin bağlantı olmalıdır. Derin bağlantı, kullanıcıyı herhangi bir istem, ara sayfa veya giriş işlemi olmadan doğrudan bisiklete yönlendirmelidir. Uygulamayı hiç açmamış olsalar bile kullanıcıların bisikleti görebildiğinden emin olun.

İş ortağının ilgili bisikleti tanımlamak için başka yöntemleri olduğu sürece, URI'lerin bisiklet için bike_id içermesi zorunlu değildir. Örneğin, kiralama uygulaması, bisikleti benzersiz şekilde tanımlamak için URI'deki diğer tanımlayıcıları kullanabilir.

İş ortağının Android kiralama uygulaması varsa bu alan zorunludur.

Android uygulama bağlantıları örneği:

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

bikes[].rental_uris.ios URI Koşula bağlı olarak gerekli Bisiklet kiralama uygulamasını iOS'te başlatmak için kullanılabilecek bir URI. Bu konu hakkında daha fazla bilgi için Apple'ın iOS özel URL şemaları hakkındaki makalesini inceleyin. Sağlanan rental_uris, iOS geçiş bağlantıları olmalıdır. Böylece, kullanıcıda sağlayıcı uygulaması yüklü değilse görüntüleme uygulamasının kullanıcıyı uygulama mağazasına yönlendirmeyi manuel olarak yönetmesi gerekmez.

Bu URI, birden fazla bisikletle ilgili bilgileri içeren genel bir kiralama sayfası değil, bisiklete özel bir derin bağlantı olmalıdır. Derin bağlantı, kullanıcıyı herhangi bir istem, ara sayfa veya giriş işlemi olmadan doğrudan bisiklete yönlendirmelidir. Uygulamayı hiç açmamış olsalar bile kullanıcıların bisikleti görebildiğinden emin olun.

İş ortağının ilgili bisikleti tanımlamak için başka yöntemleri olduğu sürece URI'lerin bisiklet için bike_id'yi içermesi zorunlu değildir. Örneğin, kiralama uygulaması, bisikleti benzersiz bir şekilde tanımlamak için URI'deki diğer tanımlayıcıları kullanabilir.

İş ortağının iOS kiralama uygulaması varsa bu alan zorunludur.

iOS Geçiş Bağlantısı örneği:

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

bikes[].rental_uris.web URL İsteğe bağlı

Bu araçta araç kiralama hakkında daha fazla bilgi göstermek için web tarayıcısı tarafından kullanılabilecek bir URL.

Bu URL, birden fazla bisikletle ilgili bilgileri içeren genel bir kiralama sayfası değil, bisiklete özel bir derin bağlantı olmalıdır. Derin bağlantı, kullanıcıyı herhangi bir istem, ara sayfa veya giriş işlemi olmadan doğrudan bisiklete yönlendirmelidir. Uygulamayı hiç açmamış olsalar bile kullanıcıların bisikleti görebildiğinden emin olun.

URL'lerin, bisiklet için bike_id parametresini içermesi veya Android ya da iOS için kiralama URL'lerinin anlamsal kurallarına uyması zorunlu değildir. Kiralama uygulaması, URL'de bisikleti benzersiz şekilde tanımlayan başka tanımlayıcılar kullanabilir.

Bu alan ayarlanmamışsa web tarayıcısı için derin bağlantıların desteklenmediği anlamına gelir.

Örnek değer:

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

bikes[].vehicle_type_id Kimlik Zorunlu vehicle_type_id bölümünde açıklandığı gibi aracın vehicle_types.json.
bikes[].pricing_plan_id Kimlik Zorunlu Bu araç türü, system_pricing_plans.json bölümünde açıklandığı şekilde kiralandığında uygulanan fiyat planının tanımlayıcısı.
bikes[].current_range_meters Negatif olmayan kayan noktalı sayı Koşula bağlı olarak gerekli Araca karşılık gelen vehicle_type tanımında motor varsa bu alan zorunludur.

Aracın mevcut şarj veya yakıt seviyesi göz önüne alındığında, yeniden şarj etmeye veya yakıt doldurmaya gerek kalmadan gidebileceği en uzak mesafeyi metre cinsinden ayarlayın.

bikes[].last_reported Zaman damgası İsteğe bağlı Aracın durumunu operatörün arka ucuna en son bildirdiği zamana ayarlanır.

Aşağıda free_bike_status.json için bir örnek verilmiştir:

"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
}
]

Zorunlu: vehicle_types.json (Park yeri olan ve park yeri olmayan sistem)

Gerekirse GBFS spesifikasyonuna bakın.

Bu feed, free_bike_status.json bölümünde belirtildiği gibi, tek tek araç türlerinin ayrıntılarını tanımlar.

Alan adı Tür Gereksinim Açıklama
vehicle_types Dizi Zorunlu Her nesnenin, sağlayıcının kataloğunda farklı bir araç türünü tanımladığı bir nesne dizisi. Belirli bir araç türü için yalnızca bir nesne olabilir.
vehicle_types[].vehicle_type_id Kimlik Zorunlu Belirli bir araç türünün benzersiz tanımlayıcısı.
vehicle_types[].form_factor Enum Zorunlu Şu anda geçerli olan aşağıdaki değerler listesinden aracın genel form faktörünü temsil eden bir enum:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type Enum Zorunlu Şu anda geçerli olan aşağıdaki değerler listesinden aracın birincil tahrik türünü temsil eden bir enum:
  • human: Pedal veya ayakla itme
  • electric_assist: Yalnızca insan gücüyle birlikte güç sağlar.
  • electric: Pil gücüyle çalışan bir motorla gaz kelebeği modu içerir.
  • combustion: Gaz motoruyla çalışan bir motor içeren gaz kelebeği modu
vehicle_types[].max_range_meters Negatif olmayan kayan noktalı sayı Koşula bağlı olarak gerekli propulsion_type, human olarak ayarlanmamışsa araçta motor vardır ve bu nedenle bu alan gereklidir.

Araç tam dolu veya tam şarjlıyken yeniden dolum veya şarj etmeye gerek kalmadan gidebileceği en uzak mesafeyi metre cinsinden belirtir.

Aşağıda vehicle_types.json için bir örnek verilmiştir:

"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
  }
]

Gerekli: system_pricing_plans.json (Dockless sistemi)

Gerekirse GBFS spesifikasyonuna bakın.

Bu feed, bağımsız araçların fiyat planlarını tanımlar. Sağlayıcıların, bağımsız araçlar için fiyat bilgilerini göstermesi zorunludur.

Alan adı Tür Gereksinim Açıklama
plans Dizi Zorunlu Her nesnenin belirli bir fiyat planını tanımladığı bir nesne dizisi.
plans[].plan_id Kimlik Zorunlu Sağlayıcının sunduğu belirli fiyat planının benzersiz tanımlayıcısını temsil eden bir dize.
plans[].url URL İsteğe bağlı Son kullanıcıları fiyat planı hakkında daha fazla bilgiye yönlendiren URL.
plans[].currency Dize Zorunlu Fiyat planı için ISO 4217 standardı.
plans[].price Negatif olmayan kayan noktalı sayı Zorunlu

Fiyat planı, derecelendirilmemiş fiyat planı veya derecelendirilmiş fiyat planı olarak tanımlanmalıdır:

Derecelendirilmemiş fiyat planı

Bu plan, tek bir sabit ücret içerir.

Aşağıdaki alanı ayarlayın:

  • price: Seyahatin tamamının sabit fiyatı.
Ücretli fiyat planı

Bu plan, parça parça ve doğrusal oranlı bir fiyata sahiptir.

Aşağıdaki alanı ayarlayın:

  • price: Seyahat başına tam olarak bir kez alınan taban fiyat.

Aşağıdaki alanlardan birini veya her ikisini ayarlayın:

  • per_km_pricing: Kilometre başına ücret olarak belirtilen gezi fiyatı.
  • per_min_pricing: Dakika başına ücret olarak belirtilen seyahat fiyatı.
plans[].per_km_pricing Dizi Koşula bağlı olarak gerekli

Fiyat, gidilen mesafeye bağlıysa ve kilometre cinsinden gösteriliyorsa bu alan zorunludur.

Her nesnenin belirli bir mesafeye bölünmüş segmenti tanımladığı bir nesne dizisi. Her segmentin start değeri, bir sonraki segmentin start değerinden küçük veya ona eşit olmalıdır.

Belirli bir planın toplam fiyatını belirlemek için söz konusu planın plans[].price değerini, plans[].per_km_pricing ve plans[].per_min_pricing içindeki segmentlerin tahakkuk eden fiyatlarına ekleyin.

Bu alan ayarlanmazsa mesafeye dayalı değişken fiyatlar olmaz ve bu nedenle, toplam fiyata dahil edilmez.

plans[].per_km_pricing[].start Negatif olmayan tamsayı Zorunlu Segment ücretinin alınmaya başlandığı kilometre sayısı. Bu alan, segmentin aralığını başlatan kapsayıcı değer olarak ayarlanır. Bu nedenle, kilometre sayısı tamamlandığında rate tutarında tek bir ödeme alınır.
plans[].per_km_pricing[].rate Kayan Zorunlu Her interval için alınan ücret. Bu ücret, segmentin start dahil olmak üzere başlangıcından itibaren geçerlidir. Bu alan negatif bir sayı olarak ayarlanırsa yolcu indirim alır.
plans[].per_km_pricing[].interval Negatif olmayan tamsayı Zorunlu

Segmentin rate, segmentin end negatif olmayan bir tam sayıya ayarlanmadığı sürece süresiz olarak yeniden uygulanan kilometre aralığı.

rate, her interval başlangıcında bir kez daha uygulanır ve mesafenin yuvarlanması dikkate alınmaz.

Segmentin end değeri negatif olmayan herhangi bir tam sayıya ayarlanırsa segmentin rate değeri, segmentin end değerine kadar (bu değer dahil değil) yeniden uygulanır.

Bu alan 0 olarak ayarlanırsa rate, segmentin start tarihinde tam olarak bir kez tahsil edilir.

plans[].per_km_pricing[].end Negatif olmayan tamsayı İsteğe bağlı

Segment için rate simgesinin artık uygulanmadığı kilometre sayısı. Bu alan, segmentin aralığını sonlandıran hariç tutulan değere ayarlanır. Örneğin, end değeri 40 olarak ayarlanırsa rate artık 40 kilometre mesafede geçerli olmaz.

Bu alan ayarlanmamışsa veya boşsa segment için rate, yolculuk sona erene kadar ve ardından gelen ek segmentlerle birlikte ücretlendirilir.

plans[].per_min_pricing Dizi Koşula bağlı olarak gerekli

Fiyat, geçen süreye bağlı olarak değişiyorsa ve dakika cinsinden gösteriliyorsa bu alan zorunludur.

Her nesnenin belirli bir zaman dilimini tanımladığı bir nesne dizisi. Her segmentin start değeri, bir sonraki segmentin start değerinden küçük veya ona eşit olmalıdır.

Belirli bir planın toplam fiyatını belirlemek için söz konusu planın plans[].price değerini, plans[].per_km_pricing ve plans[].per_min_pricing içindeki segmentlerin tahakkuk eden fiyatlarına ekleyin.

Bu alan ayarlanmamışsa zamana dayalı değişken fiyatlar yoktur ve bu nedenle toplam fiyata dahil edilmez.

plans[].per_min_pricing[].start Kayan Zorunlu Segment ücretinin alınmaya başlandığı dakika sayısı. Bu alan, segmentin aralığını başlatan kapsayıcı değer olarak ayarlanır. Bu nedenle, belirlenen dakika sayısı geçtikten sonra rate bir kez ücretlendirilir.
plans[].per_min_pricing[].rate Kayan Zorunlu Her bir interval için alınan ücret. Ücret, segmentin start dahil olmak üzere başlangıcından itibaren geçerlidir. Bu alan negatif bir sayı olarak ayarlanırsa yolcu indirim alır.
plans[].per_min_pricing[].interval Negatif olmayan tamsayı Zorunlu

Segmentin rate, segmentin end negatif olmayan bir tam sayıya ayarlanmadığı sürece süresiz olarak yeniden uygulanan aralık (dakika cinsinden).

rate, her interval başlangıcında bir kez daha uygulanır ve seyahat süresinin yuvarlanması dikkate alınmaz.

Segmentin end değeri negatif olmayan herhangi bir tam sayıya ayarlanırsa segmentin rate değeri, segmentin end değerine kadar (bu değer dahil değil) yeniden uygulanır.

Bu alan 0 olarak ayarlanırsa rate, segmentin start tarihinde tam olarak bir kez tahsil edilir.

plans[].per_min_pricing[].end Negatif olmayan tamsayı İsteğe bağlı

Segment için rate simgesinin artık uygulanmadığı dakika sayısı. Bu alan, segmentin aralığını sonlandıran hariç tutulan değere ayarlanır. Örneğin, end, 20 olarak ayarlanırsa rate, 20 dakika sonra geçerli olmaz.

Bu alan ayarlanmamışsa veya boşsa segmentin rate, yolculuk bitene kadar ve ardından gelen ek segmentlere ek olarak ücretlendirilir.

system_pricing_plans.json için örnekler

Bu bölümde bilgilendirici system_pricing_plans.json kod örnekleri verilmiştir. Her örneğin ilgili ayrıntıları ve sonuçları da sağlanır.

system_pricing_plans.json için 1. örnek

Aşağıdaki fiyat planı kodu örneğinde, aşağıdaki aralıklar için yolculuk süresine göre ücretler gösterilmektedir:

  • [0,1): 2 ABD doları
    • Yolculuk bir dakikadan kısa sürerse kullanıcı 2 ABD doları öder.
    • Örnek: 59 saniyelik gezi
  • [1,2): 3 TL
    • Yolculuk bir dakikadan uzun veya bir dakikaya eşit ancak iki dakikadan kısaysa kullanıcı 2 ABD doları + 1 ABD doları = 3 ABD doları öder.
    • Örnekler: 1 dakikalık yolculuk, 1 dakika 45 saniyelik yolculuk
  • x sayısı 2'ye eşit veya 2'den büyük olduğunda x dakika: 3 TL + (($2 + $1) * (x - 2 + 1)) TL
    • Yolculuk iki dakikadan uzun veya iki dakikaya eşitse kullanıcı, yolculuğun iki dakikadan kısa süren kısmı için 3 ABD doları ve iki dakikadan sonraki her dakika için (per_min_pricing listesinin ilk girişinden devam eden 1 ABD doları + per_min_pricing listesinin ikinci girişi olan 2 ABD doları) öder.
    • Örnekler:
      • 2 dakikalık yolculuğun maliyeti 3 TL + (2 TL + 1 TL) = 6 TL
      • 2 dakika 30 saniyelik yolculuğun maliyeti 3 TL + (2 TL + 1 TL) = 6 TL
      • 3 dakikalık yolculuğun maliyeti: 3 TL + ((2 TL + 1 TL) * 2) = 9 TL
      • 10 dakikalık yolculuğun maliyeti 3 TL + (($2 + $1) * 9) = 30 TL
{
  "plans": {
    "plan_id": "plan1",
    "currency": "USD",
    "price": 2,
    "per_min_pricing": [
      {
          "interval": 1,
          "rate": 1,
          "start": 1
      },
      {
          "interval": 1,
          "rate": 2,
          "start": 2
      }
    ],
  }
}

system_pricing_plans.json için 2. örnek

Bu örnekte, hem dakika hem de kilometre üzerinden ücretlendirilen bir fiyat planı için kod örneği gösterilmektedir:

  • Daha net bir ifadeyle, son kullanıcıdan kilometre başına 0,25 Kanada doları ve dakika başına 0,50 Kanada doları ücret alınır.
  • Bu iki oran aynı anda gerçekleşir ve birbirine bağlı değildir.
  • Bu nedenle, 10 dakika süren bir kilometrelik yolculuğun maliyeti 9 Kanada dolarıdır. Maliyetin dökümü şu şekildedir:
    • 3 ABD doları (taban fiyat)
    • 0, 25 ABD doları * 2.Yolculuğun başında ve 1 km işaretinde olmak üzere iki kez ücret alınır.
    • Her dakikanın başında bir kez olmak üzere 0,5 ABD doları * 11 = 5,5 ABD doları tutarında ödeme alınır. Ücretlendirme 0 saniyede başlar ve son aralık 10 dakika olarak ücretlendirilir.
{
  "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
    }]
  }
}

Koşullu olarak zorunlu: geofencing_zones.json (Yerleşik ve yerleşik olmayan sistem)

Gerekirse GBFS spesifikasyonuna bakın.

Bu feed, bağımsız araçlar için coğrafi sınırlama verilerini tanımlar. Coğrafi sınırlama verileri, araçların yolculuğa başlamasına ve yolculuğu bitirmesine izin verilen yerleri belirten coğrafi sınırların yanı sıra araçların gidebileceği hızı içerir. Bu hız, aracın maksimum hızı veya aracın bulunduğu yolun hız sınırı (hangisi daha düşükse) olur. Sürücüler yerel yasalara ve yönetmeliklere uymalıdır.

Bu verileri, bir kullanıcı belirli bir rotayı aradığında yolculuğun sonu belirli coğrafi sınırlardan dışarıda kalıyorsa mikromobilite sonucunun filtrelenmesi için kullanırız. Coğrafi sınırlar sağlanmazsa Google, hizmetin sınır kısıtlaması yokmuş gibi davranır.

Alan adı Tür Gereksinim Açıklama
geofencing_zones Nesne Zorunlu IETF RFC 7946 tarafından tanımlanan FeatureCollection nesnesi, features adlı bir alanı olan nesnedir. features değerinin bir JSON dizisi olması gerekir. JSON dizisinin her öğesi bir Feature nesnesidir.

Coğrafi sınırlı alanların her biri, bunlarla ilişkili kurallar ve özellikler ile FeatureCollection tanımları, geofencing_zones.json feed tanımlarının bir parçası olarak burada belirtilir.

geofencing_zones.type Dize Zorunlu IETF RFC 7946'da açıklandığı şekilde FeatureCollection olarak ayarlayın.
geofencing_zones.features Dizi Zorunlu JSON dizisindeki her öğenin bir Feature nesnesi olduğu bir JSON dizisi.
geofencing_zones.features[].type Dize Zorunlu IETF RFC 7946'da açıklandığı şekilde Feature olarak ayarlayın.
geofencing_zones.features[].geometry GeoJSON Multipolygon Zorunlu Yolculukların başlayamayacağı, sonlanamayacağı, geçemeyeceği ve diğer kısıtlamaları açıklayan bir GeoJSON Multipolygon. Noktaların saat yönünde düzenlenmesi, çokgenin çevrelediği alanı tanımlarken saat yönünün tersine düzenlenmesi, çokgenin dışındaki alanı tanımlar. Bu konu hakkında daha fazla bilgi için sağ el kuralına bakın.
geofencing_zones.features[].properties Nesne Zorunlu Seyahat ödeneklerini ve sınırlamalarını tanımlayan bir nesne.
geofencing_zones.features[].properties.rules Dizi İsteğe bağlı Her nesnenin yalnızca bir kural tanımladığı bir nesne dizisi. İki veya daha fazla kural çakışırsa, çarpışırsa ya da başka bir şekilde birbiriyle çelişirse JSON dosyasının sırasındaki en erken tanımlanan kural öncelikli olur.
geofencing_zones.features[].properties.rules[].vehicle_type_id Dizi İsteğe bağlı Her öğenin bir vehicle_type_id olduğu araç türü kimlikleri dizisi. Bu kimlikler için kısıtlamalar uygulanmalıdır. vehicle_type_id belirtilmezse kısıtlamalar tüm araç türleri için geçerli olur.
geofencing_zones.features[].properties.rules[].ride_allowed Boole Zorunlu Bağlantı noktası olmayan bisiklet yolculuğunun bölgede başlayıp bitebileceği aşağıdaki gibi belirlenir:
  • Bağlantısız bisiklet sürüşü bölgede başlayıp bitebiliyorsa true olarak ayarlayın.
  • İstasyon dışı bisiklet sürüşü bölgede başlayıp sona eremiyorsa false olarak ayarlayın.

Aşağıda geofencing_zones.json için bir örnek verilmiştir:

"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]
      ]]]
    }
  }]
}

Zorunlu: station_information.json (Docked system)

Gerekirse GBFS spesifikasyonuna bakın.

Bu feed, herkese açık bisiklet paylaşım istasyonlarıyla ilgili genel bilgileri tanımlar.

Alan adı Tür Gereksinim Açıklama
stations Dizi Zorunlu Her nesnenin yalnızca bir istasyonu tanımladığı bir nesne dizisi.
stations[].station_id Dize Zorunlu İstasyonun tanımlayıcısı.
stations[].name Dize Zorunlu İstasyonun bulunduğu şehrin yerel dilindeki istasyonun herkese açık adı. name, varsa istasyondaki tabelalarda kullanılanlarla aynı olmalı veya ara sokak ya da yerel bir simge kullanılarak istasyon konumunu yansıtmalıdır. Tabelalarda açıkça kullanılmadığı sürece "St." gibi kısaltmalar kullanmayın. name, yer adlarının büyük harf kullanımıyla ilgili yerel kurallara uygun olarak karışık harf düzeninde olmalı ve tamamen büyük harflerle yazılmamalıdır.
stations[].lat Enlem Zorunlu İstasyonun ondalık derece biçiminde WGS 84 enlemi.
stations[].lon Boylam Zorunlu İstasyonun ondalık derece biçimindeki WGS 84 boylamı.
stations[].capacity Negatif olmayan tamsayı İsteğe bağlı İstisyonda kurulu olan, hem kullanılabilir hem de kullanılamayan toplam yerleştirme noktası sayısını gösteren negatif olmayan bir tam sayı.
stations[].rental_uris Nesne Zorunlu

Android, iOS ve web için kiralama URI'lerini ilgili alanlarda içeren bir JSON nesnesi.

Bu URI'ler belirtilirse sağlayıcı ilk katıldığında ayarlanan varsayılan derin bağlantıları geçersiz kılar.

stations[].rental_uris.android URI Koşula bağlı olarak gerekli

Android derin bağlantılarını desteklemek için android.intent.action.VIEW Android niyetiyle bir Android uygulamasına iletilebilen bir URI. Kullanıcının sağlayıcı uygulamasını yüklememesi durumunda görüntüleme uygulamasının, kullanıcının uygulama mağazasına yönlendirilmesini manuel olarak yönetmesi gerekmemesi için sağlanan rental_urisAndroid App Links olmalıdır.

Bu URI, birden fazla istasyonla ilgili bilgileri içeren genel bir kiralama sayfası değil, istasyona özel bir derin bağlantı olmalıdır. Derin bağlantı, kullanıcıyı herhangi bir istem, ara sayfa veya giriş işlemi olmadan doğrudan istasyona yönlendirmelidir. Kullanıcıların uygulamayı hiç açmamış olsalar bile istasyonu görebildiğinden emin olun.

İş ortağının ilgili istasyonu tanımlamak için başka yöntemleri olduğu sürece, istasyon için URI'lerin station_id içermesi zorunlu değildir. Örneğin, kiralama uygulaması, istasyonu benzersiz şekilde tanımlamak için URI'deki diğer tanımlayıcıları kullanabilir.

İş ortağının Android kiralama uygulaması varsa bu alan zorunludur.

Android uygulama bağlantıları örneği:

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

stations[].rental_uris.ios URI Koşula bağlı olarak gerekli

İstasyonun kiralama uygulamasını iOS'te başlatmak için kullanılabilecek bir URI. Bu konu hakkında daha fazla bilgi için Apple'ın iOS özel URL şemaları hakkındaki makalesine bakın. rental_uris, iOS Evrensel Bağlantıları olmalıdır. Böylece, kullanıcının sağlayıcı uygulamasını yüklememesi durumunda görüntüleme uygulamasının, kullanıcının uygulama mağazasına yönlendirilmesini manuel olarak yönetmesi gerekmez.

Bu URI, birden fazla istasyonla ilgili bilgileri içeren genel bir kiralama sayfası değil, istasyona özel bir derin bağlantı olmalıdır. Derin bağlantı, kullanıcıyı herhangi bir istem, ara sayfa veya giriş işlemi olmadan doğrudan istasyona yönlendirmelidir. Kullanıcıların uygulamayı hiç açmamış olsalar bile istasyonu görebildiğinden emin olun.

URI'lerin istasyon için station_id içermesi zorunlu değildir. Kiralama uygulaması, istasyonu benzersiz şekilde tanımlamak için URI'deki diğer tanımlayıcıları kullanabilir.

İş ortağının iOS kiralama uygulaması varsa bu alan zorunludur.

iOS Geçiş Bağlantısı örneği:

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

stations[].rental_uris.web URL İsteğe bağlı

Bu istasyonda araç kiralama hakkında daha fazla bilgi göstermek için web tarayıcısı tarafından kullanılabilecek bir URL.

Bu URL, birden fazla istasyonla ilgili bilgileri içeren genel bir kiralama sayfası değil, istasyona özel bir derin bağlantı olmalıdır. Derin bağlantı, kullanıcıyı herhangi bir istem, ara sayfa veya giriş işlemi olmadan doğrudan istasyona yönlendirmelidir. Uygulamayı hiç açmamış olsalar bile kullanıcıların istasyonu görebildiğinden emin olun.

URL'lerin istasyon için station_id dizesini içermesi veya Android ya da iOS için kiralama URL'lerinin anlamsal kurallarına uyması zorunlu değildir. Kiralama uygulaması, URL'de istasyonu benzersiz şekilde tanımlayan başka tanımlayıcılar kullanabilir.

Bu alan ayarlanmamışsa web tarayıcısında derin bağlantıların desteklenmediği anlamına gelir.

Örnek değer:

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

Aşağıda station_information.json için bir örnek verilmiştir:

"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"
    }
  },
]

Zorunlu: station_status.json (Docked sistemi)

Gerekirse GBFS spesifikasyonuna bakın.

Bu feed, herkese açık bisiklet paylaşımı istasyonlarının güncel durumunu tanımlar.

Alan adı Tür Gereksinim Açıklama
stations Dizi Zorunlu Her nesnenin yalnızca bir istasyonu tanımladığı bir nesne dizisi.
stations[].station_id Dize Zorunlu İstasyonun tanımlayıcısı.
stations[].num_bikes_available Negatif olmayan tamsayı Zorunlu

İstisyonda fiziksel olarak bulunan ve kiralama için sunulabilecek işlevsel bisikletlerin sayısını gösteren negatif olmayan bir tam sayı.

İstasyonun şu anda bisiklet kiralayıp kiralamadığını belirlemek için istasyonun is_renting alanını inceleyip doğru Boole değerini bulmanız gerekir.

stations[].vehicle_types_available Dizi İsteğe bağlı

Bir istasyonda bulunan her bir araç türüne göre sınıflandırılmış, toplam araç sayısını tanımlayan bir nesne dizisi. Her nesne, ilişkili araç türü için toplam araç sayısını modeller. Bu nesnelerin her birinden gelen toplam araç sayısı, num_bikes_available alanında belirtilen değerle eşleşmelidir.

stations[].vehicle_types_available[].vehicle_type_id Kimlik Zorunlu

vehicle_types.json dosyasında belirtildiği gibi istasyonda bulunan her araç türünün vehicle_type_id.

stations[].vehicle_types_available[].count Negatif olmayan tamsayı Zorunlu

vehicle_types.json dosyasında tanımlandığı şekilde, istasyonda ilgili vehicle_type_id için kullanılabilen toplam araç sayısı.

stations[].num_docks_available Negatif olmayan tamsayı Koşula bağlı olarak gerekli

İstasyonun sınırsız yerleştirme kapasitesi yoksa bu alan zorunludur. Örneğin, sanal istasyonların sınırsız yerleştirme kapasitesi vardır ve bu alan zorunlu değildir.

İstisyonda fiziksel olarak bulunan ve araç iadelerini kabul edebilen işlevsel doların toplam sayısını temsil eden negatif olmayan bir tam sayı.

İstasyonun şu anda bisiklet iadesi kabul edip etmediğini belirlemek için istasyonun is_returning alanını incelemeniz ve true Boole değerini bulmanız gerekir.

stations[].is_installed Boole Zorunlu

İstasyonun şu anda sokakta ve kurulu olup olmadığını belirten bir Boole değeri.

İstasyon caddeye kurulmuşsa true olarak ayarlayın.

İstasyon sokağa kurulmamışsa false olarak ayarlayın.

stations[].is_renting Boole Zorunlu

İstasyonun şu anda bisiklet kiralayıp kiralamadığını belirten bir Boole değeri.

İstasyon şu anda bisiklet kiralıyorsa true olarak ayarlayın. İstasyon boş olsa bile kiralama izni veriliyorsa is_renting, true olarak ayarlanır.

İstasyon şu anda bisiklet kiralamıyorsa false olarak ayarlayın.

stations[].is_returning Boole Zorunlu

İstasyonun şu anda bisiklet iadelerini kabul edip etmediğini belirten bir Boole değeri.

İstasyon şu anda bisiklet iadesi kabul ediyorsa true olarak ayarlayın. İstasyon dolu olsa bile, dolu olmasaydı iadeye izin verecekse is_returning, true olarak ayarlanır.

İstasyon şu anda bisiklet iadesi kabul etmiyorsa false olarak ayarlayın.

Aşağıda station_status.json örneği verilmiştir:

"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
        },
]