2017-10-28 2 views
0

다른 GTFS & 피드를 사용하는 Im의 소비.이 데이터를 SQL 데이터베이스에 저장합니다.고정 GTFS와 GTFS-RT 트립 업데이트를 일치시키는 방법

정적 GTFS 데이터를 GTFS-RT 여행 업데이트와 어떻게 연결/링크해야합니까?

특정 stop_id에 대한 중지 시간을 표시하려고합니다. 임 정적 GTFS에서 시간을 얻을 수 있지만 GTFS-RT 여행 업데이트 시간을 업데이 트와 함께이 시간을 "패치"싶어요.

GTFS-RT가 매우 느슨하게 지정된 것처럼 보이지만 일부 필드 만 필수입니다. 사용중인 GTFS-RT 피드 중 하나가 트립 업데이트에 trip_id가 있고 다른 피드에 trip_id가 없습니다. 2017년 4월 11일

업데이트 나는 아래 쿼리를 사용하여 정적 GTFS에 GTFS-RT 여행 업데이트를 일치하도록 관리. 어떤 이유로 든 모든 여행 업데이트에 대해 trip_id를 얻을 수 없습니다. 어쩌면 문제는 데이터 자체에 있습니다. 내 쿼리에 문제가 있습니까?

const trip = await knex('trips') 
    .select('trips.trip_id') 
    .innerJoin('routes', 'routes.route_id', 'trips.route_id') 
    .innerJoin('stop_times', 'stop_times.trip_id', 'trips.trip_id') 
    .whereIn('trips.service_id', *day active service ids*) 
    .andwhere('routes.route_id', tripUpdate.route_id) 
    .andWhere('stop_times.departure_time', tripUpdate.trip_start_time) 
    .andWhere('trips.direction_id', tripUpdate.direction_id) 
    .orderBy('stop_times.stop_sequence') 
    .first(); 
+0

예, 느슨하게 정의 된 표준입니다. 최근의 GTFS-rt 2.0 스펙은이를 분명하게 설명하고 있지만 여전히 허용됩니다. 왜? 단기간의 혼란에 대한 서비스 정보를 제공 할 수있는 유스 케이스가 있습니다. 이것은 그것이 정상이되는 많은 사료에 의해 악용되고 있습니다. 피드와 GTFS 간의 일치를 수행 할 수있는 논리를 작성해야 할 수 있습니다. 그러나 그것이 당신이 말하는 어떤 피드를 알지 못해도 가능한지 말할 수 없습니다. –

+0

어떤 [DBMS] (https://en.wikipedia.org/wiki/DBMS) 제품을 사용하고 있습니까? 포스트그레스? 신탁? "_SQL_"은 쿼리 언어 일뿐 특정 데이터베이스 제품의 이름은 아닙니다. –

+0

mariadb를 사용하고 있습니다. – devha

답변

0

문제는 select 문에서

.andWhere('stop_times.departure_time', tripUpdate.trip_start_time) 

조항이 될 수 있습니다.

gtfs 사양 상태 시간은 HH : MM : SS 형식으로 8 자리 여야합니다 (시가 0으로 시작하는 경우 H : MM : SS도 허용됩니다) 시간대가 5:37:00과 같은 시간대 인 경우 TripUpdates의 start_time은 05:37:00입니다. 귀하의 진술은 여행 ID를 반환하지 않습니다. 이것이 문제인 경우 stop_times.txt에서 데이터베이스에 추가 할 때 이와 같이 시간을 "0"으로 시작하거나 위의 절을 조정해야합니다.

+0

제 경우에 문제는 trip_id가 없다는 것입니다. 그리고 trip_id를 사용하여 GTFS-RT TripUpdate를 정적 GTFS와 비교하려고합니다. 첫 번째 게시물에 쿼리를 추가하여 일치하는 방법을 설명했습니다. – devha

관련 문제