<\/HEAD>
Statické jízdní řády autobusů (<\/SPAN>GTFS<\/A><\/SPAN>) nemohou konkurovat informacím o autobusech v reálném čase (<\/SPAN>GTFS-realtime<\/A><\/SPAN>). Ale to neznamená, že se musíte spokojit se statickými vizualizačními technikami.<\/SPAN><\/P>V tomto blogu ukážu, jak můžete být trochu kreativní a nechat své statické jízdní řády zpívat a pohybovat se spolu s Arcade. A budete chtít zpívat: <\/SPAN>kola na autobuse se točí dokola<\/SPAN><\/EM><\/SPAN><\/STRONG><\/SPAN> 
<\/SPAN><\/P>
<\/SPAN><\/P>Vyberte odkaz níže pro zobrazení webové mapy spojené s tímto GIF.<\/SPAN><\/P>Map Viewer Beta<\/SPAN><\/STRONG><\/SPAN><\/A><\/SPAN><\/P><\/LI>Map Viewer (classic)<\/SPAN><\/A><\/SPAN><\/P><\/LI><\/UL>GIF <\/SPAN>GIF<\/SPAN><\/A><\/SPAN> a <\/> webová mapa ukazují vyskakovací okna s nadcházejícími autobusy a těmi právě nedávno zmeškanými. To by bylo užitečné pro cestující autobusem, aby pochopili, které služby jsou k dispozici v daný datum a čas. Naučíme se, jak vytvořit tato zobrazení popupů z GTFS feedu. Následně, jak rozšířit toto řešení na mobilní přátelskou aplikaci, kde by cestující mohli mít přístup k těmto informacím na cestách.
Více o GTFS
GTFS feed je sbírka textových souborů, každý vypráví příběh o dopravních informacích. Pro tento příklad použijeme GTFS feed pro veřejné autobusy v Canberra, Austrálie.
Vytváření výrazů (hosted table)
Možná jste si všimli z modelu použitého pro hosted table, že jsem vytvořil extra pole arrivalSeconds pro výpočet arrival_time autobusů z typu řetězce hh:mm:ss na number (sekundy uplynulé od začátku dne). Toto bylo provedeno pro zrychlení filtračního dotazu (který použijeme později) tak, aby vracel pouze prvky relevantní k denní době. Jak si dokážete představit, je mnohem rychlejší dotazovat se na čísla než převádět typy řetězců za běhu (zejména u velkých datasetů).
Převod arrival_time na počet sekund uplynulých od začátku dne
//oddělení hodin, minut a sekund příjezdu do pole
var separateArrival = Split($feature["arrival_time"],":")
//Oprava hodin větších než 23
var fixedHours = When(separateArrival[0] >= 24, separateArrival[0] - 24, separateArrival[0])
//převod arrival_time z 'String' na 'Date' typ
var arrivalTimeAware = Date(Year(Now()), Month(Now()), Day(Now()), fixedHours, separateArrival[1], var portal = Portal("https://www.arcgis.com")
var gtfsTable = FeatureSetByPortalItem(portal,"38ee59b7d5bc4173ab8786bd58ae274a", 0)
var stopId = $feature["stop_id"]
var startOfDayTime = Date(Year(Now()), Month(Now()), Day(Now()), 0, 0, 0)
//sekundy uplynulé od začátku dne
var secondsElapsed = DateDiff(Now(), startOfDayTime, 'seconds')
//vrátit curr_date jako celé číslo ve formátu 'YYYYMMDD' #JakToMěloBýt
var curr_date = Number(Text(Now(),'YMMDD'))
//pokud chcete změnit časový interval, změňte '3600' sekund na něco jiného ve výrazu - 'arrivalSeconds <= (@secondsElapsed + 3600)'
var filterStatement </ span>< spanclass = ''style = ' color :#981a1a ; '> = </ span > < spanclass = ''style = ' color :#aa1111 ; ' > 'arrivalSeconds >= @secondsElapsed AND arrivalSeconds <= (@secondsElapsed + 3600) AND stop_id = @stopId AND @curr_date >= start_date AND @curr_date <= end_date' </ span > </ span >
< spanclass = ''style = ' color
aa5500 ; '> // filtrujte gtfsTable podle filtračního výrazu </ span > </ span >
< spanclass = ''style = ' color
aa5500 ; '> // seřadit výsledky podle arrivalSeconds vzestupně </ span > </ span >
< spanclass = ''style = ' color
770088 ; '> var </ span > < spanclass = ''style = ' color
0000ff ; '> filtered </ span > < spanclass = ''style = ' color
981a1a ; '> = </ span > < spanclass = ''style = ' color
000000 ; '> OrderBy </ span > ( < spanclass = ''style = ' color
000000 ; '> Filter </ span > ( gtfsTable , filterStatement ) , < spanclass = ''style = ' color
aa1111 ; '> 'arrivalSeconds ASC' </ span > ) </ span >
< spanclass = ''style = ' color
770088 ; '> var </ span > < spanclass = ''style = ' color
0000ff ; '> popupResult </ span > < spanclass = ''style = ' color
981a1a ; '> = </ span > < spanclass = ''style = ' color
aa1111 ; '> '' </ span > </ span >
< spanclass = ''style = ' color
770088 ; '> var </ span > < spanclass = ''style = ' color
0000ff ; '> weekDays </ span > < spanclass = ''style = ' color
981a1a ; '> = </ span > [< spanclass = ''style = ' color
aa1111 ; '> 'sunday' </ span > ,< spanclass = ''style = ' color
aa1111 ; '> 'monday' </ span > ,< spanclass = ''style = ' color
aa1111 ; '> 'tuesday' </ span > ,< spanclass = ''style = ' color
aa1111 ; '> 'wednesday' </ span > ,< spanclass = ''style = ' color
aa1111 ; '> 'thursday' </ span > ,< spanclass = ''style = ' color
aa1111 ; '> 'friday' </ span > ,< spanclass = ''style = ' color
aa1111 ; '> 'saturday' </ span > ] </ span >
'//Tato proměnná se používá v cyklu for k určení, zda je autobus v provozu v daný den v týdnu (např. vrací 1, pokud je v provozu, 0, pokud není).'
'var''currWeekdayOpr''= ''weekDays'['Weekday'('Now'())]
'//Procházejte filtrované výsledky a zobrazte požadovaná pole v popup okně'
'for'</ sp an>< sp anclas s =' sty le =' col or :#770088;'>'( var '</ sp an>< sp anclas s =' sty le =' col or :#00 00 ff;'>'f'</ sp an>< sp anclas s =' sty le =' col or :#770088;'>' in '</ sp an>< sp anclas s =' sty le =' col or :#00 00 00;'>'filtered')</ sp an>{
< sp anclas s =' sty le =' col or :#770088;'>'if'</ sp an>< sp anclas s =' sty le =' col or :#00 00 00;'>'f'</ sp an>[< sp anclas s =' sty le =' col or :#00 00 00;'>'currWeekdayOpr'</ sp an>] == < sp anclas s =' sty le =' col or :'116644';'>1'){
0 && f.bikes_allowed == 1," -
,"") + TextFormatting.NewLine + TextFormatting.NewLine
} jinak{
popupResult += ""
}
}
IIF(IsEmpty(popupResult), "Žádné nadcházející autobusy v příští hodině" + TextFormatting.NewLine + TextFormatting.NewLine, PopupResult )
Můžete také použít podobný výraz s mírně upraveným filterStatement pro dotazování autobusů, které odjely v posledních x minutách. Níže uvedený příkaz dotazuje autobusy, které odjely v posledních 20 minutách (1200 sekund).
var filterStatement = 'arrivalSeconds >= (@secondsElapsed - 1200) AND arrivalSeconds < @secondsElapsed AND stop_id = @stopId AND @curr_date >= start_date AND @curr_date <= end_date'
Kompletní výraz pro autobusy, které odjely v posledních 20 minutách
//dotaz na prvky z hostované tabulky - 'stopsTimesTripsRoutesCalendar' v ArcGIS Online
var portal = Portal ("https://www.arcgis.com")
var gtfsTable = FeatureSetByPortalItem (portal ,"38ee59b7d5bc4173ab8786bd58ae274a", 0)
var stopId = $feature ["stop_id"]
var startOfDayTime </ Span > < Span Class= „“ Style= „ Color:#981a1a“ >=< / Span > < Span Class= „“ Style= „ Color:#000000“ >Date </ Span >( < Span Class= „“ Style= „ Color:#000000“ >Year </ Span >( < Span Class= „“ Style= „ Color:#000000“ >Now </ Span >() ), < Span Class= „“ Style= „ Color:#000000“ >Month </ Span >( < Span Class= „“ Style= „ Color:#000000“ >Now </ Span >() ), < Span Class= „“ Style= „ Color:#000000“ >Day </ Span >( < Span Class= „“ Style= „ Color:#000000“ >Now </ Span >() ), < Span Class= „“ Style= „ Color:#116644“ >0 </ Span >, < Span Class= „“ Style= „ Color:#116644“ >0 </ Span >, < Span Class= „“ Style= „ Color:#116644“ >0 </ Span >)</ Span >
< Span Style= „Padding-Right: 0.1px;">< Span Class=„“Style=„Color:#aa5500“>//sekundy uplynulé od začátku dne</ Span >
< Span Style=„Padding-Right: 0.1px;">< Span Class=„“Style=„Color:#770088“>var </ Span >< Span Class=„“Style=„Color:#0000ff“>secondsElapsed </ Span >< Span Class=„“Style=„Color:#981a1a“>= </ Span >< Span Class=„“Style=„Color:#000000“>DateDiff </ Span >( < Span Class=„“Style=„Color:#000000“>Now </ Span >( ), < Span Class=„“Style=„Color:#000000“>startOfDayTime </ Span >, < Span Class=„“Style=„Color:#aa1111“>'seconds'</ Span >)</ Span >
< Span Style= popupResult += Left(f.arrival_time, 5) + " - " + f.route_long_name +
When(f.route_type == 712, Concatenate(" (",f.trip_headsign,")"), Concatenate(" (",f.route_short_name,")")) +
When(f.wheelchair_accessible == 1 && f.bikes_allowed == 1, " - 
",
f.wheelchair_accessible == 1 && f.bikes_allowed ->
class="">Na zdraví! - <\/SPAN>Gee Fernando<\/SPAN><\/A><\/SPAN><\/STRONG><\/SPAN><\/P><\/BODY><\/HTML>