I have a moving vehicles graphics layer, and the graphics will disappear when the map gets zoomed in.
The graphics are being created from an esriRequest, and a setInterval is being used to update the vehicle locations every 5 seconds. If the map remains at the home zoom level, the app works as it should. Also, I can zoom all the way out and the graphics remain, but it I zoom into a level between 18-20 the graphic disappears. I have to zoom out a level to have it reappear, but as soon as I zoom back down it disappears again. I’ve also noticed that sometimes that graphics disappear on pan as well.
There is no min or max level set for the vehicle graphics layer so it should be defaulting to 0. I have tried the following:
- Redraw the graphics on zoom,
- Redraw the graphics on zoom-end
- Logged to the console to see if the layer itself was still visible after zoom (it is).
It also does not seem to matter what I set the interval at, the vehicles disappear all at about the same zoom level (18-20) after the first interval has redrawn the vehicles in their new coordinate locations.
I’ve included, what should be all the relevant pieces of code below. I there’s something you think should be there please let me know. I may have forgotten to include it.
I’m using the 3.2 API.
app<SPAN class="punctuation token">.</SPAN>vehiclesGraphicsLayer <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">GraphicsLayer</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN>
id<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"vehiclesGraphicsLayer"</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN>map<SPAN class="punctuation token">.</SPAN><SPAN class="token function">addLayer</SPAN><SPAN class="punctuation token">(</SPAN>app<SPAN class="punctuation token">.</SPAN>vehiclesGraphicsLayer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN>vehiclesGraphicsLayer<SPAN class="punctuation token">.</SPAN><SPAN class="token function">hide</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN>esriVehicleRequest <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">function</SPAN> <SPAN class="punctuation token">(</SPAN>routeID<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">return</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">esriRequest</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN>
url<SPAN class="punctuation token">:</SPAN> <SPAN class="string token"><SPAN>"</SPAN><A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=https%3A%2F%2Fuofu.ridesystems.net%2Fservices%2Fjsonprelay.svc%2FGetMapVehiclePoints" target="_blank">https://uofu.ridesystems.net/services/jsonprelay.svc/GetMapVehiclePoints</A><SPAN>"</SPAN></SPAN><SPAN class="punctuation token">,</SPAN>
content<SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
apikey<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"ride1791"</SPAN><SPAN class="punctuation token">,</SPAN>
routeID<SPAN class="punctuation token">:</SPAN> routeID
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
handleAs<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"json"</SPAN><SPAN class="punctuation token">,</SPAN>
callbackParamName<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"method"</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">then</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN><SPAN class="punctuation token">(</SPAN>data<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">return</SPAN> data<SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
app<SPAN class="punctuation token">.</SPAN>vehicleGraphicFunction<SPAN class="operator token">=</SPAN> <SPAN class="keyword token">function</SPAN> <SPAN class="punctuation token">(</SPAN>data<SPAN class="punctuation token">,</SPAN>graphicsLayer<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">var</SPAN> vehicleObjects <SPAN class="operator token">=</SPAN> data<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>data<SPAN class="punctuation token">.</SPAN>length <SPAN class="operator token">!=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">for</SPAN> <SPAN class="punctuation token">(</SPAN>v <SPAN class="operator token">=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">;</SPAN> v <SPAN class="operator token"><</SPAN> vehicleObjects<SPAN class="punctuation token">.</SPAN>length<SPAN class="punctuation token">;</SPAN> v<SPAN class="operator token">++</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">//Define Attributes</SPAN>
<SPAN class="keyword token">var</SPAN> attributes <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"RouteID"</SPAN><SPAN class="punctuation token">:</SPAN> vehicleObjects<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>RouteID<SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Name"</SPAN><SPAN class="punctuation token">:</SPAN> vehicleObjects<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Speed"</SPAN><SPAN class="punctuation token">:</SPAN> Math<SPAN class="punctuation token">.</SPAN><SPAN class="token function">round</SPAN><SPAN class="punctuation token">(</SPAN>vehicleObjects<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>GroundSpeed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"ID"</SPAN><SPAN class="punctuation token">:</SPAN> vehicleObjects<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>VehicleID<SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Angle"</SPAN><SPAN class="punctuation token">:</SPAN> Math<SPAN class="punctuation token">.</SPAN><SPAN class="token function">abs</SPAN><SPAN class="punctuation token">(</SPAN>vehicleObjects<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Heading<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Create Symbology</SPAN>
<SPAN class="keyword token">var</SPAN> vehiclePNG <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">PictureMarkerSymbol</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN>
url<SPAN class="punctuation token">:</SPAN> app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">getImageURL</SPAN><SPAN class="punctuation token">(</SPAN>attributes<SPAN class="punctuation token">.</SPAN>RouteID<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
height<SPAN class="punctuation token">:</SPAN> <SPAN class="number token">30</SPAN><SPAN class="punctuation token">,</SPAN>
width<SPAN class="punctuation token">:</SPAN> <SPAN class="number token">30</SPAN><SPAN class="punctuation token">,</SPAN>
angle<SPAN class="punctuation token">:</SPAN> attributes<SPAN class="punctuation token">.</SPAN>Angle
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Creat InforTemplate</SPAN>
<SPAN class="keyword token">var</SPAN> infoTemplate <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">InfoTemplate</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"<img src="</SPAN> <SPAN class="operator token">+</SPAN> app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">getImageURL</SPAN><SPAN class="punctuation token">(</SPAN>attributes<SPAN class="punctuation token">.</SPAN>RouteID<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"> <b>"</SPAN> <SPAN class="operator token">+</SPAN> app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">getLineName</SPAN><SPAN class="punctuation token">(</SPAN>attributes<SPAN class="punctuation token">.</SPAN>RouteID<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">" - ${Name}</b>"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Create Graphic</SPAN>
<SPAN class="keyword token">var</SPAN> vehicleGraphic <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Graphic</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Point</SPAN><SPAN class="punctuation token">(</SPAN>vehicleObjects<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Longitude<SPAN class="punctuation token">,</SPAN> vehicleObjects<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Latitude<SPAN class="punctuation token">,</SPAN> app<SPAN class="punctuation token">.</SPAN>map<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> vehiclePNG<SPAN class="punctuation token">,</SPAN> attributes<SPAN class="punctuation token">,</SPAN> infoTemplate<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Add graphics to graphics layer</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN><SPAN class="token function">add</SPAN><SPAN class="punctuation token">(</SPAN>vehicleGraphic<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="comment token">//Create InfoTemplate Content</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">esriVehicleInfoTemplateRequest</SPAN><SPAN class="punctuation token">(</SPAN>attributes<SPAN class="punctuation token">.</SPAN>ID<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">then</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN> <SPAN class="punctuation token">(</SPAN>response<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">for</SPAN> <SPAN class="punctuation token">(</SPAN>i <SPAN class="operator token">=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">;</SPAN> i <SPAN class="operator token"><</SPAN> response<SPAN class="punctuation token">.</SPAN>length<SPAN class="punctuation token">;</SPAN> i<SPAN class="operator token">++</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">for</SPAN> <SPAN class="punctuation token">(</SPAN>gL <SPAN class="operator token">=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">;</SPAN> gL <SPAN class="operator token"><</SPAN> graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">.</SPAN>length<SPAN class="punctuation token">;</SPAN> gL<SPAN class="operator token">++</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>response<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>VehicleID <SPAN class="operator token">==</SPAN> graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>attributes<SPAN class="punctuation token">.</SPAN>ID<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>response<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">.</SPAN>length <SPAN class="operator token">!=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>infoTemplate<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setContent</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"<b>"</SPAN> <SPAN class="operator token">+</SPAN> response<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Description <SPAN class="operator token">+</SPAN> <SPAN class="string token">": </b>"</SPAN> <SPAN class="operator token">+</SPAN> response<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Text <SPAN class="operator token">+</SPAN> <SPAN class="string token">"<br><b>"</SPAN> <SPAN class="operator token">+</SPAN> response<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Description <SPAN class="operator token">+</SPAN> <SPAN class="string token">": </b>"</SPAN> <SPAN class="operator token">+</SPAN> response<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Text<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">else</SPAN> <SPAN class="punctuation token">{</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>infoTemplate<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setContent</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"No Information Available"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
app<SPAN class="punctuation token">.</SPAN>setVehicleInterval <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">function</SPAN><SPAN class="punctuation token">(</SPAN>routeRequestType<SPAN class="punctuation token">,</SPAN> graphicsLayer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">var</SPAN> redVehicleInterval<SPAN class="punctuation token">;</SPAN>
routeRequestType<SPAN class="punctuation token">.</SPAN><SPAN class="token function">then</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN><SPAN class="punctuation token">(</SPAN>vehicleResponse<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">//For each response returned from esriRequest</SPAN>
<SPAN class="keyword token">for</SPAN> <SPAN class="punctuation token">(</SPAN>i<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">;</SPAN> i <SPAN class="operator token"><</SPAN> vehicleResponse<SPAN class="punctuation token">.</SPAN>length<SPAN class="punctuation token">;</SPAN> i<SPAN class="operator token">++</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">//loop through the graphics in the gL to find the graphic that shares the same vehicleID</SPAN>
<SPAN class="comment token">//if the vehicleID equals the gL attribute value then update the XY coordinates</SPAN>
<SPAN class="keyword token">for</SPAN> <SPAN class="punctuation token">(</SPAN>gL<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">;</SPAN> gL <SPAN class="operator token"><</SPAN> graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">.</SPAN>length<SPAN class="punctuation token">;</SPAN> gL<SPAN class="operator token">++</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>attributes<SPAN class="punctuation token">.</SPAN>ID <SPAN class="operator token">===</SPAN> vehicleResponse<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>VehicleID<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>geometry<SPAN class="punctuation token">.</SPAN><SPAN class="token function">update</SPAN><SPAN class="punctuation token">(</SPAN>vehicleResponse<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Longitude<SPAN class="punctuation token">,</SPAN> vehicleResponse<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Latitude<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>attributes<SPAN class="punctuation token">.</SPAN>Speed <SPAN class="operator token">=</SPAN> vehicleResponse<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>GroundSpeed<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>vehicleResponse<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>GroundSpeed <SPAN class="operator token">></SPAN> <SPAN class="number token">1.0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>symbol<SPAN class="punctuation token">.</SPAN>url <SPAN class="operator token">=</SPAN> app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">getImageURL</SPAN><SPAN class="punctuation token">(</SPAN>graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>attributes<SPAN class="punctuation token">.</SPAN>RouteID<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>symbol<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setAngle</SPAN><SPAN class="punctuation token">(</SPAN>vehicleResponse<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Heading<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">else</SPAN> <SPAN class="punctuation token">{</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>symbol<SPAN class="punctuation token">.</SPAN>url <SPAN class="operator token">=</SPAN> app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">getStopImageURL</SPAN><SPAN class="punctuation token">(</SPAN>graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>attributes<SPAN class="punctuation token">.</SPAN>RouteID<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>gL<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>symbol<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setAngle</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">90.0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">esriVehicleInfoTemplateRequest</SPAN><SPAN class="punctuation token">(</SPAN>vehicleResponse<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>VehicleID<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">then</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN><SPAN class="punctuation token">(</SPAN>templateResponse<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">//returns vehicle route estimates for that specific vehicle ID</SPAN>
<SPAN class="comment token">//Update the infoTemplate content with the newly retrieved content</SPAN>
<SPAN class="comment token">//console.log(templateResponse);</SPAN>
<SPAN class="keyword token">for</SPAN><SPAN class="punctuation token">(</SPAN>tR <SPAN class="operator token">=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">;</SPAN> tR <SPAN class="operator token"><</SPAN> templateResponse<SPAN class="punctuation token">.</SPAN>length<SPAN class="punctuation token">;</SPAN> tR<SPAN class="operator token">++</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">for</SPAN><SPAN class="punctuation token">(</SPAN>l<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">;</SPAN> l <SPAN class="operator token"><</SPAN> graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">.</SPAN>length<SPAN class="punctuation token">;</SPAN> l<SPAN class="operator token">++</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>l<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>attributes<SPAN class="punctuation token">.</SPAN>ID <SPAN class="operator token">==</SPAN> templateResponse<SPAN class="punctuation token">[</SPAN>tR<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>VehicleID<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>templateResponse<SPAN class="punctuation token">[</SPAN>tR<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">.</SPAN>length <SPAN class="operator token">!=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>l<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>infoTemplate<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setContent</SPAN><SPAN class="punctuation token">(</SPAN>
<SPAN class="string token">"<b>"</SPAN><SPAN class="operator token">+</SPAN>templateResponse<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Description<SPAN class="operator token">+</SPAN><SPAN class="string token">": </b>"</SPAN><SPAN class="operator token">+</SPAN>templateResponse<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Text
<SPAN class="operator token">+</SPAN><SPAN class="string token">"<br><b>"</SPAN><SPAN class="operator token">+</SPAN>templateResponse<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Description <SPAN class="operator token">+</SPAN><SPAN class="string token">": </b>"</SPAN><SPAN class="operator token">+</SPAN>templateResponse<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Estimates<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>Text<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">{</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN>graphics<SPAN class="punctuation token">[</SPAN>l<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>infoTemplate<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setContent</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"No Information Available"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
graphicsLayer<SPAN class="punctuation token">.</SPAN><SPAN class="token function">redraw</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Shuttle switches are part of a layer visibility switch function</SPAN>
<SPAN class="comment token">//I have only included this case here to limit unnecessary code</SPAN>
<SPAN class="keyword token">case</SPAN> <SPAN class="string token">"redShuttleSwitch"</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>state <SPAN class="operator token">===</SPAN> <SPAN class="string token">"on"</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">//Turn off All Active Shuttles if its currently toggled on</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">switchLogic</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Request Vehicle Locations</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">esriVehicleRequest</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">then</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN> <SPAN class="punctuation token">(</SPAN>vehicleResponse<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">vehicleGraphicFunction</SPAN><SPAN class="punctuation token">(</SPAN>vehicleResponse<SPAN class="punctuation token">,</SPAN> app<SPAN class="punctuation token">.</SPAN>vehiclesGraphicsLayer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">showGraphicsLayer</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'vehiclesGraphicsLayer'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Request Stops</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">esriStopRequest</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">then</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN> <SPAN class="punctuation token">(</SPAN>stopResponse<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">stopsGraphic</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Color</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">255</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">15</SPAN><SPAN class="punctuation token">,</SPAN> stopResponse<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">showGraphicsLayer</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'stopsGraphicsLayer'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Request Route</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">esriRouteRequest</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">then</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN> <SPAN class="punctuation token">(</SPAN>routeResponse<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">routesGraphicFunction</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">15</SPAN><SPAN class="punctuation token">,</SPAN> routeResponse<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">showGraphicsLayer</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'routesGraphicsLayer'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Update vehicle positions and infotemplates</SPAN>
redVehicleInterval <SPAN class="operator token">=</SPAN> <SPAN class="token function">setInterval</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setVehicleInterval</SPAN><SPAN class="punctuation token">(</SPAN>app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">esriVehicleRequest</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> app<SPAN class="punctuation token">.</SPAN>vehiclesGraphicsLayer<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5000</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">//Update Stops InfoTemplate</SPAN>
redStopInterval <SPAN class="operator token">=</SPAN> <SPAN class="token function">setInterval</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">function</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setStopInterval</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">30000</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">else</SPAN> <SPAN class="punctuation token">{</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">clearIntervalCounter</SPAN><SPAN class="punctuation token">(</SPAN>redVehicleInterval<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">clearIntervalCounter</SPAN><SPAN class="punctuation token">(</SPAN>redStopInterval<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">removeGraphic</SPAN><SPAN class="punctuation token">(</SPAN>app<SPAN class="punctuation token">.</SPAN>routesGraphicsLayer<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">removeGraphic</SPAN><SPAN class="punctuation token">(</SPAN>app<SPAN class="punctuation token">.</SPAN>stopsGraphicsLayer<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
app<SPAN class="punctuation token">.</SPAN><SPAN class="token function">removeGraphic</SPAN><SPAN class="punctuation token">(</SPAN>app<SPAN class="punctuation token">.</SPAN>vehiclesGraphicsLayer<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">15</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>