Trước hết, một chút nền tảng.
Tôi làm việc cho một cơ quan vận chuyển khu vực. Chúng tôi đang thực hiện "chẩn đoán" về dịch vụ xe buýt trung chuyển của mình. Chúng tôi muốn biết tỷ lệ người dùng của chúng tôi có thể đi xe buýt đến ga xe lửa thay vì đi xe của họ. Nó đã được thực hiện nhiều lần trong thời gian qua, nhưng chúng tôi hiện đang sử dụng gtfs làm nguồn dữ liệu chính của chúng tôi vì vậy chúng tôi phải suy nghĩ lại về phương pháp của chúng tôi.
Để được coi là "cho ăn" tàu, một tuyến xe buýt phải có điểm dừng trong một khoảng cách nhất định từ ga tàu (bộ đệm màu đỏ). Ngoài ra, tính đồng bộ với dịch vụ xe lửa là rất quan trọng vì nếu xe buýt của bạn đến ga tàu nửa giờ trước tàu, thời gian chờ đợi quá lâu và bạn sẽ muốn ngủ thêm 20 phút vào buổi sáng và lấy xe.
Giả sử bạn đi tuyến A (màu xanh) tại điểm dừng 12. Bạn bước xuống xe buýt tại điểm dừng 13. Xe buýt đến điểm dừng 13, đó là điểm dừng để đi đến Ga tàu số 1 5 phút trước khi tàu. Điều đó rất tốt. Điều đó có nghĩa là tất cả mọi người đi tuyến xe buýt đó tại điểm dừng từ 1 đến 13 bao gồm sẽ đến 5 phút trước chuyến tàu đó.
Sau đó, đoàn tàu, đi qua một khu vực đông dân cư với rất nhiều trường học và ngã tư buộc phải giảm tốc độ rất nhiều. Trong khi đó, xe buýt đón hành khách tại điểm dừng 14 đến 17 và đến Ga tàu số 2 10 phút trước chuyến tàu đó. Vì vậy, hành khách đi xe buýt tại các điểm dừng 14 đến 17 tất cả sẽ có thời gian chờ là 10 phút sau khi đến ga tàu. Vì vậy, dọc theo tuyến xe buýt đó, hành khách đi xe buýt tại điểm dừng 1 đến 13 có thời gian chờ là 5 phút khi những người đi xe buýt tại điểm dừng 14 đến 17 có thời gian chờ là 10 phút.
Tuyến B, ở phía bên kia của đường ray, đi qua gần Ga tàu số 1, nhưng điểm dừng của nó quá xa để xem xét "cho ăn" Ga tàu số 1. Nó đến ga tàu số 2 7 phút trước khi đi tàu (hãy làm điều đó cho mọi chuyến tàu trong giờ cao điểm buổi sáng; nó được đồng bộ hóa rất tốt). Vì vậy, hành khách dọc theo tuyến B, đi xe buýt ở mọi nơi từ điểm dừng 1 đến 59 sẽ có thời gian chờ là 7 phút.
Bây giờ, câu hỏi của tôi. Khi tôi đã xác định rằng các điểm dừng LineA.13 và LineA.17 đang cho tàu của tôi (nó đã được thực hiện trong không gian, trong PostGIS) và thời gian chờ đợi khi đi xe buýt tại điểm dừng trước # 13 là 5 phút nhưng những lần sau thời gian chờ là 10 phút, làm thế nào tôi có thể chỉ định thời gian chờ cho tất cả các điểm dừng trước chúng?
Tôi muốn làm điều đó trong Postgres / PostGIS (pl / pssql hoặc pl / python), nhưng tôi cũng có thể sử dụng python thuần (OS hoặc arcpy).
Tôi có thể, tôi nghĩ, lặp lại lạc hậu. Vì vậy, một khi tôi tìm thấy một điểm dừng phù hợp (ở đây LineA.17), hãy chỉ định thời gian chờ tương tự để dừng 16, sau đó 15 ... cho đến khi tôi tìm thấy một điểm dừng khác phù hợp với tiêu chí của mình (LineA.13) và sau đó chỉ định phần còn lại của các điểm dừng, cùng thời gian chờ là 13.
Tôi không có ý tưởng làm thế nào để tạo ra một vòng lặp như vậy mặc dù. Tôi không nghĩ rằng tôi có thể làm điều đó bằng SQL vì vậy tôi phải sử dụng ngôn ngữ thủ tục trong PostgreQuery.
Tôi đã có ý tưởng sử dụng pgRouting để tìm tuyến giữa mỗi điểm dừng trung chuyển theo cách đó, Dòng A sẽ được chia làm hai (dừng 1 đến 13 và sau đó 13 đến 17). Điều đó sẽ dễ dàng hơn?
Bước tiếp theo, sẽ là sử dụng pgRouting để tính thời gian lái xe từ tất cả các điểm dừng có thời gian chờ (xin lỗi với LineA.18 trở lên!) Và so sánh với lịch trình của xe buýt để tính toán khả năng cạnh tranh (phải mất 5 Thêm phút nữa trên xe buýt mà trong xe?)
Có ý kiến gì không? Tôi thường đăng một kịch bản tiến hành dài để thể hiện nỗ lực tôi đã làm cho đến nay, nhưng tôi bị mắc kẹt!