<\/HEAD>
Statische bustijden (<\/SPAN>GTFS<\/A><\/SPAN>) kunnen niet op tegen realtime businformatie (<\/SPAN>GTFS-realtime<\/A><\/SPAN>). Maar dat betekent niet dat je genoegen moet nemen met statische visualisatietechnieken.<\/SPAN><\/P>In deze blog laat ik zien hoe je een beetje creatief kunt zijn en je statische dienstregelingen kunt laten zingen en bewegen met Arcade. En je zult willen zingen: <\/SPAN>de wielen van de bus draaien rond en rond<\/SPAN><\/EM><\/SPAN><\/STRONG><\/SPAN> 
<\/SPAN><\/P>
<\/SPAN><\/P>Selecteer een link hieronder om de webkaart te bekijken die bij deze GIF hoort.<\/SPAN><\/P>Map Viewer Beta<\/SPAN><\/STRONG><\/SPAN><\/A><\/SPAN><\/P><\/LI>Map Viewer (classic)<\/SPAN><\/A><\/SPAN><\/P><\/LI><\/UL>De <\/SPAN>GIF<\/SPAN><\/A><\/SPAN> en <\/SPAN>webkaart<\/SPAN><\/A><\/SPAN> tonen pop-ups van <\/SPAN>aanstaande bussen< \/SPAN >< \/STRONG >< \/SPAN >< SPAN CLASS = " " > en die < \/span >< span CLASS = " " STYLE = "; color : #8b0000 ; " >< strong >< span CLASS = " " STYLE = " color : inherit ; " > net gemist < \/span >< \/strong >< \/span > . Dit zou handig zijn voor busreizigers om te begrijpen welke diensten beschikbaar zijn op een bepaalde datum en tijdstip.< \/span >< span CLASS = " " > < \/span >< span CLASS = " " > We leren hoe we deze pop-upweergaven kunnen maken vanuit een < \/span >< span CLASS = " " >< a HREF = " https : \/ \/ developers.google.com \/ transit \/ gtfs \/ reference " STYLE = " color : #4183c4 ; " REL = " nofollow noopener noreferrer " TARGET = " _blank " >< span CLASS = " " > GTFS feed < \/span >< \/a >< \/span > . Gevolgd door hoe je deze oplossing kunt uitbreiden naar een < \/span >< span CLASS = " " >< strong >< span CLASS = " " >< a HREF = " https : \/ \/ esriau.maps.arcgis.com \/ apps \/ Nearby \/ index.html ? appid=9a85f5e143774ca6b884656bf4432acc " STYLE = " color : #4183c4 ; " REL = " nofollow noopener noreferrer " TARGET = " _blank " >< span CLASS = " " > mobielvriendelijke app < \/span >< \/a >< \/span >< \/strong >< \/span > , waar reizigers deze informatie onderweg kunnen raadplegen < \/span >< \/p >< blockquote >< h2 CLASS = " " STYLE = " color : #333333 ; border-bottom : 1px solid #eeeeee ; font-weight : bold ; font-size : 1.75em ; margin-top : 1rem ; margin-bottom : 1rem ; padding-bottom : 0.3em ; " ID = " toc-hId-1824669699 " ID = " toc-hId-1824669699 " >< span CLASS = " " >< img CLASS = " jive_emoji " SRC = " https : \/ \/ community.esri.com \/ images \/ emojis \/ 1f68f.png " /> Meer over GTFS < \/span >< h2 >< p CLASS = " " STYLE = " color : #333333 ; margin : 0.8em 0px ; " >< span CLASS = " " > Een < a HREF = " https : \/ \/ developers.google.com \/ transit \/ gtfs \/ reference " STYLE = " color : #4183c4 ; " REL = " nofollow noopener noreferrer " TARGET = " _blank " > GTFS feed < /a> is een verzameling tekstbestanden, elk vertelt een verhaal over vervoersinformatie. Voor dit voorbeeld gebruiken we de GTFS-feed voor openbaar vervoer in < a HREF= border-bottom: 1px solid #eeeeee; font-weight: bold; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; padding-bottom: 0.3em;" id="toc-hId-1015323073" id="toc-hId-1015323073">
Build expressions (hosted table)Je hebt misschien gemerkt aan het model dat gebruikt wordt voor de hosted table, dat ik een extra veld heb gemaakt arrivalSeconds om de arrival_time van bussen te berekenen van hh:mm:ss string type naar een number (seconden verstreken sinds begin van de dag). Dit is gedaan om de filter query (die we later zullen gebruiken) te versnellen zodat alleen features worden teruggegeven die relevant zijn voor het tijdstip van de dag. Zoals je je kunt voorstellen, is het veel sneller om nummers te queryen in vergelijking met het converteren van string types on the fly (vooral bij large datasets).
Converteer arrival_time naar aantal seconden verstreken sinds begin van de dag
//scheid aankomsturen, minuten en seconden in een array
var separateArrival = Split($feature["arrival_time"],":")
//Om uurcijfers groter dan 23 te corrigeren
var fixedHours = When(separateArrival[0] >= 24, separateArrival[0] - 24, separateArrival[0])
//converteer arrival_time van 'String' naar 'Date' type
//arrival_time naar aantal seconden verstreken sinds begin van de dag
var arrivalSeconds = DateDiff(arrivalTimeAware, startOfDayTime, 'seconds')
return arrivalSeconds
Build expressions (web map)
De volgende expressies gaan ervan uit dat je al bekend bent met
Arcade FeatureSets, en FeatureSetByPortalItem() uitgebracht in Arcade 1.8. Als je jezelf wilt vertrouwd maken met Featuresets, raadpleeg dan deze uitstekende blog geschreven door Paul Barker.
Nadat je de bus stops feature layer aan een webmap hebt toegevoegd, bouw dan de volgende expressie om informatie terug te geven die relevant is voor de aankomende bussen in de komende 60 minuten (3600 seconden).
Expressie voor aankomende bussen in de komende 60 minuten
//query features uit hosted table - 'stopsTimesTripsRoutesCalendar' in ArcGIS Online
//query features from hosted table - 'stopsTimesTripsRoutesCalendar' in ArcGIS Online 0.1px;">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)
//seconden verstreken sinds begin van de dag
var secondsElapsed = DateDiff(Now(), startOfDayTime, 'seconds')
//geef curr_date terug als een geheel getal in het formaat 'YYYYMMDD' #HowItShouldBe
var curr_date = Number(Text(Now(),'YMMDD'))
//filter statement (SQL) - toegang tot variabelen met @
//als je het tijdsinterval wilt wijzigen, verander dan '3600' seconden naar iets anders in de statement - '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 "> // filter de gtfsTable op basis van de filterverklaring </ span > </ span >
< spanclass = " "style = " color
aa5500 "> // orden resultaten op arrivalSeconds in oplopende volgorde </ span > </ span >
var filtered = OrderBy(Filter(gtfsTable, filterStatement), 'arrivalSeconds ASC') </ span >
var popupResult = '' </ span >
var weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] </ span >
// Deze variabele wordt binnen de for-lus gebruikt om te bepalen of een bus operationeel is op een bepaalde weekdag (bijv. retourneert 1 als operationeel, 0 als niet). </ span >
var currWeekdayOpr = weekDays[Weekday(Now())] </ span >
// Itereer over de gefilterde resultaten om gewenste velden in popup te tonen </ span >
for (var f in filtered) { </ span >
if (f[currWeekdayOpr] == 1) { </ span >
popupResult += Left(f.arrival_time, 5) + " - " + f.route_long_name + </ span >
When(f.route_type == 712, Concatenate(" (", f.trip_headsign, ")") , Concatenate(" (", f.route_short_name, ")") ) + </ span >
When(f.wheelchair_accessible == 1 && f.bikes_allowed == 1, " - ", </ span >
f.wheelchair_accessible == 1 && f.bikes_allowed == 0, " - ", </ span >
f.wheelchair_accessible == 0 && f.bikes_allowed == 1," -
","") + TextFormatting.NewLine + TextFormatting.NewLine
} anders{
popupResult += ""
}
}
IIF(IsEmpty(popupResult), "Geen aankomende bussen in het volgende uur" + TextFormatting.NewLine + TextFormatting.NewLine, popupResult)
Je kunt ook een vergelijkbare expressie gebruiken met een iets aangepaste filterStatement om bussen te queryen die in de laatste x minuten zijn vertrokken. De onderstaande verklaring queryt bussen die in de laatste 20 minuten (1.200 seconden) zijn vertrokken.
var filterStatement = 'arrivalSeconds >= (@secondsElapsed - 1200) AND arrivalSeconds < @secondsElapsed AND stop_id = @stopId AND @curr_date >= start_date AND @curr_date <= end_date'</span>
Volledige expressie voor bussen die in de laatste 20 minuten zijn vertrokken //query functies uit gehoste tabel - 'stopsTimesTripsRoutesCalendar' in ArcGIS Online
var portal = Portal ("
https://www.arcgis.com" )
var gtfsTable = 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 == 0 , " - " ,
& nbsp ; & nbsp ; & nbsp ; & nbsp ;< spanclass = \ " \ "style = \ " color

0 0 0 0 0 0 ; \ " > f </ span > . < spanclass = \ " \ "style = \ " color

0 0 0 0 0 0 ; \ " > wheelchair_accessible </ span > < spanclass = \ " \ "style = \ " color

9 8 1 a 1 a ; \ " > == </ span > < spanclass = \ " \ "style = \ " color

1 1 6 6 4 ; \ " > 0 </ span > < spanclass = \ " \ "style = \ " color

9 8 1 a 1 a ; \ " > && </ span > < spanclass = \ " \ "style = \ " color

0 0 0 0 0 0 ; \ " > f </ span > . < spanclass = \ " \ "style = \ " color

0 0 0 0 0 0 ; \ " > bikes_allowed </ span > < spanclass = \ " \ "style = \ " color

9 8 1 a 1 a ; \ " > == </ span > < spanclass = \ " \ "style = \ " color

11 ... class="">Proost! - <\/SPAN>
Gee Fernando<\/SPAN><\/A><\/SPAN><\/STRONG><\/SPAN><\/P><\/BODY><\/HTML>