digitransit-ui icon indicating copy to clipboard operation
digitransit-ui copied to clipboard

[regression] Time(zone?) problems in digitransit-ui

Open kalon33 opened this issue 9 years ago • 51 comments

Since approximatively two weeks, I have timing problems in digitransit-ui using master. Indeed, Before when I choosed to leave (or arrive) at 12:00 I had solutions arriving at that time. Now, they are proposed as if I choosed "14:00" as the time, and indeed, if I set time as "10:00", I get solutions for 12:00.

I used to comment timezone arguments in config file and that used to work, but it doesn't seem to work anymore.

Could you fix this?

kalon33 avatar Oct 19 '16 14:10 kalon33

Still occurs with latest master to date.

kalon33 avatar Nov 02 '16 22:11 kalon33

@hannesj @samuliheljo do you have an idea on this problem? I now get only one hour drift, since DST is off.

kalon33 avatar Nov 08 '16 09:11 kalon33

@kalon33 Do you have the timezoneData in the format specified in https://github.com/HSLdevcom/digitransit-ui/blob/master/app/config.default.js#L60-L62

The format definition is the moment-tz packed format (http://momentjs.com/timezone/docs/#/data-utilities/)

hannesj avatar Nov 08 '16 09:11 hannesj

@hannesj I just did it using data from https://github.com/moment/moment-timezone/blob/develop/data/packed/latest.json#L322 (previously I commented out timezoneData), but unfortunately that didn't change anything.

kalon33 avatar Nov 08 '16 19:11 kalon33

@hannesj any other idea on this? I still have this problem, and don't know why. "Near you" departures are working OK, without that drift.

kalon33 avatar Dec 07 '16 15:12 kalon33

I did a full diff between my branch and upstream, and I see nothing special.

kalon33 avatar Feb 10 '17 07:02 kalon33

@samuliheljo As you saw both my OTP and Digitransit configs, do you have an idea on this?

kalon33 avatar Feb 10 '17 09:02 kalon33

Sorry, not at the moment. Unfortunately, I don't currently have that much time allocated for digitransit development and my time is mostly spent in other matters.

samuliheljo avatar Feb 10 '17 10:02 samuliheljo

@samuliheljo I understand. Thanks anyway.

I put my diffs with upstream here, if of any use:

https://github.com/HSLdevcom/OpenTripPlanner/compare/master...kalon33:1.x.x_hsl_enhanced_paris

https://github.com/HSLdevcom/digitransit-ui/compare/master...kalon33:digitransit-ui-paris

@hannesj is that useful to find this problem origin?

kalon33 avatar Feb 12 '17 09:02 kalon33

@kalon33 You can check the HTTP requests and responses to see where it goes wrong. Sounds like somewhere a time is given as local time but interpreted as UTC or vice versa.

tuukka avatar Feb 12 '17 10:02 tuukka

@tuukka what I don't understand is that this thing happened all of a sudden and I have another instance with nearly identical OTP and digitransit-ui confs and that it works properly. Is there a particular place where this thing would be set?

Using firefox console, here is what I got, requesting a trip at 11:25 today using this query:

{"query":"query Routes($preferred_0:InputPreferred!) {viewer {...F7}} fragment F0 on BikeRentalStation {lat,lon,stationId,id} fragment F1 on Leg {mode,rentedBike,legGeometry {points},transitLeg,route {shortName,agency {name,id},id},from {lat,lon,name,vertexType,bikeRentalStation {id,...F0},stop {gtfsId,code,platformCode,id}},to {lat,lon,name,vertexType,bikeRentalStation {id,...F0},stop {gtfsId,code,platformCode,id}},intermediateStops {gtfsId,lat,lon,name,code,platformCode,id}} fragment F2 on Leg {agency {name,url,fareUrl,id}} fragment F3 on Itinerary {walkDistance,duration,startTime,endTime,fares {type,currency,cents},legs {mode,from {lat,lon,name,vertexType,bikeRentalStation {id,...F0},stop {gtfsId,code,platformCode,id}},to {lat,lon,name,vertexType,bikeRentalStation {id,...F0},stop {gtfsId,code,platformCode,id}},legGeometry {length,points},intermediateStops {gtfsId,lat,lon,name,code,platformCode,id},realTime,transitLeg,rentedBike,startTime,endTime,mode,distance,duration,route {shortName,gtfsId,id},trip {gtfsId,tripHeadsign,pattern {code,id},id},...F2}} fragment F4 on Itinerary {walkDistance,startTime,endTime,legs {realTime,transitLeg,startTime,endTime,mode,distance,duration,rentedBike,route {mode,shortName,agency {name,id},id},from {name}}} fragment F5 on Itinerary {endTime,startTime,...F4} fragment F6 on Plan {date} fragment F7 on QueryType {_plan2tX3Eg:plan(fromPlace:\"3 Rue Blaise Pascal, Chilly-Mazarin::48.705208299999995,2.2985851\",toPlace:\"Institut Curie, Paris, France::48.842645,2.34352\",numItineraries:5,date:\"2017-02-12\",time:\"11:25:39\",walkReluctance:2,walkBoardCost:600,minTransferTime:180,walkSpeed:1.2,maxWalkDistance:10000,wheelchair:false,disableRemainingWeightHeuristic:false,arriveBy:false,preferred:$preferred_0) {itineraries {legs {transitLeg,legGeometry {points},...F1},...F3,...F5},...F6}}","variables":{"preferred_0":{"agencies":""}}}

I get this reply:

{"data":{"viewer":{"_plan2tX3Eg":{"itineraries":[{"legs":[{"transitLeg":false,"legGeometry":{"points":"sughH__MXFBHjCZF??x@@pBBnCCJH?FBDFBJLL@MDBLFP@n@Fp@DlBN\Ch@@ZHXL","length":25},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.705208299999995,"lon":2.2985851,"name":"3 Rue Blaise Pascal, Chilly-Mazarin","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"to":{"lat":48.702076,"lon":2.296614,"name":"Chemin Blanc","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:9952","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo5OTUy"}},"intermediateStops":[],"realTime":false,"startTime":1486898890000,"endTime":1486899299000,"distance":465.62399999999997,"duration":409.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"}bghHyp_Myk@aEgh@cFmoS{gD","length":4},"mode":"BUS","rentedBike":false,"route":{"shortName":"DM151","agency":{"name":"TRANSPORTS DANIEL MEYER","id":"QWdlbmN5OjQwNw=="},"id":"Um91dGU6MzowNTUxNTUwMDE6RE0xNTE=","gtfsId":"3:055155001:DM151","mode":"BUS"},"from":{"lat":48.702076,"lon":2.296614,"name":"Chemin Blanc","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:9952","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo5OTUy"}},"to":{"lat":48.82087,"lon":2.325745,"name":"Porte d'Orléans","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:413","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo0MTM="}},"intermediateStops":[{"gtfsId":"3:StopPoint:46:8880","lat":48.70924,"lon":2.297587,"name":"Le Petit Chilly","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo4ODgw"},{"gtfsId":"3:StopPoint:46:8882","lat":48.715847,"lon":2.298723,"name":"Les Champarts","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo4ODgy"}],"realTime":false,"startTime":1486899300000,"endTime":1486900320000,"distance":13383.951592857922,"duration":1020.0,"trip":{"gtfsId":"3:81263834-1326573","tripHeadsign":"Paris - Porte d'Orléans","pattern":{"code":"3:055155001:DM151:1:03","id":"UGF0dGVybjozOjA1NTE1NTAwMTpETTE1MToxOjAz"},"id":"VHJpcDozOjgxMjYzODM0LTEzMjY1NzM="},"agency":{"name":"TRANSPORTS DANIEL MEYER","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQwNw=="}},{"transitLeg":false,"legGeometry":{"points":"ki~hHyfeMe@B?DO@K@i@F??W@AFOZ_@DQ@BJBLALCLEHEDG@G?GCEGOXEJQCoBY","length":26},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.82087,"lon":2.325745,"name":"Porte d'Orléans","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:413","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo0MTM="}},"to":{"lat":48.82282,"lon":2.325091,"name":"Porte d'Orléans (Général Leclerc)","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59624","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYyNA=="}},"intermediateStops":[],"realTime":false,"startTime":1486900320000,"endTime":1486900539000,"distance":259.829,"duration":219.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"su~hHybeMw_@}IyXkU","length":3},"mode":"SUBWAY","rentedBike":false,"route":{"shortName":"4","agency":{"name":"METRO","id":"QWdlbmN5OjQzOQ=="},"id":"Um91dGU6MzoxMDAxMTAwMDQ6NA==","gtfsId":"3:100110004:4","mode":"SUBWAY"},"from":{"lat":48.82282,"lon":2.325091,"name":"Porte d'Orléans (Général Leclerc)","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59624","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYyNA=="}},"to":{"lat":48.832194,"lon":2.330425,"name":"Mouton-Duvernet","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59260","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTI2MA=="}},"intermediateStops":[{"gtfsId":"3:StopPoint:59631","lat":48.828069,"lon":2.326846,"name":"Alésia","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYzMQ=="}],"realTime":false,"startTime":1486900860000,"endTime":1486900980000,"distance":1125.8597226853258,"duration":120.0,"trip":{"gtfsId":"3:79549898-186566","tripHeadsign":"Porte de Clignancourt","pattern":{"code":"3:100110004:4:1:03","id":"UGF0dGVybjozOjEwMDExMDAwNDo0OjE6MDM="},"id":"VHJpcDozOjc5NTQ5ODk4LTE4NjU2Ng=="},"agency":{"name":"METRO","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQzOQ=="}},{"transitLeg":false,"legGeometry":{"points":"upiHodfM??Ja@IIIE","length":5},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.832194,"lon":2.330425,"name":"Mouton-Duvernet","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59260","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTI2MA=="}},"to":{"lat":48.832257,"lon":2.330902,"name":"DENFERT-ROCHEREAU - DAGUERRE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764637","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM3"}},"intermediateStops":[],"realTime":false,"startTime":1486900980000,"endTime":1486901005000,"distance":27.259999999999998,"duration":25.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"qpiHcgfM}NmLcN}MuKkG{OaG_ImD","length":6},"mode":"BUS","rentedBike":false,"route":{"shortName":"38","agency":{"name":"RATP","id":"QWdlbmN5OjQ0Mg=="},"id":"Um91dGU6MzoxMDAxMDAwMzg6Mzg=","gtfsId":"3:100100038:38","mode":"BUS"},"from":{"lat":48.832257,"lon":2.330902,"name":"DENFERT-ROCHEREAU - DAGUERRE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764637","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM3"}},"to":{"lat":48.843555,"lon":2.338948,"name":"AUGUSTE COMTE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764640","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjQw"}},"intermediateStops":[{"gtfsId":"3:StopPoint:59:3764628","lat":48.834801,"lon":2.333053,"name":"DENFERT-ROCHEREAU - ARAGO","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjI4"},{"gtfsId":"3:StopPoint:59:3764626","lat":48.837228,"lon":2.335449,"name":"HOPITAL SAINT-VINCENT DE PAUL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjI2"},{"gtfsId":"3:StopPoint:59:3764638","lat":48.839259,"lon":2.336783,"name":"OBSERVATOIRE - PORT ROYAL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM4"},{"gtfsId":"3:StopPoint:59:3764639","lat":48.841955,"lon":2.338076,"name":"VAL DE GRACE","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM5"}],"realTime":false,"startTime":1486901400000,"endTime":1486901640000,"distance":1394.994210656525,"duration":240.0,"trip":{"gtfsId":"3:81477652-1392421","tripHeadsign":"Gare du Nord","pattern":{"code":"3:100100038:38:1:02","id":"UGF0dGVybjozOjEwMDEwMDAzODozODoxOjAy"},"id":"VHJpcDozOjgxNDc3NjUyLTEzOTI0MjE="},"agency":{"name":"RATP","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQ0Mg=="}},{"transitLeg":false,"legGeometry":{"points":"mwbiHgxgMGE_A_@F_@DYn@eGx@iEx@yEBs@HsB","length":10},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.843555,"lon":2.338948,"name":"AUGUSTE COMTE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764640","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjQw"}},"to":{"lat":48.842645,"lon":2.34352,"name":"Institut Curie, Paris, France","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"intermediateStops":[],"realTime":false,"startTime":1486901641000,"endTime":1486902014000,"distance":431.40200000000004,"duration":373.0,"trip":null,"agency":null}],"walkDistance":1184.3516666572623,"duration":3124,"startTime":1486898890000,"endTime":1486902014000,"fares":null},{"legs":[{"transitLeg":false,"legGeometry":{"points":"sughH__MXFBHjCZF??x@@pBBnCCJH?FBDFBJLL@MDBLFP@n@Fp@DlBN\Ch@@ZHXL","length":25},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.705208299999995,"lon":2.2985851,"name":"3 Rue Blaise Pascal, Chilly-Mazarin","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"to":{"lat":48.702076,"lon":2.296614,"name":"Chemin Blanc","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:9952","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo5OTUy"}},"intermediateStops":[],"realTime":false,"startTime":1486898830000,"endTime":1486899239000,"distance":465.62399999999997,"duration":409.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"}bghHyp_Myk@aEgh@cFmoS{gD","length":4},"mode":"BUS","rentedBike":false,"route":{"shortName":"DM151","agency":{"name":"TRANSPORTS DANIEL MEYER","id":"QWdlbmN5OjQwNw=="},"id":"Um91dGU6MzowNTUxNTUwMDE6RE0xNTE=","gtfsId":"3:055155001:DM151","mode":"BUS"},"from":{"lat":48.702076,"lon":2.296614,"name":"Chemin Blanc","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:9952","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo5OTUy"}},"to":{"lat":48.82087,"lon":2.325745,"name":"Porte d'Orléans","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:413","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo0MTM="}},"intermediateStops":[{"gtfsId":"3:StopPoint:46:8880","lat":48.70924,"lon":2.297587,"name":"Le Petit Chilly","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo4ODgw"},{"gtfsId":"3:StopPoint:46:8882","lat":48.715847,"lon":2.298723,"name":"Les Champarts","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo4ODgy"}],"realTime":false,"startTime":1486899240000,"endTime":1486900260000,"distance":13383.951592857922,"duration":1020.0,"trip":{"gtfsId":"3:81263832-1326571","tripHeadsign":"Paris - Porte d'Orléans","pattern":{"code":"3:055155001:DM151:1:03","id":"UGF0dGVybjozOjA1NTE1NTAwMTpETTE1MToxOjAz"},"id":"VHJpcDozOjgxMjYzODMyLTEzMjY1NzE="},"agency":{"name":"TRANSPORTS DANIEL MEYER","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQwNw=="}},{"transitLeg":false,"legGeometry":{"points":"ki~hHyfeMe@B?DO@K@i@F??W@AFOZ_@DQ@BJBLALCLEHEDG@G?GCEGOXEJQCoBY","length":26},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.82087,"lon":2.325745,"name":"Porte d'Orléans","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:413","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo0MTM="}},"to":{"lat":48.82282,"lon":2.325091,"name":"Porte d'Orléans (Général Leclerc)","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59624","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYyNA=="}},"intermediateStops":[],"realTime":false,"startTime":1486900260000,"endTime":1486900479000,"distance":259.829,"duration":219.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"su~hHybeMw_@}IyXkU","length":3},"mode":"SUBWAY","rentedBike":false,"route":{"shortName":"4","agency":{"name":"METRO","id":"QWdlbmN5OjQzOQ=="},"id":"Um91dGU6MzoxMDAxMTAwMDQ6NA==","gtfsId":"3:100110004:4","mode":"SUBWAY"},"from":{"lat":48.82282,"lon":2.325091,"name":"Porte d'Orléans (Général Leclerc)","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59624","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYyNA=="}},"to":{"lat":48.832194,"lon":2.330425,"name":"Mouton-Duvernet","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59260","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTI2MA=="}},"intermediateStops":[{"gtfsId":"3:StopPoint:59631","lat":48.828069,"lon":2.326846,"name":"Alésia","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYzMQ=="}],"realTime":false,"startTime":1486900920000,"endTime":1486901100000,"distance":1125.8597226853258,"duration":180.0,"trip":{"gtfsId":"3:79549876-186544","tripHeadsign":"Porte de Clignancourt","pattern":{"code":"3:100110004:4:1:03","id":"UGF0dGVybjozOjEwMDExMDAwNDo0OjE6MDM="},"id":"VHJpcDozOjc5NTQ5ODc2LTE4NjU0NA=="},"agency":{"name":"METRO","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQzOQ=="}},{"transitLeg":false,"legGeometry":{"points":"upiHodfM??Ja@IIIE","length":5},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.832194,"lon":2.330425,"name":"Mouton-Duvernet","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59260","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTI2MA=="}},"to":{"lat":48.832257,"lon":2.330902,"name":"DENFERT-ROCHEREAU - DAGUERRE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764637","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM3"}},"intermediateStops":[],"realTime":false,"startTime":1486901100000,"endTime":1486901125000,"distance":27.259999999999998,"duration":25.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"qpiHcgfM}NmLcN}MuKkG{OaG_ImD","length":6},"mode":"BUS","rentedBike":false,"route":{"shortName":"38","agency":{"name":"RATP","id":"QWdlbmN5OjQ0Mg=="},"id":"Um91dGU6MzoxMDAxMDAwMzg6Mzg=","gtfsId":"3:100100038:38","mode":"BUS"},"from":{"lat":48.832257,"lon":2.330902,"name":"DENFERT-ROCHEREAU - DAGUERRE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764637","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM3"}},"to":{"lat":48.843555,"lon":2.338948,"name":"AUGUSTE COMTE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764640","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjQw"}},"intermediateStops":[{"gtfsId":"3:StopPoint:59:3764628","lat":48.834801,"lon":2.333053,"name":"DENFERT-ROCHEREAU - ARAGO","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjI4"},{"gtfsId":"3:StopPoint:59:3764626","lat":48.837228,"lon":2.335449,"name":"HOPITAL SAINT-VINCENT DE PAUL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjI2"},{"gtfsId":"3:StopPoint:59:3764638","lat":48.839259,"lon":2.336783,"name":"OBSERVATOIRE - PORT ROYAL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM4"},{"gtfsId":"3:StopPoint:59:3764639","lat":48.841955,"lon":2.338076,"name":"VAL DE GRACE","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM5"}],"realTime":false,"startTime":1486901460000,"endTime":1486901760000,"distance":1394.994210656525,"duration":300.0,"trip":{"gtfsId":"3:81478032-1392774","tripHeadsign":"Gare du Nord","pattern":{"code":"3:100100038:38:1:01","id":"UGF0dGVybjozOjEwMDEwMDAzODozODoxOjAx"},"id":"VHJpcDozOjgxNDc4MDMyLTEzOTI3NzQ="},"agency":{"name":"RATP","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQ0Mg=="}},{"transitLeg":false,"legGeometry":{"points":"mwbiHgxgMGE_A_@F_@DYn@eGx@iEx@yEBs@HsB","length":10},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.843555,"lon":2.338948,"name":"AUGUSTE COMTE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764640","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjQw"}},"to":{"lat":48.842645,"lon":2.34352,"name":"Institut Curie, Paris, France","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"intermediateStops":[],"realTime":false,"startTime":1486901761000,"endTime":1486902134000,"distance":431.40200000000004,"duration":373.0,"trip":null,"agency":null}],"walkDistance":1184.3516666572623,"duration":3304,"startTime":1486898830000,"endTime":1486902134000,"fares":null},{"legs":[{"transitLeg":false,"legGeometry":{"points":"sughH__MXFBHjCZF??x@@pBBnCCJH?FBDFBJLL@MDBLFP@n@Fp@DlBN\Ch@@ZHXLHD","length":26},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.705208299999995,"lon":2.2985851,"name":"3 Rue Blaise Pascal, Chilly-Mazarin","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"to":{"lat":48.702031,"lon":2.296546,"name":"Gare de Longjumeau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:50790","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MDc5MA=="}},"intermediateStops":[],"realTime":false,"startTime":1486899664000,"endTime":1486900079000,"distance":471.90799999999996,"duration":415.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"ubghHkp_Mwh@qDcq@~Gek@{@}R~u@gBtOh@lVaMbGvK~b@vWl_@","length":10},"mode":"BUS","rentedBike":false,"route":{"shortName":"107","agency":{"name":"CEAT","id":"QWdlbmN5OjE4"},"id":"Um91dGU6MzowMTAwMTAwMDc6MTA3","gtfsId":"3:010010007:107","mode":"BUS"},"from":{"lat":48.702031,"lon":2.296546,"name":"Gare de Longjumeau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:50790","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MDc5MA=="}},"to":{"lat":48.723558,"lon":2.258912,"name":"Gare de Massy Palaiseau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:53660","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MzY2MA=="}},"intermediateStops":[{"gtfsId":"3:StopPoint:49:53200","lat":48.708719,"lon":2.297438,"name":"Petit Chilly","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MzIwMA=="},{"gtfsId":"3:StopPoint:49:63650","lat":48.716736,"lon":2.295992,"name":"Rue des Fleurs","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo2MzY1MA=="},{"gtfsId":"3:StopPoint:49:64390","lat":48.723806,"lon":2.286381,"name":"La Bonde","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo2NDM5MA=="},{"gtfsId":"3:StopPoint:49:50470","lat":48.726993,"lon":2.277588,"name":"Centre Cial de Massy","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MDQ3MA=="},{"gtfsId":"3:StopPoint:49:49990","lat":48.727513,"lon":2.274911,"name":"8 Mai 1945","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo0OTk5MA=="},{"gtfsId":"3:StopPoint:49:60460","lat":48.727304,"lon":2.271161,"name":"La Tuilerie","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo2MDQ2MA=="},{"gtfsId":"3:StopPoint:49:49980","lat":48.729551,"lon":2.269867,"name":"Mairie de Massy","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo0OTk4MA=="},{"gtfsId":"3:StopPoint:49:49970","lat":48.727516,"lon":2.264109,"name":"Chemin des Femmes","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo0OTk3MA=="}],"realTime":false,"startTime":1486900080000,"endTime":1486901100000,"distance":5245.608779200677,"duration":1020.0,"trip":{"gtfsId":"3:81254875-1324409","tripHeadsign":"Gare de Massy Palaiseau","pattern":{"code":"3:010010007:107:0:01","id":"UGF0dGVybjozOjAxMDAxMDAwNzoxMDc6MDowMQ=="},"id":"VHJpcDozOjgxMjU0ODc1LTEzMjQ0MDk="},"agency":{"name":"CEAT","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjE4"}},{"transitLeg":false,"legGeometry":{"points":"cikhHmexLCEGFABQKO^k@y@K@A?QFY[EJ","length":12},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.723558,"lon":2.258912,"name":"Gare de Massy Palaiseau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:53660","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MzY2MA=="}},"to":{"lat":48.724309,"lon":2.258966,"name":"GARE DE MASSY PALAISEAU RER B","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775879:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc5OjgxMDpC"}},"intermediateStops":[],"realTime":false,"startTime":1486901100000,"endTime":1486901214000,"distance":133.958,"duration":114.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"{mkhHoexLo~DseGei@gSesBor@a~FudDoqAfe@{b@oYub@uP","length":8},"mode":"RAIL","rentedBike":false,"route":{"shortName":"B","agency":{"name":"RER","id":"QWdlbmN5Ojc0MQ=="},"id":"Um91dGU6Mzo4MTA6Qg==","gtfsId":"3:810:B","mode":"RAIL"},"from":{"lat":48.724309,"lon":2.258966,"name":"GARE DE MASSY PALAISEAU RER B","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775879:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc5OjgxMDpC"}},"to":{"lat":48.845743,"lon":2.339928,"name":"LUXEMBOURG","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775861:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYxOjgxMDpC"}},"intermediateStops":[{"gtfsId":"3:StopPoint:8775875:810:B","lat":48.754947,"lon":2.300987,"name":"GARE D'ANTONY","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc1OjgxMDpC"},{"gtfsId":"3:StopPoint:8775874:810:B","lat":48.761694,"lon":2.304227,"name":"GARE DE LA CROIX DE BERNY FRESNES","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc0OjgxMDpC"},{"gtfsId":"3:StopPoint:8775869:810:B","lat":48.780284,"lon":2.312464,"name":"GARE DE BOURG LA REINE","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODY5OjgxMDpC"},{"gtfsId":"3:StopPoint:8775864:810:B","lat":48.82109,"lon":2.338978,"name":"CITE UNIVERSITAIRE","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODY0OjgxMDpC"},{"gtfsId":"3:StopPoint:8775863:810:B","lat":48.834293,"lon":2.332852,"name":"DENFERT ROCHEREAU","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYzOjgxMDpC"},{"gtfsId":"3:StopPoint:8775862:810:B","lat":48.840034,"lon":2.337096,"name":"PORT ROYAL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYyOjgxMDpC"}],"realTime":false,"startTime":1486901700000,"endTime":1486902960000,"distance":15382.33700052743,"duration":1260.0,"trip":{"gtfsId":"3:81510968-1412560","tripHeadsign":"EPOL - Aéroport Charles-de-Gaulle 2 TGV","pattern":{"code":"3:810:B:0:68","id":"UGF0dGVybjozOjgxMDpCOjA6Njg="},"id":"VHJpcDozOjgxNTEwOTY4LTE0MTI1NjA="},"agency":{"name":"RER","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5Ojc0MQ=="}},{"transitLeg":false,"legGeometry":{"points":"ydciHu_hMdHdD\NNHNFF_@DYn@eGx@iEx@yEBs@HsB","length":12},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.845743,"lon":2.339928,"name":"LUXEMBOURG","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775861:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYxOjgxMDpC"}},"to":{"lat":48.842645,"lon":2.34352,"name":"Institut Curie, Paris, France","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"intermediateStops":[],"realTime":false,"startTime":1486902961000,"endTime":1486903476000,"distance":600.229,"duration":515.0,"trip":null,"agency":null}],"walkDistance":1206.330833323962,"duration":3812,"startTime":1486899664000,"endTime":1486903476000,"fares":null},{"legs":[{"transitLeg":false,"legGeometry":{"points":"sughH__MXFBHjCZF??x@@pBBnCCJH?FBDFBJLL@MDBLFP@n@Fp@DlBN\Ch@@ZHXLHD","length":26},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.705208299999995,"lon":2.2985851,"name":"3 Rue Blaise Pascal, Chilly-Mazarin","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"to":{"lat":48.702031,"lon":2.296546,"name":"Gare de Longjumeau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:50790","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MDc5MA=="}},"intermediateStops":[],"realTime":false,"startTime":1486899664000,"endTime":1486900079000,"distance":471.90799999999996,"duration":415.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"ubghHkp_Mwh@qDcq@~Gek@{@}R~u@gBtOh@lVaMbGvK~b@vWl_@","length":10},"mode":"BUS","rentedBike":false,"route":{"shortName":"107","agency":{"name":"CEAT","id":"QWdlbmN5OjE4"},"id":"Um91dGU6MzowMTAwMTAwMDc6MTA3","gtfsId":"3:010010007:107","mode":"BUS"},"from":{"lat":48.702031,"lon":2.296546,"name":"Gare de Longjumeau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:50790","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MDc5MA=="}},"to":{"lat":48.723558,"lon":2.258912,"name":"Gare de Massy Palaiseau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:53660","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MzY2MA=="}},"intermediateStops":[{"gtfsId":"3:StopPoint:49:53200","lat":48.708719,"lon":2.297438,"name":"Petit Chilly","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MzIwMA=="},{"gtfsId":"3:StopPoint:49:63650","lat":48.716736,"lon":2.295992,"name":"Rue des Fleurs","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo2MzY1MA=="},{"gtfsId":"3:StopPoint:49:64390","lat":48.723806,"lon":2.286381,"name":"La Bonde","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo2NDM5MA=="},{"gtfsId":"3:StopPoint:49:50470","lat":48.726993,"lon":2.277588,"name":"Centre Cial de Massy","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MDQ3MA=="},{"gtfsId":"3:StopPoint:49:49990","lat":48.727513,"lon":2.274911,"name":"8 Mai 1945","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo0OTk5MA=="},{"gtfsId":"3:StopPoint:49:60460","lat":48.727304,"lon":2.271161,"name":"La Tuilerie","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo2MDQ2MA=="},{"gtfsId":"3:StopPoint:49:49980","lat":48.729551,"lon":2.269867,"name":"Mairie de Massy","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo0OTk4MA=="},{"gtfsId":"3:StopPoint:49:49970","lat":48.727516,"lon":2.264109,"name":"Chemin des Femmes","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo0OTk3MA=="}],"realTime":false,"startTime":1486900080000,"endTime":1486901100000,"distance":5245.608779200677,"duration":1020.0,"trip":{"gtfsId":"3:81254889-1324423","tripHeadsign":"Gare de Massy Palaiseau","pattern":{"code":"3:010010007:107:0:01","id":"UGF0dGVybjozOjAxMDAxMDAwNzoxMDc6MDowMQ=="},"id":"VHJpcDozOjgxMjU0ODg5LTEzMjQ0MjM="},"agency":{"name":"CEAT","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjE4"}},{"transitLeg":false,"legGeometry":{"points":"cikhHmexLCEGFABQKO^k@y@K@A?QFY[EJ","length":12},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.723558,"lon":2.258912,"name":"Gare de Massy Palaiseau","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:49:53660","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0OTo1MzY2MA=="}},"to":{"lat":48.724309,"lon":2.258966,"name":"GARE DE MASSY PALAISEAU RER B","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775879:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc5OjgxMDpC"}},"intermediateStops":[],"realTime":false,"startTime":1486901100000,"endTime":1486901214000,"distance":133.958,"duration":114.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"{mkhHoexLo~DseGei@gSesBor@a~FudDoqAfe@{b@oYub@uP","length":8},"mode":"RAIL","rentedBike":false,"route":{"shortName":"B","agency":{"name":"RER","id":"QWdlbmN5Ojc0MQ=="},"id":"Um91dGU6Mzo4MTA6Qg==","gtfsId":"3:810:B","mode":"RAIL"},"from":{"lat":48.724309,"lon":2.258966,"name":"GARE DE MASSY PALAISEAU RER B","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775879:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc5OjgxMDpC"}},"to":{"lat":48.845743,"lon":2.339928,"name":"LUXEMBOURG","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775861:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYxOjgxMDpC"}},"intermediateStops":[{"gtfsId":"3:StopPoint:8775875:810:B","lat":48.754947,"lon":2.300987,"name":"GARE D'ANTONY","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc1OjgxMDpC"},{"gtfsId":"3:StopPoint:8775874:810:B","lat":48.761694,"lon":2.304227,"name":"GARE DE LA CROIX DE BERNY FRESNES","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODc0OjgxMDpC"},{"gtfsId":"3:StopPoint:8775869:810:B","lat":48.780284,"lon":2.312464,"name":"GARE DE BOURG LA REINE","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODY5OjgxMDpC"},{"gtfsId":"3:StopPoint:8775864:810:B","lat":48.82109,"lon":2.338978,"name":"CITE UNIVERSITAIRE","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODY0OjgxMDpC"},{"gtfsId":"3:StopPoint:8775863:810:B","lat":48.834293,"lon":2.332852,"name":"DENFERT ROCHEREAU","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYzOjgxMDpC"},{"gtfsId":"3:StopPoint:8775862:810:B","lat":48.840034,"lon":2.337096,"name":"PORT ROYAL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYyOjgxMDpC"}],"realTime":false,"startTime":1486901700000,"endTime":1486902960000,"distance":15382.33700052743,"duration":1260.0,"trip":{"gtfsId":"3:81511046-1412629","tripHeadsign":"EPOL - Aéroport Charles-de-Gaulle 2 TGV","pattern":{"code":"3:810:B:0:68","id":"UGF0dGVybjozOjgxMDpCOjA6Njg="},"id":"VHJpcDozOjgxNTExMDQ2LTE0MTI2Mjk="},"agency":{"name":"RER","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5Ojc0MQ=="}},{"transitLeg":false,"legGeometry":{"points":"ydciHu_hMdHdD\NNHNFF_@DYn@eGx@iEx@yEBs@HsB","length":12},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.845743,"lon":2.339928,"name":"LUXEMBOURG","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:8775861:810:B","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo4Nzc1ODYxOjgxMDpC"}},"to":{"lat":48.842645,"lon":2.34352,"name":"Institut Curie, Paris, France","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"intermediateStops":[],"realTime":false,"startTime":1486902961000,"endTime":1486903476000,"distance":600.229,"duration":515.0,"trip":null,"agency":null}],"walkDistance":1206.330833323962,"duration":3812,"startTime":1486899664000,"endTime":1486903476000,"fares":null},{"legs":[{"transitLeg":false,"legGeometry":{"points":"sughH__MXFBHjCZF??x@@pBBnCCJH?FBDFBJLL@MDBLFP@n@Fp@DlBN\Ch@@ZHXL","length":25},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.705208299999995,"lon":2.2985851,"name":"3 Rue Blaise Pascal, Chilly-Mazarin","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"to":{"lat":48.702076,"lon":2.296614,"name":"Chemin Blanc","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:9952","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo5OTUy"}},"intermediateStops":[],"realTime":false,"startTime":1486902430000,"endTime":1486902839000,"distance":465.62399999999997,"duration":409.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"}bghHyp_Myk@aEgh@cFmoS{gD","length":4},"mode":"BUS","rentedBike":false,"route":{"shortName":"DM151","agency":{"name":"TRANSPORTS DANIEL MEYER","id":"QWdlbmN5OjQwNw=="},"id":"Um91dGU6MzowNTUxNTUwMDE6RE0xNTE=","gtfsId":"3:055155001:DM151","mode":"BUS"},"from":{"lat":48.702076,"lon":2.296614,"name":"Chemin Blanc","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:9952","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo5OTUy"}},"to":{"lat":48.82087,"lon":2.325745,"name":"Porte d'Orléans","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:413","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo0MTM="}},"intermediateStops":[{"gtfsId":"3:StopPoint:46:8880","lat":48.70924,"lon":2.297587,"name":"Le Petit Chilly","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo4ODgw"},{"gtfsId":"3:StopPoint:46:8882","lat":48.715847,"lon":2.298723,"name":"Les Champarts","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo4ODgy"}],"realTime":false,"startTime":1486902840000,"endTime":1486903860000,"distance":13383.951592857922,"duration":1020.0,"trip":{"gtfsId":"3:81263836-1326575","tripHeadsign":"Paris - Porte d'Orléans","pattern":{"code":"3:055155001:DM151:1:03","id":"UGF0dGVybjozOjA1NTE1NTAwMTpETTE1MToxOjAz"},"id":"VHJpcDozOjgxMjYzODM2LTEzMjY1NzU="},"agency":{"name":"TRANSPORTS DANIEL MEYER","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQwNw=="}},{"transitLeg":false,"legGeometry":{"points":"ki~hHyfeMe@B?DO@K@i@F??W@AFOZ_@DQ@BJBLALCLEHEDG@G?GCEGOXEJQCoBY","length":26},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.82087,"lon":2.325745,"name":"Porte d'Orléans","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:46:413","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo0Njo0MTM="}},"to":{"lat":48.82282,"lon":2.325091,"name":"Porte d'Orléans (Général Leclerc)","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59624","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYyNA=="}},"intermediateStops":[],"realTime":false,"startTime":1486903860000,"endTime":1486904079000,"distance":259.829,"duration":219.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"su~hHybeMw_@}IyXkU","length":3},"mode":"SUBWAY","rentedBike":false,"route":{"shortName":"4","agency":{"name":"METRO","id":"QWdlbmN5OjQzOQ=="},"id":"Um91dGU6MzoxMDAxMTAwMDQ6NA==","gtfsId":"3:100110004:4","mode":"SUBWAY"},"from":{"lat":48.82282,"lon":2.325091,"name":"Porte d'Orléans (Général Leclerc)","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59624","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYyNA=="}},"to":{"lat":48.832194,"lon":2.330425,"name":"Mouton-Duvernet","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59260","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTI2MA=="}},"intermediateStops":[{"gtfsId":"3:StopPoint:59631","lat":48.828069,"lon":2.326846,"name":"Alésia","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTYzMQ=="}],"realTime":false,"startTime":1486904400000,"endTime":1486904520000,"distance":1125.8597226853258,"duration":120.0,"trip":{"gtfsId":"3:79549920-186588","tripHeadsign":"Porte de Clignancourt","pattern":{"code":"3:100110004:4:1:03","id":"UGF0dGVybjozOjEwMDExMDAwNDo0OjE6MDM="},"id":"VHJpcDozOjc5NTQ5OTIwLTE4NjU4OA=="},"agency":{"name":"METRO","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQzOQ=="}},{"transitLeg":false,"legGeometry":{"points":"upiHodfM??Ja@IIIE","length":5},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.832194,"lon":2.330425,"name":"Mouton-Duvernet","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59260","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTI2MA=="}},"to":{"lat":48.832257,"lon":2.330902,"name":"DENFERT-ROCHEREAU - DAGUERRE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764637","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM3"}},"intermediateStops":[],"realTime":false,"startTime":1486904520000,"endTime":1486904545000,"distance":27.259999999999998,"duration":25.0,"trip":null,"agency":null},{"transitLeg":true,"legGeometry":{"points":"qpiHcgfM}NmLcN}MuKkG{OaG_ImD","length":6},"mode":"BUS","rentedBike":false,"route":{"shortName":"38","agency":{"name":"RATP","id":"QWdlbmN5OjQ0Mg=="},"id":"Um91dGU6MzoxMDAxMDAwMzg6Mzg=","gtfsId":"3:100100038:38","mode":"BUS"},"from":{"lat":48.832257,"lon":2.330902,"name":"DENFERT-ROCHEREAU - DAGUERRE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764637","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM3"}},"to":{"lat":48.843555,"lon":2.338948,"name":"AUGUSTE COMTE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764640","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjQw"}},"intermediateStops":[{"gtfsId":"3:StopPoint:59:3764628","lat":48.834801,"lon":2.333053,"name":"DENFERT-ROCHEREAU - ARAGO","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjI4"},{"gtfsId":"3:StopPoint:59:3764626","lat":48.837228,"lon":2.335449,"name":"HOPITAL SAINT-VINCENT DE PAUL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjI2"},{"gtfsId":"3:StopPoint:59:3764638","lat":48.839259,"lon":2.336783,"name":"OBSERVATOIRE - PORT ROYAL","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM4"},{"gtfsId":"3:StopPoint:59:3764639","lat":48.841955,"lon":2.338076,"name":"VAL DE GRACE","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjM5"}],"realTime":false,"startTime":1486904940000,"endTime":1486905180000,"distance":1394.994210656525,"duration":240.0,"trip":{"gtfsId":"3:81477662-1392431","tripHeadsign":"Gare du Nord","pattern":{"code":"3:100100038:38:1:02","id":"UGF0dGVybjozOjEwMDEwMDAzODozODoxOjAy"},"id":"VHJpcDozOjgxNDc3NjYyLTEzOTI0MzE="},"agency":{"name":"RATP","url":"http://www.vianavigo.com","fareUrl":null,"id":"QWdlbmN5OjQ0Mg=="}},{"transitLeg":false,"legGeometry":{"points":"mwbiHgxgMGE_A_@F_@DYn@eGx@iEx@yEBs@HsB","length":10},"mode":"WALK","rentedBike":false,"route":null,"from":{"lat":48.843555,"lon":2.338948,"name":"AUGUSTE COMTE","vertexType":"TRANSIT","bikeRentalStation":null,"stop":{"gtfsId":"3:StopPoint:59:3764640","code":null,"platformCode":null,"id":"U3RvcDozOlN0b3BQb2ludDo1OTozNzY0NjQw"}},"to":{"lat":48.842645,"lon":2.34352,"name":"Institut Curie, Paris, France","vertexType":"NORMAL","bikeRentalStation":null,"stop":null},"intermediateStops":[],"realTime":false,"startTime":1486905181000,"endTime":1486905554000,"distance":431.40200000000004,"duration":373.0,"trip":null,"agency":null}],"walkDistance":1184.3516666572623,"duration":3124,"startTime":1486902430000,"endTime":1486905554000,"fares":null}],"date":1486898739000}}}}

An idea?

kalon33 avatar Feb 12 '17 10:02 kalon33

In the request, you can see time:"11:25:39" i.e. local time. In the response you can see "date":1486898739000 ~~which corresponds to 11:25:39 local time as well.~~ (EDIT) which corresponds to 12:25:39 local time:

$ TZ='Europe/Paris' date --date='@1486898739' -Iseconds
2017-02-12T12:25:39+0100

Similarily for the first itinerary: "startTime":1486898890000 corresponds to 12:28:10 local time ~~(a completely reasonable 2,5 minute wait before departure). If it shows as 13:28:10, then Moment.js is not converting the timestamp to local time correctly.~~

At beta.reittiopas.fi ~~it works the same way except the timezone is Europe/Helsinki, and Moment.js is converting to local time correctly.~~ (EDIT) the request "time" and response "date" refer to the same time in the Europe/Helsinki timezone. Your OTP is probably not running in your Europe/Paris timezone?

tuukka avatar Feb 12 '17 11:02 tuukka

@tuukka but it shouldn't return a startTime 12:28:10 for the first itinerary when I ask for leaving at 11:25 (and buses are available at this time)...

kalon33 avatar Feb 12 '17 12:02 kalon33

@tuukka Here is what I got:

bug digitransit

and here is what I should have, that I got when I ask to leave one hour before...

bug_digitransit_2

kalon33 avatar Feb 12 '17 12:02 kalon33

@kalon33 thanks for pointing out the contradiction in what I wrote. Please see my edits and check your OTP timezone. We set ours here (java $JAVA_OPTS -Duser.timezone=Europe/Helsinki): https://github.com/HSLdevcom/OpenTripPlanner/blob/master/run.sh#L42

tuukka avatar Feb 12 '17 14:02 tuukka

@tuukka I changed it to Europe/Paris, restarted OTP, but still, the same problem. How timezone is compared between digitransit-ui and OTP? I don't get that problem neither when using the web interface included in OTP (at http://paris.acolytesanonymes.org), nor when digitransit-ui displays next departures ar near stops.

kalon33 avatar Feb 12 '17 15:02 kalon33

@tuukka Is there a place where digitransit "tells" OTP that it has a time drift with it? Is there a way to just ignore timezones (as my setup works in only one timezone, the same for OTP and Digitransit, that should fix the problem)?

kalon33 avatar Feb 12 '17 15:02 kalon33

It seems the problem is not in the direction from OTP to Digitransit UI, as the times in the responses are communicated as timestamps. (However, that also means there's no way to ignore timezones.) The problem is in the plan request as the time is local time there, and OTP has to use the same local time as Digitransit UI or problems ensue. The run.sh above is where Digitransit "tells" OTP which timezone is local time. I don't know why the setting there doesn't have an effect on your system. Do you use Docker and do you use our Dockerfile?

tuukka avatar Feb 12 '17 19:02 tuukka

@tuukka No, I cloned git repository to a directory, built OTP with

mvn clean package -DskipTests

then I built graph (./otp --build ./pdx/paris/ --graphs ./pdx/graphs/) and launched it using ./otp --server --graphs ./pdx/ --router paris --securePort 7997 --port 7996 (with the following command line in ./otp: java -Xmx6G -Xverify:none -Duser.timezone=Europe/Paris -jar dirname $0/target/otp-1.1.0-SNAPSHOT-shaded.jar "$@" )

OTP is then accessible through an apache proxy.

If there's an easy to set up alternative to run multiple OTP instances (on multiple ports) on the same machine without messing the rest of my server services, and that would fix my problem, I'm ready to try it.

I've another OTP instance running on the same server with the same config, and there I don't have any timezone problem...

kalon33 avatar Feb 12 '17 20:02 kalon33

You should test running our Docker container:

docker run -p 7996:8080 -e ROUTER_NAME=hsl -e ROUTER_DATA_CONTAINER_URL=https://api.digitransit.fi/routing-data/v1/ hsldevcom/opentripplanner

You can replace hslwith your own router name and https://api.digitransit.fi/routing-data/v1/ with your own URL to a directory where you have put router-hsl.zip that contains all your data files (OSM, GTFS, build-config.json, router-config.jsonetc.)

tuukka avatar Feb 13 '17 08:02 tuukka

That works but I really don't know why, do you? Is there a way to reload a Docker container without rebuilding OTP graph?

kalon33 avatar Feb 13 '17 19:02 kalon33

OTP debug output in console is now showing one hour more than when the request was done. Example done at 22:23 CEST (Paris Time):

23:23:33.577 INFO (GraphQL.java:60) Executing request. operation name: null. Request: query NearestRoutesContainer($filterByModes_0:[Mode]!,$filterByPlaceTypes_1:[FilterPlaceType]!,$startTime_2:Long!) {viewer {...F5}} fragment F0 on DepartureRow {_stoptimes4wU578:stoptimes(startTime:$startTime_2,timeRange:7200,numberOfDepartures:2) {serviceDay,realtimeDeparture},id} fragment F1 on DepartureRow {pattern {route {gtfsId,shortName,longName,mode,color,alerts {id,effectiveStartDate,effectiveEndDate},agency {name,id},id},code,id},_stoptimes4wU578:stoptimes(startTime:$startTime_2,timeRange:7200,numberOfDepartures:2) {realtimeState,realtimeDeparture,scheduledDeparture,realtimeArrival,scheduledArrival,realtime,serviceDay,stopHeadsign,stop {code,platformCode,id},trip {gtfsId,id}},id} fragment F2 on BikeRentalStation {name,stationId,bikesAvailable,spacesAvailable,id} fragment F3 on placeAtDistance {distance,place {id,__typename,...F1,...F2},id} fragment F4 on placeAtDistanceConnection {edges {node {distance,place {id,__typename,...F0},id,...F3},cursor},pageInfo {hasNextPage,hasPreviousPage}} fragment F5 on QueryType {_nearestv3sCm:nearest(lat:48.6949911625,lon:2.29839228125,maxDistance:10000,maxResults:50,first:50,filterByModes:$filterByModes_0,filterByPlaceTypes:$filterByPlaceTypes_1) {...F4}}

kalon33 avatar Feb 13 '17 22:02 kalon33

@tuukka @hannesj Sorry for the out of topic question, but unfortunately we don't have a mailing list for this... How do you make use of HSL SIRI Lite VM feed in OTP and Digitransit (like http://api.digitransit.fi/realtime/vehicle-positions/v1/siriaccess/vm/json) ? I will have some SIRI lite only real time data sources and I don't know how to deal with that...

@tuukka Thanks a lot for your help BTW, that fixed my problem (I now use the Docker container) but I can't find out how!

kalon33 avatar Feb 15 '17 08:02 kalon33

@kalon33 You need to convert SIRI to GTFS-realtime. Our code to convert SIRI VM to GTFS-realtime Trip Updates: https://github.com/HSLdevcom/siri2gtfsrt

Regarding timezones and Docker: My guess is your server timezone configuration is incompatible with Java, whereas our Docker image is compatible with Java. (Why do you see times one hour bigger? The Docker image is configured to use Europe/Helsinki timezone which is one hour ahead of Paris.)

tuukka avatar Feb 15 '17 09:02 tuukka

@tuukka thanks a lot! Is your code able to work without reference to trip_ids in SIRI feed (which I think is MonitoredVehicleJourney)? My data source only references line, position, current and next stops, and direction (inbound or outbound) and I have to make a SIRI lite feed with that...

I found this OTP branch https://github.com/rutebanken/opentripplanner/tree/rutebanken_siri_realtime_support that has embedded SIRI support without the need of other code, but unfortunately it doesn't support SIRI-lite right now... Maybe is it of some interest to you too?

kalon33 avatar Feb 16 '17 15:02 kalon33

No need for trip id's directly, but we have the scheduled departure time which we use to find the trip id. Without a reference to the trip in the static timetable, all times will show twice: once for the static trip, once for the realtime trip. In a way, the realtime trip needs to cancel the static trip.

tuukka avatar Feb 16 '17 16:02 tuukka

@tuukka Is the "delay" value for a given vehicle in the SIRI-lite feed enough for siri2gtfsrt to calculate the scheduled departure and find the trip_id? Or should I calculate it myself, and provide it in the feed using a specific variable?

kalon33 avatar Feb 16 '17 18:02 kalon33

True, in theory the delay is enough (especially if it's the delay at a specific stop). In practise, siri2gtfsrt takes the scheduled departure time from origin from the SIRI feed and passes it on to OTP, which has "fuzzy" trip matching as an option based on route, direction and scheduled departure time.

tuukka avatar Feb 16 '17 19:02 tuukka

@tuukka What is the corresponding variable name in SIRI? I will modify my feed to include it then (based on calculation). Do you plan to contribute to the SIRI module rutebanken did to integrate your feed or will you keep siri2gtfsrt (I don't know your links with them)? Their module seems pretty well designed to integrate feeds in OTP and match trip_id when missing from the feed. Thanks for your help :)

Thanks :)

kalon33 avatar Feb 16 '17 19:02 kalon33

start_time = vehicle['MonitoredVehicleJourney']['FramedVehicleJourneyRef']['DatedVehicleJourneyRef']

We have not had plans to move SIRI support into OTP and I didn't know Rutebanken had a branch.

By the way, you have 11 issues open here. On the other hand, you said all your bugs were fixed. Could you check if some of your open issues are bugs that have been fixed?

tuukka avatar Feb 16 '17 20:02 tuukka