{"id":261312,"date":"2018-07-01T14:20:46","date_gmt":"2018-07-01T21:20:46","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=261312"},"modified":"2021-11-11T15:47:17","modified_gmt":"2021-11-11T23:47:17","slug":"play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro","title":{"rendered":"Play back flight data using time slider and query layer in ArcGIS Pro"},"author":5971,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[22941],"tags":[146902,145432,28041,25511,27591],"industry":[],"product":[36561],"class_list":["post-261312","blog","type-blog","status-publish","format-standard","hentry","category-mapping","tag-archived","tag-query-layer","tag-time","tag-time-slider","tag-time-aware","product-arcgis-pro"],"acf":{"short_description":"This article shows how a query layer with database functions can used to replay archived location data collected at irregular intervals.","flexible_content":[{"acf_fc_layout":"content","content":"<h2><strong>The Problem<\/strong><\/h2>\n<p>Just the other day, I was presented with this problem by a colleague of mine. He had a feature layer with 24 hours worth of archived flight data off an airport &#8211; where each feature represents a location of a flight at the time it was broadcast by the plane. In addition to location and timestamp, they have other attributes including an identifier &#8211; all features with the same identifier belongs to a single flight.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262222 \" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/Flight_AttrTable_ENY4095.gif\" alt=\"\" width=\"527\" height=\"150\" \/><\/p>\n<p>He was trying to replay a flight path using time slider in ArcGIS Pro, basically wanted to show the last known location of a flight at any given time.\u00a0In that process, he ran into some issues where in some cases flight locations do not show up on the map and some other cases more than one locations are displayed for the same flight. The problem can be seen in the animation below.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":261702,"id":261702,"title":"FlightTrack_Animation_Problem_with_timeslider","filename":"FlightTrack_Animation_Problem_with_timeslider.gif","filesize":30030,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\/flighttrack_animation_problem_with_timeslider","alt":"","author":"5971","description":"","caption":"","name":"flighttrack_animation_problem_with_timeslider","status":"inherit","uploaded_to":261312,"date":"2018-06-30 04:25:54","modified":"2018-06-30 04:25:54","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":772,"height":475,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","thumbnail-width":213,"thumbnail-height":131,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","medium-width":424,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","medium_large-width":768,"medium_large-height":473,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","large-width":772,"large-height":475,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","1536x1536-width":772,"1536x1536-height":475,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","2048x2048-width":772,"2048x2048-height":475,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","card_image-width":756,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_with_timeslider.gif","wide_image-width":772,"wide_image-height":475}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2><strong>Why?<\/strong><\/h2>\n<p>To understand why this happens, you need to understand two things:<\/p>\n<ol>\n<li>Time slider&#8217;s behavior: when you play back a time slider, it moves the time window by a given time step. These two values are <strong>constant<\/strong> for the duration of a play back, and they are set by users.<\/li>\n<li>Nature of this type of time aware data: data like flight log are usually transmitted and recorded at <strong>irregular<\/strong> interval. See the attribute table above and you will notice that time differences between those features are not constant &#8211; they are about, but not exactly, 1 minute apart.<\/li>\n<\/ol>\n<p>Since the time window is constant for the duration of the time slider play back but the time difference between those recorded features are not constant, you will run into these scenarios where there are more than one flight locations shown or nothing shown at all.<\/p>\n<p>For example, if I set the Start time of the time slider to 6\/27\/2018 2:29:30 PM\u00a0and Time Span to 1 minute and then play it, you will see that the plane is disappeared on the map the next minute.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262272\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/TimeStart_Span-1.gif\" alt=\"\" width=\"182\" height=\"51\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-262242 alignnone\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_missing_plane.gif\" alt=\"\" width=\"469\" height=\"263\" \/><\/p>\n<p>This problem can be resolved by increasing the time span.<\/p>\n<p>Let&#8217;s\u00a0 set the Time Span to 1.5 minute and you will see it works until 6\/27\/2018 2:31:30 PM when\u00a02 locations appear on the map.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262282 size-full\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Problem_multiple_plane-1.gif\" alt=\"\" width=\"469\" height=\"263\" \/><\/p>\n<p>So, increasing the time span resolves my first plane-not-showing problem, but presents me with another.<\/p>\n<p>If there was a way to show <span style=\"text-decoration: underline\">only the latest plane location,<\/span> out of those two during that time duration, then that would solve my entire problem!! Therefore, in short, doing the following two thing should work as the solution:<\/p>\n<ol>\n<li>Make the time span large enough to avoid any gap (<em>already done; checked<\/em>)<\/li>\n<li>In case of multiple locations, pick the latest one. (<em>let&#8217;s find out how in the next section<\/em>)<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<h2><strong>Solutions<\/strong><\/h2>\n<p>In theory, the solution to 2nd problem mention above should be simple, right? All I need to do is sort those locations using their timestamp in descending order and pick the top\/first one.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262302\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Problem_multiple_plane_table.gif\" alt=\"\" width=\"354\" height=\"63\" \/><\/p>\n<p>How can this be achieved without any manual intervention?<\/p>\n<p>As we know, sorting rows in specific order and picking the top one is something that can easily be done with SQL queries at any database.<\/p>\n<p>But how can I create a layer based on a SQL query in ArcGIS Pro? The answer is <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/mapping\/layer-properties\/what-is-a-query-layer-.htm\">query layer<\/a>.<\/p>\n<p>A query layer is a very powerful tool that allows you to use a sql statement as a source of a feature layer; as the map gets refreshed, the sql statement gets pushed to the database; it gets evaluated at the database level and results are returned to ArcGIS Pro. A SQL statement, that defines a query layer, could be as simple as <code>SELECT * FROM aTable1<\/code>\u00a0or very complex with multiple joins and may even contain spatial operations.<\/p>\n<p><strong>Note<\/strong>: <em>Query layers only work against enterprise databases, does not work with FileGDB or any file based datasources such as shapefile, etc.\u00a0For this blog, I have used SQL Server as my backend database and SQL statements contains some functions that are specific to SQL Server. Similar solution should be available for other databases as well to achieve the same goal.<\/em><\/p>\n"},{"acf_fc_layout":"content","content":"<h3>Solution #1: Use SQL Server <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/queries\/top-transact-sql?view=sql-server-2017\">TOP *<\/a>\u00a0for single flight path:<\/h3>\n<p>If I want to replay only a single flight, it works fine and it is the simplest solution.<\/p>\n<p>A sql like the following will do the job just fine.<\/p>\n<blockquote><p>SELECT TOP 1 * FROM FlightLog WHERE ident = &#8216;ENY4095&#8217; and (clock &gt;= &#8216;2018-06-27 14:31:30&#8217; and clock &lt;= &#8216;2018-06-27 14:33:00&#8217;)\u00a0ORDER BY clock DESC<\/p><\/blockquote>\n<p>So, I created a query layer following steps from &#8216;<a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/mapping\/layer-properties\/creating-a-query-layer.htm\">Create a query layer<\/a>&#8216; help topic and used the above sql as the source. The map shows the correct result now, no duplicate planes in the map.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-262552 aligncenter\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_TOP1.gif\" alt=\"\" width=\"469\" height=\"237\" \/><\/p>\n<p>As you noticed that the time query, <em>i.e. (clock &gt;= &#8216;2018-06-27 14:31:30&#8217; and clock &lt;= &#8216;2018-06-27 14:33:00&#8217;)<\/em>, is hard-coded in the layer source sql statement. Now, I need to make it work like a variable so that these <span style=\"text-decoration: underline\">timestamp values in the where clause<\/span> will be updated based on the Time Slider&#8217;s current time window.<\/p>\n<p>ArcGIS Pro 1.4 introduced\u00a0<a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/mapping\/layer-properties\/define-parameters-in-a-query-layer.htm#GUID-CDEF0CD3-6B41-4F8E-B053-E6045D153EDC\">range parameters<\/a> that can be used exactly for this purpose. Following instructions provided in <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/mapping\/layer-properties\/define-parameters-in-a-query-layer.htm#GUID-CDEF0CD3-6B41-4F8E-B053-E6045D153EDC\">the help<\/a>, I modified my query where the time query is replaced by a range variable &#8211; see<strong> ::r:time<\/strong> in the following sql statement.<\/p>\n<blockquote><p>SELECT TOP 1 * FROM FlightLog WHERE ident = &#8216;ENY4095&#8217; and <strong>::r:time<\/strong> ORDER BY clock DESC<\/p><\/blockquote>\n<p>Here is what the query layer definition looks like:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-262562 aligncenter\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/CreateQueryLayer.gif\" alt=\"\" width=\"573\" height=\"398\" \/><\/p>\n<p>Once I updated my query layer with a range parameter of <strong>Date<\/strong> data type, the layer is made time aware automatically and time slider becomes enabled. Now I can step through the time and see it works as intended i.e. there is (a) no missing plane locations and (b) no multiple plane locations are showing up either.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-262572 aligncenter\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Solution_Top1.gif\" alt=\"\" width=\"469\" height=\"263\" \/><\/p>\n<p><strong>Note<\/strong>: TOP * may not be supported by other databases such as Oracle, PostgreSQL &#8211; instead you can use <em>row limiting clauses<\/em> supported by those databases.<\/p>\n"},{"acf_fc_layout":"content","content":"<h3>Solution #2: Use <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/functions\/rank-transact-sql?view=sql-server-2017\">RANK()<\/a> function for multiple flight paths:<\/h3>\n<p>As far as I know (<em>not being a database expert<\/em>)\u00a0TOP * (or other row limiting clauses) only works with one flight path.<\/p>\n<p>When it comes to replaying multiple flight paths, we need a different solution that will instruct the database to return <span style=\"text-decoration: underline\">the latest location for each flight<\/span>.<\/p>\n<p><em>In database term, it is like:<\/em><\/p>\n<p><em> (a) find all rows matching the time query,<br \/>\n<\/em><em>(b) group them based on unique values from a field,<br \/>\n(c) sort them in descending order by their timestamp and<br \/>\n(d) finally return the first\/top row for each group<\/em>.<\/p>\n<p>Here is how the SQL statement looks (<em>albeit a bit complicated<\/em>) like to accomplish this.<\/p>\n<blockquote><p>SELECT * FROM (SELECT *, <strong>RANK() over (PARTITION BY ident ORDER BY clock DESC) AS r<\/strong> FROM\u00a0FlightLog\u00a0WHERE ::r:time ) a WHERE (r = 1)<\/p><\/blockquote>\n<p>After updating the query layer with this sql statement, the map now shows locations for both flights (#ENY4095 and #RPA3483) that I have stored in my FlightLog table.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-262602 aligncenter\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Solution_Rank_multi_flights.gif\" alt=\"\" width=\"469\" height=\"263\" \/><\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<h2><strong>Going beyond and showing previous locations<\/strong><\/h2>\n<p>It is good that the problem is solved with SQL Server&#8217;s RANK() function. Even better news is that this RANK() function in fact can help solve another issue.<\/p>\n<p>What I want to do now is to draw:<\/p>\n<ul>\n<li>previous locations along the flight path in addition to the latest location,<\/li>\n<li>and drawn previous locations using a different symbol like the map below<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-262762\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_withPrevious_locations.gif\" alt=\"\" width=\"470\" height=\"269\" \/><\/li>\n<\/ul>\n<p>As you noticed what RANK() basically does is that it assigns an integer based ranking value to each row based on the sorting order &#8211; like it is showing in the Rank field in the picture below.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-262772 alignnone\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/AttrTable_Rank.gif\" alt=\"\" width=\"240\" height=\"154\" \/><\/p>\n<p>With that information all I need to do is to add a virtual field which will have &#8216;latest&#8217; keyword for rows with Rank=1 and rest of them will be assigned with &#8216;previous&#8217; keyword.<\/p>\n<p>Doing this is in SQL is not a rocket science either &#8211; SQL Server <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/functions\/logical-functions-iif-transact-sql?view=sql-server-2017\">IIF()<\/a> function is our friend here. So, I (a) included IIF() function in the sql statement from the previous section and (b) removed <strong>(r = 1)<\/strong>\u00a0from the where clause, and it looks like:<\/p>\n<blockquote><p>SELECT *,\u00a0IIF( r = 1, &#8216;latest&#8217;, &#8216;previous&#8217;) as position FROM (SELECT *, RANK() over (PARTITION BY ident ORDER BY clock DESC) AS r FROM\u00a0FlightLog\u00a0WHERE ::r:time ) AS a<\/p><\/blockquote>\n<p>After updating the query layer with this modified sql statement, if you open the attribute table, you will see it now has an addition field named &#8216;Position&#8217; containing either &#8216;latest&#8217; or &#8216;previous&#8217; keywords.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262782\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/AttrTable_Rank_Position.gif\" alt=\"\" width=\"298\" height=\"154\" \/><\/p>\n<p>Next, all I have to do is use values from the &#8216;Position&#8217; field to symbolize those locations differently. For that purpose I assigned a Unique Value symbology to this layer.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262792\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/Symbology_Pane_UV.gif\" alt=\"\" width=\"319\" height=\"327\" \/><\/p>\n<p>In addition to symbolizing them differently, I created a label class, with a sql query i.e. <strong>Position = &#8216;latest&#8217;<\/strong>, only to label the latest location with the flight number.<\/p>\n<p>Also, I&#8217;d like to show all flight logged positions since these flights took off, for that I <span style=\"text-decoration: underline\">locked<\/span> (or you can disable) the <strong>Start Time<\/strong> on the <strong>Time<\/strong> tab under <strong>Map<\/strong>.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262812\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/TimeStart_Locked.gif\" alt=\"\" width=\"208\" height=\"25\" \/><\/p>\n<p>Viola! I got a map that I can play back paths for two flights.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":262822,"id":262822,"title":"Flight  track animation for flights from Cleveland, OH","filename":"FlightTrack_Animation_Final.gif","filesize":124532,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\/flighttrack_animation_final","alt":"","author":"5971","description":"","caption":"","name":"flighttrack_animation_final","status":"inherit","uploaded_to":261312,"date":"2018-07-01 00:57:20","modified":"2018-07-01 00:57:54","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":848,"height":528,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","thumbnail-width":213,"thumbnail-height":133,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","medium-width":419,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","medium_large-width":768,"medium_large-height":478,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","large-width":848,"large-height":528,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","1536x1536-width":848,"1536x1536-height":528,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","2048x2048-width":848,"2048x2048-height":528,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","card_image-width":747,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_Final.gif","wide_image-width":848,"wide_image-height":528}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Share the map<\/h2>\n<p>Finally I can share this as a <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/help\/sharing\/overview\/map-image-layer.htm\">Map Image layer<\/a>\u00a0so that it can be consumed by others in a web map or a web application.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-263282 size-full\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/07\/FlightTrack_webmap_final-1.gif\" alt=\"\" width=\"1316\" height=\"653\" \/><\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>Note<\/strong>: I found the following video and site very helpful understanding the RANK function<\/p>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=5-La_uSNkKU\">https:\/\/www.youtube.com\/watch?v=5-La_uSNkKU<\/a><\/li>\n<li><a href=\"http:\/\/codingsight.com\/methods-to-rank-rows-in-sql-server-rownumber-rank-denserank-and-ntile\/\">http:\/\/codingsight.com\/methods-to-rank-rows-in-sql-server-rownumber-rank-denserank-and-ntile\/<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><em><strong>Disclaimer<\/strong>: Data used in this article are downloaded from <a href=\"http:\/\/www.flightaware.com\">http:\/\/FlightAware.com<\/a>. Flight locations were simply copied from flight aware flight log page, pasted in an Excel spreadsheet and after doing some manual formatting etc. on the data, they were imported into a SQL Server table.<\/em><\/p>\n"}],"authors":[{"ID":5971,"user_firstname":"Tanu","user_lastname":"Hoque","nickname":"Tanu Hoque","user_nicename":"mahoque","display_name":"Tanu Hoque","user_email":"ahoque@esri.com","user_url":"","user_registered":"2018-03-02 00:17:50","user_description":"Tanu is a product engineer on Esri Mapping Team focusing on map service, print service, and ArcGIS Pro. He also works on spatio-temporal analysis, spatial aggregation and real-time data. Tanu\u2019s background includes a masters in Urban Planning from University of Akron, Ohio, USA and a bachelor degree from Khulna University, Bangladesh, and worked as GIS Coordinator in City of West Springfield, and GIS Specialist in a hydrology modeling center in Bangladesh before joining Esri.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/12\/tanu-hoque2-e1609364913822-213x200.jpeg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":[{"ID":1392752,"post_author":"5971","post_date":"2021-11-10 13:32:53","post_date_gmt":"2021-11-10 21:32:53","post_content":"","post_title":"Generate trajectories\/paths for hurricanes on the fly from their point locations","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"generate-trajectories-paths-for-hurricanes-on-the-fly-from-their-point-locations","to_ping":"","pinged":"","post_modified":"2021-11-10 13:32:53","post_modified_gmt":"2021-11-10 21:32:53","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1392752","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1391512,"post_author":"5971","post_date":"2021-11-07 22:09:59","post_date_gmt":"2021-11-08 06:09:59","post_content":"","post_title":"Make Aggregation Query Layer - a new geoprocessing tool to compute and view dynamic summary statistics from related records","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"make-aggregation-query-layer-a-new-geoprocessing-tool-to-compute-and-view-dynamic-summary-statistics-from-related-records","to_ping":"","pinged":"","post_modified":"2021-11-07 22:27:26","post_modified_gmt":"2021-11-08 06:27:26","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1391512","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_dark_826x465.gif","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_light_1920x1020.gif"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Play back flight data using time slider and query layer in ArcGIS Pro<\/title>\n<meta name=\"description\" content=\"Replaying archived location of a moving vehicle collected at irregular intervals is somewhat tricky. This article shows how a query layer with database functions can used to achieve this.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Play back flight data using time slider and query layer in ArcGIS Pro\" \/>\n<meta property=\"og:description\" content=\"Replaying archived location of a moving vehicle collected at irregular intervals is somewhat tricky. This article shows how a query layer with database functions can used to achieve this.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-11T23:47:17+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\"},\"author\":{\"name\":\"Tanu Hoque\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/9932dde4f8a6dae58fd1b485d1ddf017\"},\"headline\":\"Play back flight data using time slider and query layer in ArcGIS Pro\",\"datePublished\":\"2018-07-01T21:20:46+00:00\",\"dateModified\":\"2021-11-11T23:47:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\"},\"wordCount\":13,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"archived\",\"query layer\",\"Time\",\"time slider\",\"Time-Aware\"],\"articleSection\":[\"Mapping\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\",\"name\":\"Play back flight data using time slider and query layer in ArcGIS Pro\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2018-07-01T21:20:46+00:00\",\"dateModified\":\"2021-11-11T23:47:17+00:00\",\"description\":\"Replaying archived location of a moving vehicle collected at irregular intervals is somewhat tricky. This article shows how a query layer with database functions can used to achieve this.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Play back flight data using time slider and query layer in ArcGIS Pro\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/9932dde4f8a6dae58fd1b485d1ddf017\",\"name\":\"Tanu Hoque\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/12\/tanu-hoque2-e1609364913822-213x200.jpeg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/12\/tanu-hoque2-e1609364913822-213x200.jpeg\",\"caption\":\"Tanu Hoque\"},\"description\":\"Tanu is a product engineer on Esri Mapping Team focusing on map service, print service, and ArcGIS Pro. He also works on spatio-temporal analysis, spatial aggregation and real-time data. Tanu\u2019s background includes a masters in Urban Planning from University of Akron, Ohio, USA and a bachelor degree from Khulna University, Bangladesh, and worked as GIS Coordinator in City of West Springfield, and GIS Specialist in a hydrology modeling center in Bangladesh before joining Esri.\",\"sameAs\":[\"https:\/\/x.com\/ArcGISPro\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/mahoque\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Play back flight data using time slider and query layer in ArcGIS Pro","description":"Replaying archived location of a moving vehicle collected at irregular intervals is somewhat tricky. This article shows how a query layer with database functions can used to achieve this.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro","og_locale":"en_US","og_type":"article","og_title":"Play back flight data using time slider and query layer in ArcGIS Pro","og_description":"Replaying archived location of a moving vehicle collected at irregular intervals is somewhat tricky. This article shows how a query layer with database functions can used to achieve this.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2021-11-11T23:47:17+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro"},"author":{"name":"Tanu Hoque","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/9932dde4f8a6dae58fd1b485d1ddf017"},"headline":"Play back flight data using time slider and query layer in ArcGIS Pro","datePublished":"2018-07-01T21:20:46+00:00","dateModified":"2021-11-11T23:47:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro"},"wordCount":13,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["archived","query layer","Time","time slider","Time-Aware"],"articleSection":["Mapping"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro","name":"Play back flight data using time slider and query layer in ArcGIS Pro","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2018-07-01T21:20:46+00:00","dateModified":"2021-11-11T23:47:17+00:00","description":"Replaying archived location of a moving vehicle collected at irregular intervals is somewhat tricky. This article shows how a query layer with database functions can used to achieve this.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/mapping\/play-back-flight-data-using-time-slider-and-query-layer-in-arcgis-pro#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Play back flight data using time slider and query layer in ArcGIS Pro"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/9932dde4f8a6dae58fd1b485d1ddf017","name":"Tanu Hoque","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/12\/tanu-hoque2-e1609364913822-213x200.jpeg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/12\/tanu-hoque2-e1609364913822-213x200.jpeg","caption":"Tanu Hoque"},"description":"Tanu is a product engineer on Esri Mapping Team focusing on map service, print service, and ArcGIS Pro. He also works on spatio-temporal analysis, spatial aggregation and real-time data. Tanu\u2019s background includes a masters in Urban Planning from University of Akron, Ohio, USA and a bachelor degree from Khulna University, Bangladesh, and worked as GIS Coordinator in City of West Springfield, and GIS Specialist in a hydrology modeling center in Bangladesh before joining Esri.","sameAs":["https:\/\/x.com\/ArcGISPro"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/mahoque"}]}},"text_date":"July 1, 2018","author_name":"Tanu Hoque","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/mahoque","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/FlightTrack_Animation_light_1920x1020.gif","primary_product":"ArcGIS Pro","tag_data":[{"term_id":146902,"name":"archived","slug":"archived","term_group":0,"term_taxonomy_id":146902,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":145432,"name":"query layer","slug":"query-layer","term_group":0,"term_taxonomy_id":145432,"taxonomy":"post_tag","description":"","parent":0,"count":6,"filter":"raw"},{"term_id":28041,"name":"Time","slug":"time","term_group":0,"term_taxonomy_id":28041,"taxonomy":"post_tag","description":"","parent":0,"count":25,"filter":"raw"},{"term_id":25511,"name":"time slider","slug":"time-slider","term_group":0,"term_taxonomy_id":25511,"taxonomy":"post_tag","description":"","parent":0,"count":7,"filter":"raw"},{"term_id":27591,"name":"Time-Aware","slug":"time-aware","term_group":0,"term_taxonomy_id":27591,"taxonomy":"post_tag","description":"","parent":0,"count":9,"filter":"raw"}],"category_data":[{"term_id":22941,"name":"Mapping","slug":"mapping","term_group":0,"term_taxonomy_id":22941,"taxonomy":"category","description":"","parent":0,"count":2690,"filter":"raw"}],"product_data":[{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2037,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=arcgis-pro","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/261312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/5971"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=261312"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/261312\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=261312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=261312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=261312"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=261312"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=261312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}