2017-02-18 2 views
2

지금까지 Developer 's API Key에 대해 MTA online registration form을 작성했습니다. 그럼 내 안드로이드 프로젝트에, 나는 GTFS 실시간 바인딩이 자신의 자바 클래스를 사용하여,MTA의 실시간 gtfs 데이터 피드를 이해하는 방법

compile group: 'com.google.transit', name: 'gtfs-realtime-bindings', version: '0.0.4' 

Google's github repositories 중 하나를 실행 종속 구현, 나는 MTA,

에 의해 주어진 링크에서 모든 GTFS 데이터를 인쇄하려면이 다음 코드를 시도
try { 
    String urlString = "http://datamine.mta.info/mta_esi.php?key=insertmykeyhere"; 
    URL url = new URL(urlString.toString()); 
    GtfsRealtime.FeedMessage feed = GtfsRealtime.FeedMessage.parseFrom(url.openStream()); 
    for (GtfsRealtime.FeedEntity entity : feed.getEntityList()) { 
     if (entity.hasTripUpdate()) { 
      Log.d("stuff", entity.getTripUpdate().toString()); 
     } 
    } 

} catch (IOException e) { 
      e.printStackTrace(); 
} 

그러나 지금 나는 데이터를 해석하는 데 문제가 있습니다. http://web.mta.info/developers/developer-data-terms.html의 정적 데이터 피드가 있다는 것을 알고 있으며 일부 데이터를 해석하는 데 사용되었습니다. 여기

stuff: trip { 
    trip_id: "036000_GS.N01R" 
    start_date: "20170218" 
    route_id: "GS" 
    1001: "\n\0200S 0600 GCS/TSS\020\001\030\001" 
}  
stop_time_update { 
    departure { 
     time: 1487415600 
    } 
    stop_id: "901N" 
    1001: "\n\0011\022\0011" 
} 
stop_time_update { 
    arrival { 
     time: 1487415690 
    } 
    stop_id: "902N" 
    1001: "\n\0011" 
} 

내가 같은 trip_id, 시작일 및 stop_id 등 일부 지역을 이해, 인쇄 여행 업데이트 중 하나입니다. 그러나 trip_id, time, 1001과 같은 부분에 대해서는 아직 확신이 없으며 정적 피드의 텍스트 파일은 설명하기에 가장 좋은 작업을 수행하지 않습니다.

답변

0

MTA 지하철 GTFS-RT 피드는 대부분 다른 것들과 약간 다릅니다.

일반적으로 GTFS-RT는 trip_id/stop_id/등을 통해 정적 GTFS '를 직접 참조합니다. 뉴욕시에는 일반적으로 정상적인 서비스와의 편차가 있기 때문에 ("2 Train via the 5 Line"), RT 피드는 정적 피드에없는 새로운 트립을 생성하는 옵션을 유지합니다.

즉각적인 질문에 답변하려면 realtime extensions을 추가해야합니다. 그러면 빈 1001 : 필드가 해결됩니다.

그렇게, 어느 프로토 파일을 컴파일하거나 확장이있는 onebusaway-gtfs-realtime-api 라이브러리 가져 오려면에 미리를 컴파일 :

ExtensionRegistry registry = ExtensionRegistry.newInstance(); 
    registry.add(GtfsRealtimeNYCT.nyctFeedHeader); 
    registry.add(GtfsRealtimeNYCT.nyctStopTimeUpdate); 
    registry.add(GtfsRealtimeNYCT.nyctTripDescriptor); 

    GtfsRealtime.FeedMessage feed = GtfsRealtime.FeedMessage.parseFrom(url.openStream(), registry); 

이 같은 결과 제공 :

trip { 
    trip_id: "B20170217WKD_132800B..S" 
    start_date: "2017-02-17 22:08:00" 
    route_id: "B" 
    [transit_realtime.nyct_trip_descriptor] { 
    train_id: "1B 2208 145/BBC" 
    is_assigned: true 
    direction: SOUTH 
    } 
} 
stop_time_update { 
    arrival { 
    time: 1487390920 
    } 
    departure { 
    time: 1487390920 
    } 
    stop_id: "D39" 
    schedule_relationship: SCHEDULED 
    [transit_realtime.nyct_stop_time_update] { 
    scheduled_track: "A3" 
    actual_track: "A3" 
    } 
} 
stop_time_update { 
    arrival { 
    time: 1487391130 
    } 
    departure { 
    time: 1487391130 
    } 
    stop_id: "D40" 
    schedule_relationship: SCHEDULED 
    [transit_realtime.nyct_stop_time_update] { 
    scheduled_track: "A3" 
    actual_track: "A3" 
    } 
} 
+0

무엇 onebusaway API를 사용하는 코드의 결과입니까? 나는 도서관에 너무 익숙하지 않다. –

+0

onebusaway 라이브러리는 필요한 확장명으로 컴파일 된 protobuf입니다. trip_descriptor가 채워 졌는지 확인하십시오. https://github.com/laidig/nyct-gtfs-rt-example에는 사용해보기 좋은 Maven 프로젝트가 있습니다. –

+0

안녕하세요,이 답변을 본 이후로 꽤 오래되었습니다. 그래서 방금 편집을 주목했습니다. 나는 Maven에 익숙하다. 그래서 github repo를 어떻게 설치 하겠는가? 난 그냥 repo를 다운로드 한 다음 이클립스 같은 일부 IDE에서 업로드 할 수 있습니까? –

관련 문제