Her şeyden önce, biraz arka plan.
Bölgesel bir transit acentesinde çalışıyorum. Besleyici otobüs servisimiz hakkında "teşhis" yapıyoruz. Kullanıcılarımızın ne kadarının arabasını almak yerine tren istasyonuna gitmek için otobüse binebileceğini bilmek istiyoruz. Geçişte birkaç kez yapıldı, ancak şimdi ana veri kaynağımız olarak gtfs kullanıyoruz, bu yüzden metodolojimizi yeniden düşünmeliyiz.
Trenin "beslenmesi" olarak değerlendirilebilmesi için, bir otobüs güzergahının bir tren istasyonundan (kırmızı tamponlar) belirli bir mesafede durması gerekir. Ayrıca, tren servisi ile eşzamanlılık çok önemlidir, çünkü eğer otobüsünüz tren istasyonundan trenden yarım saat önce gelirse, bekleme süresi çok uzundur ve sabahları 20 dakika daha uyumak ve arabanızı almak isteyeceksiniz.
Diyelim ki 12. hatta A hattını (Mavi) alırsınız. 13 numaralı durakta otobüsten inersiniz. Otobüs, trenden 5 dakika önce # 1 numaralı Tren İstasyonu'na gitmek için durak olan 13 numaralı duraktan gelir. Çok iyi. Bu, otobüs güzergahını 1'den 13'e kadar olan bir durakta kullanan herkesin trenden 5 dakika önce geleceği anlamına gelir.
Ardından, çok yoğun nüfuslu bir bölgeden geçen çok sayıda okul ve geçitten geçen tren, hızını çok düşürmek zorunda kalıyor. Bu arada, otobüs 14 ila 17 numaralı duraklarda yolcuları alır ve bu trenden 10 dakika önce # 2 numaralı Tren İstasyonu'na gelir. Bu nedenle 14 ila 17 duraklarında otobüse binen yolcu, tren istasyonuna geldiğinde 10 dakika bekleme süresine sahip olacaktı. Bu otobüs hattı boyunca, 1-13 duraklarında otobüse binen yolcunun, 14-17 duraklarında otobüse binenlerin 10 dakika bekleme süresi olduğu 5 dakikalık bekleme süresi vardır.
Parkurun diğer tarafında bulunan B Hattı, 1 numaralı Tren İstasyonu'nun yanından geçmektedir, ancak durakları 1 numaralı tren istasyonunu "beslemek" olarak düşünülemeyecek kadar uzaktır. Tren istasyonundan # 2 trenden 7 dakika önce gelir (sabah acele saatinde her tren için doest; çok iyi senkronize edilir). Yani B hattı boyunca, otobüsü 1'den 59'a kadar her yere götüren yolcuların 7 dakika bekleme süresi olacaktı.
Şimdi sorum. LineA.13 ve LineA.17 duraklarının trenimi beslediğini belirledikten sonra (mekansal olarak, PostGIS'de yapıldı) ve # 13'ten önce otobüse binerken bekleme süresi 5 dakika, ancak 10 dakikalık bir bekleme süresi, önlerindeki tüm durağa bekleme süresini nasıl atayabilirim?
Postgres / PostGIS'de (pl / pgsql veya pl / python) yapmak istiyorum, ancak saf python (OS veya arcpy) da kullanabilirim.
Sanırım geriye doğru dönebilirim. Bu yüzden, uygun bir durak bulduğumda (burada LineA.17), 16, sonra 15'i durdurmak için aynı bekleme süresini atayın: ölçütlerime uyan başka bir durak bulana kadar (LineA.13) ve geri kalanını durakları, 13 ile aynı bekleme süresi.
Nasıl olsa böyle bir döngü oluşturmak için hiçbir fikrim yok. Ben SQL'de yapabileceğimi sanmıyorum, bu yüzden PostgreSQL'de yordamsal bir dil kullanmak zorunda kalacaktım.
Her besleyici durağı arasındaki rotayı bulmak için pgRouting'i kullanma konusunda bir fikrim vardı, böylece A Hattı ikiye bölünecek (1'den 13'e ve sonra 13'den 17'ye kadar). Bu daha kolay olur mu?
Bir sonraki adım, bekleme süresi olan tüm hatlardan sürüş süresini hesaplamak için pgRouting'i kullanmak (LineA.18 ve üzeri için özür dileriz!) Otobüste dakika daha mı?)
Herhangi bir fikir? Normalde şimdiye kadar yaptığım çabayı göstermek için uzun bir devam eden çalışma betiği gönderiyorum, ancak takıldım!