{"id":2979148,"date":"2026-08-27T01:05:12","date_gmt":"2026-08-27T08:05:12","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2979148"},"modified":"2026-08-31T07:35:15","modified_gmt":"2026-08-31T14:35:15","slug":"4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2","title":{"rendered":"Update a 4D simulation with a scene layer and hosted 3D object &#8211; Part 2"},"author":166382,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771,615021],"tags":[781200,30371,760762,176662],"industry":[],"product":[36551,36561],"class_list":["post-2979148","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","category-aec","tag-4d","tag-bim","tag-ifc","tag-revit","product-arcgis-online","product-arcgis-pro"],"acf":{"short_description":"4D simulation integrates time\u2011based data into a\u00a0 BIM, transforming a static 3D model into a dynamic representation of the construction process","flexible_content":[{"acf_fc_layout":"image","image":{"ID":2981140,"id":2981140,"title":"4D simulation - Construction delay","filename":"4D_Part_2_video.gif","filesize":8130963,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\/4d_part_2_video","alt":"4D simulation - Construction delay","author":"166382","description":"4D simulation - Construction delay","caption":"4D simulation - Construction delay","name":"4d_part_2_video","status":"inherit","uploaded_to":2979148,"date":"2026-08-27 15:57:06","modified":"2026-08-27 15:57:14","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":1280,"height":720,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video.gif","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video.gif","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video.gif","large-width":1280,"large-height":720,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video.gif","1536x1536-width":1280,"1536x1536-height":720,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video.gif","2048x2048-width":1280,"2048x2048-height":720,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video-826x465.gif","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/4D_Part_2_video.gif","wide_image-width":1280,"wide_image-height":720}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>As outlined in <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\">Part 1<\/a> of this blog series, 4D simulation integrates time\u2011based data into a building information model (BIM), transforming a static 3D model into a dynamic representation of the construction process. By linking the model to the project schedule, teams can visualize how activities progress over time and gain deeper insight into sequencing, dependencies, and potential risks.<\/p>\n<p>In this scenario, we focus on a schedule delay caused by a severe weather event. This disruption impacts Phase Two and all subsequent phases, shifting the overall timeline by several weeks. Through the 4D simulation, we can clearly illustrate how this delay propagates through the project and affects downstream activities.<\/p>\n<p><strong>Key points of 4D simulation<\/strong><\/p>\n<ul>\n<li>Improved planning\u20144D simulation turns static schedules into dynamic visuals, helping teams spot sequencing issues and create more accurate timelines.<\/li>\n<li>Better communication\u2014Visual schedules make it easier for all stakeholders to understand the construction process.<\/li>\n<li>Risk mitigation\u2014By simulating activities in advance, teams can detect clashes and conflicts early, reducing rework and delays.<\/li>\n<li>Optimized resources\u2014More accurate sequencing leads to better allocation of labor, equipment, and materials.<\/li>\n<\/ul>\n<p><strong>Before you begin<\/strong><\/p>\n<ul>\n<li>Ensure that all models are already\u00a0<a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/geolocating-a-digital-model-revit-or-ifc-in-arcgis-pro\/\">georeferenced<\/a>.<\/li>\n<\/ul>\n<p><strong>What you need<\/strong><\/p>\n<ul>\n<li>ArcGIS Notebook included with this post<\/li>\n<li>ArcGIS Pro 3.2 or later<\/li>\n<li>ArcGIS Online<\/li>\n<\/ul>\n<p>The core of 4D simulation lies in synchronizing BIM models with the project schedule. By importing detailed 3D models and linking them directly to timeline data, 4D BIM enables a step\u2011by\u2011step visualization of how construction will progress. This alignment ensures that planned activities correspond with actual construction sequences, ultimately improving coordination and overall project efficiency.<\/p>\n"},{"acf_fc_layout":"content","content":"<h2><strong>Updated the 4D simulation with schedule changes manually<\/strong><\/h2>\n"},{"acf_fc_layout":"content","content":"<h3><strong>1. Data preparation<\/strong><\/h3>\n"},{"acf_fc_layout":"content","content":"<ul>\n<li>Start ArcGIS Pro.<\/li>\n<li>Navigate to your portal.\u00a0 Add and open scene created in <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\">Part 1<\/a>.<\/li>\n<\/ul>\n"},{"acf_fc_layout":"content","content":"<h3><strong><em>Repeat this step for each layer.<\/em><\/strong><\/h3>\n"},{"acf_fc_layout":"content","content":"<ul>\n<li>Using the <strong>Add Join<\/strong> geoprocessing tool, join the service to the spreadsheet using Sched_TaskID as the primary key and Task ID on the spreadsheet as foreign key.<\/li>\n<\/ul>\n<p>The schedule coming from the spreadsheet must be formatted so each column represents each of the fields added on the prior step.<\/p>\n<ul>\n<li>Populate the fields with schedule information using the Calculate Fields (multiple) geoprocessing tool.<\/li>\n<\/ul>\n"},{"acf_fc_layout":"content","content":"<h3><strong>2. Rebuild the cache<\/strong><\/h3>\n"},{"acf_fc_layout":"content","content":"<ul>\n<li>Go to ArcGIS Online.<\/li>\n<li>Navigate to the scene that was created in Part 1.<\/li>\n<li>Click the scene.<\/li>\n<li>Navigate to the content section.<\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":2980670,"id":2980670,"title":"content section_WebScene","filename":"content-section_WebScene.png","filesize":88612,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\/content-section_webscene","alt":"","author":"166382","description":"Content section (3D Scene layer)  in AGOL ","caption":"Content section (3D Scene layer)  in AGOL ","name":"content-section_webscene","status":"inherit","uploaded_to":2979148,"date":"2026-08-20 20:44:47","modified":"2026-08-20 20:45:52","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2130,"height":730,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene.png","medium-width":464,"medium-height":159,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene.png","medium_large-width":768,"medium_large-height":263,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene.png","large-width":1920,"large-height":658,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene-1536x526.png","1536x1536-width":1536,"1536x1536-height":526,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene-2048x702.png","2048x2048-width":2048,"2048x2048-height":702,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene-826x283.png","card_image-width":826,"card_image-height":283,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/content-section_WebScene-1920x658.png","wide_image-width":1920,"wide_image-height":658}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h3><em><strong>Repeat the flowing steps for each of the layers.<\/strong><\/em><\/h3>\n"},{"acf_fc_layout":"content","content":"<ul>\n<li>Click the Roof Scene layer.<\/li>\n<li>Click Settings.<\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":2980672,"id":2980672,"title":"Setting_section_webscene","filename":"Setting_section_webscene.png","filesize":22362,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\/setting_section_webscene","alt":"","author":"166382","description":"","caption":"Scene layer - 3D object (hosted) setting section","name":"setting_section_webscene","status":"inherit","uploaded_to":2979148,"date":"2026-08-20 20:50:03","modified":"2026-08-20 20:50:30","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":978,"height":318,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene.png","medium-width":464,"medium-height":151,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene.png","medium_large-width":768,"medium_large-height":250,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene.png","large-width":978,"large-height":318,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene.png","1536x1536-width":978,"1536x1536-height":318,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene.png","2048x2048-width":978,"2048x2048-height":318,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene-826x269.png","card_image-width":826,"card_image-height":269,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Setting_section_webscene.png","wide_image-width":978,"wide_image-height":318}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<ul>\n<li>Click Scene layer \u2013 3D object (hosted).<\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":2980673,"id":2980673,"title":"Scene Layer 3D object hosted - setting","filename":"Scene-Layer-3D-object-hosted-setting.png","filesize":136432,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\/scene-layer-3d-object-hosted-setting","alt":"","author":"166382","description":"","caption":"Scene Layer 3D object hosted - Setting","name":"scene-layer-3d-object-hosted-setting","status":"inherit","uploaded_to":2979148,"date":"2026-08-20 20:53:00","modified":"2026-08-20 20:53:12","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2011,"height":1499,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting.png","medium-width":350,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting.png","medium_large-width":768,"medium_large-height":572,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting.png","large-width":1449,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting-1536x1145.png","1536x1536-width":1536,"1536x1536-height":1145,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting.png","2048x2048-width":2011,"2048x2048-height":1499,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting-624x465.png","card_image-width":624,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Scene-Layer-3D-object-hosted-setting-1449x1080.png","wide_image-width":1449,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<ul>\n<li>Click\u00a0<strong>Rebulid Cache.<\/strong><\/li>\n<li>Select <strong>Full cache<\/strong>.<\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":2980674,"id":2980674,"title":"Full Cache_setting","filename":"Full-Cache_setting.png","filesize":71187,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\/full-cache_setting","alt":"","author":"166382","description":"","caption":"Rebuild the scene layer cache to update any changes made in the feature layer used to publish this scene layer","name":"full-cache_setting","status":"inherit","uploaded_to":2979148,"date":"2026-08-20 20:59:15","modified":"2026-08-20 21:00:08","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1589,"height":760,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting.png","medium-width":464,"medium-height":222,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting.png","medium_large-width":768,"medium_large-height":367,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting.png","large-width":1589,"large-height":760,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting-1536x735.png","1536x1536-width":1536,"1536x1536-height":735,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting.png","2048x2048-width":1589,"2048x2048-height":760,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting-826x395.png","card_image-width":826,"card_image-height":395,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Full-Cache_setting.png","wide_image-width":1589,"wide_image-height":760}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<ul>\n<li>Click Rebuild cache.<\/li>\n<\/ul>\n<p>After the cache has been rebuilt for each of the scene layers, the scene will display the updated 4D simulation.<\/p>\n"},{"acf_fc_layout":"content","content":"<h2><strong>Updated the 4D simulation with schedule changes automatically<\/strong><\/h2>\n"},{"acf_fc_layout":"content","content":"<p>The following code shows the workflow updated with the 4D simulation using a Scene layer &#8211; 3D object (hosted) and a construction schedule. This is an overview of the code, and the provided ArcGIS Notebook contains further details and explanations of the code.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"color: #24292e;background: #ffffff;display: block;padding: 1em\">\r\n<span style=\"color: #032f62\">\"\"\"4D BIM Schedule Update\r\nThis notebook pushes schedule updates from an Excel spreadsheet into the hosted feature layers backing a Web Scene, then refreshes the associated Scene Layer caches.\r\n\r\n**Workflow:**\r\n1. Load the updated construction schedule from Excel\r\n2. Connect to ArcGIS Online\r\n3. Read the Web Scene JSON to find all scene layers it contains\r\n4. For each scene layer, discover its associated feature layer via `related_items`\r\n5. Update feature layer attributes (start date, end date, duration)\r\n6. Refresh the scene layer cache\r\n\"\"\"<\/span>\r\n\r\n<span style=\"color: #d73a49\">import<\/span> re\r\n<span style=\"color: #d73a49\">import<\/span> datetime <span style=\"color: #d73a49\">as<\/span> dt\r\n\r\n<span style=\"color: #d73a49\">import<\/span> openpyxl\r\n<span style=\"color: #d73a49\">from<\/span> arcgis.gis <span style=\"color: #d73a49\">import<\/span> GIS\r\n<span style=\"color: #d73a49\">from<\/span> arcgis.features <span style=\"color: #d73a49\">import<\/span> FeatureLayer\r\n<span style=\"color: #d73a49\">from<\/span> arcgis.layers <span style=\"color: #d73a49\">import<\/span> SceneLayer\r\n\r\n<span style=\"color: #6a737d\"># User Configuration\u00b6<\/span>\r\n<span style=\"color: #6a737d\"># Set the path to your Excel schedule and the Web Scene item id.<\/span>\r\n\r\n\r\n<span style=\"color: #6a737d\"># Excel schedule file<\/span>\r\nEXCEL_PATH  = <span style=\"color: #032f62\">r\"Schedules\\tower_schedule_updated.xlsx\"<\/span>  <span style=\"color: #6a737d\"># update to your file path<\/span>\r\nSHEET_NAME  = <span style=\"color: #032f62\">\"Construction Schedule\"<\/span>\r\nHEADER_ROW  = <span style=\"color: #005cc5\">4<\/span>   <span style=\"color: #6a737d\"># 1-based row containing column headers<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Web Scene item id on ArcGIS Online<\/span>\r\nWEB_SCENE_ITEM_ID = <span style=\"color: #032f62\">\"your_web_scene_item_id_here\"<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Field Definitions<\/span>\r\n<span style=\"color: #6a737d\"># Column names in the Excel sheet and their corresponding field names on the hosted feature layers.<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Excel column names<\/span>\r\nTASK_ID_COL   = <span style=\"color: #032f62\">\"Task ID\"<\/span>\r\nSTART_DATE_COL = <span style=\"color: #032f62\">\"Start Date\"<\/span>\r\nEND_DATE_COL   = <span style=\"color: #032f62\">\"End Date\"<\/span>\r\nDURATION_COL   = <span style=\"color: #032f62\">\"Duration (d)\"<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Feature layer field names<\/span>\r\nFIELD_TASK_ID    = <span style=\"color: #032f62\">\"Sched_TaskID\"<\/span>\r\nFIELD_START_DATE = <span style=\"color: #032f62\">\"Sched_StartDate\"<\/span>\r\nFIELD_END_DATE   = <span style=\"color: #032f62\">\"Sched_EndDate\"<\/span>\r\n<span style=\"color: #6a737d\"># Duration field name varies per layer \u2014 we search for any field containing \"duration\"<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Rows to skip in the Excel sheet<\/span>\r\nPHASE_HEADER_PATTERN = re.<span style=\"color: #e36209\">compile<\/span>(<span style=\"color: #032f62\">r\"^\\s*\\u25b6\"<\/span>)   <span style=\"color: #6a737d\"># rows starting with \u25b6<\/span>\r\nSKIP_TASK_IDS = {<span style=\"color: #032f62\">\"TOTALS\"<\/span>}\r\n\r\n<span style=\"color: #6a737d\"># Step 1 \u2014 Load Schedule from Excel<\/span>\r\n<span style=\"color: #6a737d\"># Read the Construction Schedule sheet and build a lookup by Task ID.<\/span>\r\n\r\nwb = openpyxl.load_workbook(EXCEL_PATH, data_only=<span style=\"color: #005cc5\">True<\/span>)\r\nws = wb[SHEET_NAME]\r\n\r\n<span style=\"color: #6a737d\"># Read headers from the configured header row<\/span>\r\nheaders = {}\r\n<span style=\"color: #d73a49\">for<\/span> col <span style=\"color: #d73a49\">in<\/span> <span style=\"color: #e36209\">range<\/span>(<span style=\"color: #005cc5\">1<\/span>, ws.max_column + <span style=\"color: #005cc5\">1<\/span>):\r\n    val = ws.cell(row=HEADER_ROW, column=col).value\r\n    <span style=\"color: #d73a49\">if<\/span> val:\r\n        headers[val.strip()] = col\r\n\r\n<span style=\"color: #6a737d\"># Build schedule lookup: {task_id: {start_date, end_date, duration}}<\/span>\r\nschedule = {}\r\n<span style=\"color: #d73a49\">for<\/span> row <span style=\"color: #d73a49\">in<\/span> <span style=\"color: #e36209\">range<\/span>(HEADER_ROW + <span style=\"color: #005cc5\">1<\/span>, ws.max_row + <span style=\"color: #005cc5\">1<\/span>):\r\n    task_id = ws.cell(row=row, column=headers[TASK_ID_COL]).value\r\n    <span style=\"color: #d73a49\">if<\/span> task_id <span style=\"color: #d73a49\">is<\/span> <span style=\"color: #005cc5\">None<\/span>:\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n    task_id = <span style=\"color: #e36209\">str<\/span>(task_id).strip()\r\n    <span style=\"color: #d73a49\">if<\/span> PHASE_HEADER_PATTERN.<span style=\"color: #d73a49\">match<\/span>(task_id) <span style=\"color: #d73a49\">or<\/span> task_id <span style=\"color: #d73a49\">in<\/span> SKIP_TASK_IDS:\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n    schedule[task_id] = {\r\n        <span style=\"color: #032f62\">\"start_date\"<\/span>: ws.cell(row=row, column=headers[START_DATE_COL]).value,\r\n        <span style=\"color: #032f62\">\"end_date\"<\/span>:   ws.cell(row=row, column=headers[END_DATE_COL]).value,\r\n        <span style=\"color: #032f62\">\"duration\"<\/span>:   ws.cell(row=row, column=headers[DURATION_COL]).value,\r\n    }\r\n\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Loaded <span style=\"color: #24292e\">{<span style=\"color: #e36209\">len<\/span>(schedule)}<\/span> task rows from schedule.\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Step 2 \u2014 Connect to ArcGIS Online<\/span>\r\n<span style=\"color: #6a737d\"># Sign in using the active ArcGIS Pro session.<\/span>\r\n\r\ngis = GIS(<span style=\"color: #032f62\"><span data-teams=\"true\">\"pro\", verify_cert=True<\/span><\/span>)\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Connected as: <span style=\"color: #24292e\">{gis.properties.user.username}<\/span>\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Step 3 \u2014 Discover Scene Layers from the Web Scene<\/span>\r\n<span style=\"color: #6a737d\"># Read the Web Scene JSON and extract the scene layer item ids from its operational layers.<\/span>\r\n\r\n<span style=\"color: #d73a49\">def<\/span> <span style=\"color: #6f42c1\">to_epoch_ms<\/span>(value):\r\n    <span style=\"color: #032f62\">\"\"\"Convert a date or datetime to epoch milliseconds (UTC) for AGOL date fields.\"\"\"<\/span>\r\n    <span style=\"color: #d73a49\">if<\/span> value <span style=\"color: #d73a49\">is<\/span> <span style=\"color: #005cc5\">None<\/span>:\r\n        <span style=\"color: #d73a49\">return<\/span> <span style=\"color: #005cc5\">None<\/span>\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #e36209\">isinstance<\/span>(value, dt.datetime):\r\n        d = value\r\n    <span style=\"color: #d73a49\">elif<\/span> <span style=\"color: #e36209\">isinstance<\/span>(value, dt.date):\r\n        d = dt.datetime(value.year, value.month, value.day)\r\n    <span style=\"color: #d73a49\">else<\/span>:\r\n        <span style=\"color: #d73a49\">return<\/span> <span style=\"color: #005cc5\">None<\/span>\r\n    <span style=\"color: #d73a49\">return<\/span> <span style=\"color: #e36209\">int<\/span>(d.replace(tzinfo=dt.timezone.utc).timestamp() * <span style=\"color: #005cc5\">1000<\/span>)\r\n\r\n\r\n<span style=\"color: #6a737d\"># Get the Web Scene item and read its JSON<\/span>\r\nweb_scene_item = gis.content.get(WEB_SCENE_ITEM_ID)\r\nweb_scene_data = web_scene_item.get_data()\r\n\r\n<span style=\"color: #6a737d\"># Extract scene layer item ids from the operational layers<\/span>\r\nscene_layer_items = []\r\n<span style=\"color: #d73a49\">for<\/span> lyr <span style=\"color: #d73a49\">in<\/span> web_scene_data.get(<span style=\"color: #032f62\">\"operationalLayers\"<\/span>, []):\r\n    item_id = lyr.get(<span style=\"color: #032f62\">\"itemId\"<\/span>)\r\n    <span style=\"color: #d73a49\">if<\/span> item_id:\r\n        item = gis.content.get(item_id)\r\n        <span style=\"color: #d73a49\">if<\/span> item <span style=\"color: #d73a49\">and<\/span> item.<span style=\"color: #e36209\">type<\/span> == <span style=\"color: #032f62\">\"Scene Service\"<\/span>:\r\n            scene_layer_items.append(item)\r\n            <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  found scene layer: <span style=\"color: #24292e\">{item.title}<\/span> (<span style=\"color: #24292e\">{item.<span style=\"color: #e36209\">id<\/span>}<\/span>)\"<\/span>)\r\n\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"\\n<span style=\"color: #24292e\">{<span style=\"color: #e36209\">len<\/span>(scene_layer_items)}<\/span> scene layers found in Web Scene.\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Step 4 \u2014 Update Feature Layers &amp; Refresh Caches<\/span>\r\n<span style=\"color: #6a737d\"># For each scene layer, discover its associated feature layer, push the schedule updates, then refresh the scene cache.<\/span>\r\n\r\nsummary = []\r\n\r\n<span style=\"color: #d73a49\">for<\/span> scene_item <span style=\"color: #d73a49\">in<\/span> scene_layer_items:\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"\\n=== <span style=\"color: #24292e\">{scene_item.title}<\/span> ===\"<\/span>)\r\n\r\n    <span style=\"color: #6a737d\"># Discover the associated feature layer<\/span>\r\n    related = scene_item.related_items(rel_type=<span style=\"color: #032f62\">\"Service2Service\"<\/span>, direction=<span style=\"color: #032f62\">\"reverse\"<\/span>)\r\n    fl_item = <span style=\"color: #e36209\">next<\/span>((i <span style=\"color: #d73a49\">for<\/span> i <span style=\"color: #d73a49\">in<\/span> related <span style=\"color: #d73a49\">if<\/span> i.<span style=\"color: #e36209\">type<\/span> == <span style=\"color: #032f62\">\"Feature Service\"<\/span>), <span style=\"color: #005cc5\">None<\/span>)\r\n\r\n    <span style=\"color: #d73a49\">if<\/span> fl_item <span style=\"color: #d73a49\">is<\/span> <span style=\"color: #005cc5\">None<\/span>:\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"  [warn] no associated feature layer found \u2014 skipping\"<\/span>)\r\n        summary.append({<span style=\"color: #032f62\">\"layer\"<\/span>: scene_item.title, <span style=\"color: #032f62\">\"status\"<\/span>: <span style=\"color: #032f62\">\"feature layer not found\"<\/span>})\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  feature layer: <span style=\"color: #24292e\">{fl_item.title}<\/span> (<span style=\"color: #24292e\">{fl_item.<span style=\"color: #e36209\">id<\/span>}<\/span>)\"<\/span>)\r\n    flayer = FeatureLayer.fromitem(fl_item)\r\n    oid_field = flayer.properties.objectIdField\r\n\r\n    <span style=\"color: #6a737d\"># Find the duration field (name varies per layer)<\/span>\r\n    duration_field = <span style=\"color: #e36209\">next<\/span>(\r\n        (f[<span style=\"color: #032f62\">\"name\"<\/span>] <span style=\"color: #d73a49\">for<\/span> f <span style=\"color: #d73a49\">in<\/span> flayer.properties.fields <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #032f62\">\"duration\"<\/span> <span style=\"color: #d73a49\">in<\/span> f[<span style=\"color: #032f62\">\"name\"<\/span>].lower()),\r\n        <span style=\"color: #005cc5\">None<\/span>\r\n    )\r\n    <span style=\"color: #d73a49\">if<\/span> duration_field:\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  duration field: <span style=\"color: #24292e\">{duration_field}<\/span>\"<\/span>)\r\n    <span style=\"color: #d73a49\">else<\/span>:\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"  [warn] no duration field found \u2014 duration will be skipped\"<\/span>)\r\n\r\n    <span style=\"color: #6a737d\"># Query all features and build updates<\/span>\r\n    fset = flayer.query(where=<span style=\"color: #032f62\">\"1=1\"<\/span>, out_fields=[oid_field, FIELD_TASK_ID], return_geometry=<span style=\"color: #005cc5\">False<\/span>)\r\n    updates = []\r\n    <span style=\"color: #d73a49\">for<\/span> feature <span style=\"color: #d73a49\">in<\/span> fset.features:\r\n        task_id = feature.attributes.get(FIELD_TASK_ID)\r\n        <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> task_id:\r\n            <span style=\"color: #d73a49\">continue<\/span>\r\n        row = schedule.get(<span style=\"color: #e36209\">str<\/span>(task_id).strip())\r\n        <span style=\"color: #d73a49\">if<\/span> row <span style=\"color: #d73a49\">is<\/span> <span style=\"color: #005cc5\">None<\/span>:\r\n            <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n        attrs = {\r\n            oid_field:        feature.attributes[oid_field],\r\n            FIELD_START_DATE: to_epoch_ms(row[<span style=\"color: #032f62\">\"start_date\"<\/span>]),\r\n            FIELD_END_DATE:   to_epoch_ms(row[<span style=\"color: #032f62\">\"end_date\"<\/span>]),\r\n        }\r\n        <span style=\"color: #d73a49\">if<\/span> duration_field <span style=\"color: #d73a49\">and<\/span> row[<span style=\"color: #032f62\">\"duration\"<\/span>] <span style=\"color: #d73a49\">is<\/span> <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #005cc5\">None<\/span>:\r\n            attrs[duration_field] = row[<span style=\"color: #032f62\">\"duration\"<\/span>]\r\n        updates.append({<span style=\"color: #032f62\">\"attributes\"<\/span>: attrs})\r\n\r\n    <span style=\"color: #d73a49\">if<\/span> updates:\r\n        flayer.edit_features(updates=updates)\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  updated <span style=\"color: #24292e\">{<span style=\"color: #e36209\">len<\/span>(updates)}<\/span> features\"<\/span>)\r\n    <span style=\"color: #d73a49\">else<\/span>:\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"  [warn] no matching records found\"<\/span>)\r\n\r\n    <span style=\"color: #6a737d\"># Rebuild the scene layer cache<\/span>\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"  rebuilding scene layer cache...\"<\/span>)\r\n    scene_layer = SceneLayer(scene_item.url, gis=gis)\r\n    cache_job = scene_layer.manager.rebuild_cache(layers=<span style=\"color: #005cc5\">0<\/span>)\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  cache rebuild submitted: <span style=\"color: #24292e\">{cache_job}<\/span>\"<\/span>)\r\n\r\n    <span style=\"color: #6a737d\"># Poll for completion<\/span>\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #e36209\">hasattr<\/span>(cache_job, <span style=\"color: #032f62\">'url'<\/span>):\r\n        job_id = cache_job.url.rsplit(<span style=\"color: #032f62\">\"\/\"<\/span>, <span style=\"color: #005cc5\">1<\/span>)[-<span style=\"color: #005cc5\">1<\/span>]\r\n        <span style=\"color: #d73a49\">import<\/span> time\r\n        <span style=\"color: #d73a49\">for<\/span> _ <span style=\"color: #d73a49\">in<\/span> <span style=\"color: #e36209\">range<\/span>(<span style=\"color: #005cc5\">60<\/span>):  <span style=\"color: #6a737d\"># up to 10 minutes<\/span>\r\n            detail = gis._con.get(<span style=\"color: #032f62\">f\"<span style=\"color: #24292e\">{scene_layer.manager.url}<\/span>\/jobs\/<span style=\"color: #24292e\">{job_id}<\/span>\"<\/span>, {<span style=\"color: #032f62\">\"f\"<\/span>: <span style=\"color: #032f62\">\"json\"<\/span>})\r\n            status = detail.get(<span style=\"color: #032f62\">\"status\"<\/span>, <span style=\"color: #032f62\">\"unknown\"<\/span>)\r\n            <span style=\"color: #d73a49\">if<\/span> status <span style=\"color: #d73a49\">in<\/span> (<span style=\"color: #032f62\">\"Completed\"<\/span>, <span style=\"color: #032f62\">\"Failed\"<\/span>):\r\n                <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  cache rebuild <span style=\"color: #24292e\">{status}<\/span>\"<\/span>)\r\n                <span style=\"color: #d73a49\">break<\/span>\r\n            time.sleep(<span style=\"color: #005cc5\">10<\/span>)\r\n        <span style=\"color: #d73a49\">else<\/span>:\r\n            status = <span style=\"color: #032f62\">\"timeout\"<\/span>\r\n            <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"  cache rebuild timed out (10 min)\"<\/span>)\r\n    <span style=\"color: #d73a49\">else<\/span>:\r\n        status = <span style=\"color: #e36209\">str<\/span>(cache_job)\r\n\r\n    summary.append({<span style=\"color: #032f62\">\"layer\"<\/span>: scene_item.title, <span style=\"color: #032f62\">\"status\"<\/span>: <span style=\"color: #032f62\">\"ok\"<\/span>, <span style=\"color: #032f62\">\"updates\"<\/span>: <span style=\"color: #e36209\">len<\/span>(updates), <span style=\"color: #032f62\">\"cache\"<\/span>: status})\r\n    \r\n<span style=\"color: #6a737d\"># Step 5 \u2014 Update Web Scene Time Slider<\/span>\r\n<span style=\"color: #6a737d\"># Patch the Web Scene JSON with a time slider reflecting the schedule's date range.<\/span>\r\n\r\n<span style=\"color: #d73a49\">import<\/span> json\r\n\r\n<span style=\"color: #6a737d\"># Compute time range from schedule<\/span>\r\nall_starts = [v[<span style=\"color: #032f62\">\"start_date\"<\/span>] <span style=\"color: #d73a49\">for<\/span> v <span style=\"color: #d73a49\">in<\/span> schedule.values() <span style=\"color: #d73a49\">if<\/span> v.get(<span style=\"color: #032f62\">\"start_date\"<\/span>)]\r\nall_ends   = [v[<span style=\"color: #032f62\">\"end_date\"<\/span>]   <span style=\"color: #d73a49\">for<\/span> v <span style=\"color: #d73a49\">in<\/span> schedule.values() <span style=\"color: #d73a49\">if<\/span> v.get(<span style=\"color: #032f62\">\"end_date\"<\/span>)]\r\nstart_ms = <span style=\"color: #e36209\">int<\/span>(<span style=\"color: #e36209\">min<\/span>(all_starts).timestamp() * <span style=\"color: #005cc5\">1000<\/span>) <span style=\"color: #d73a49\">if<\/span> all_starts <span style=\"color: #d73a49\">else<\/span> <span style=\"color: #005cc5\">0<\/span>\r\nend_ms   = <span style=\"color: #e36209\">int<\/span>(<span style=\"color: #e36209\">max<\/span>(all_ends).timestamp() * <span style=\"color: #005cc5\">1000<\/span>)   <span style=\"color: #d73a49\">if<\/span> all_ends   <span style=\"color: #d73a49\">else<\/span> <span style=\"color: #005cc5\">0<\/span>\r\ntotal_days = (end_ms - start_ms) \/ (<span style=\"color: #005cc5\">1000<\/span> * <span style=\"color: #005cc5\">60<\/span> * <span style=\"color: #005cc5\">60<\/span> * <span style=\"color: #005cc5\">24<\/span>)\r\ninterval_days = <span style=\"color: #e36209\">max<\/span>(<span style=\"color: #005cc5\">1<\/span>, <span style=\"color: #e36209\">int<\/span>(total_days \/ <span style=\"color: #005cc5\">40<\/span>))\r\n\r\n<span style=\"color: #6a737d\"># Patch the web scene JSON<\/span>\r\ndata = web_scene_item.get_data()\r\n\r\ndata[<span style=\"color: #032f62\">\"widgets\"<\/span>] = {\r\n    <span style=\"color: #032f62\">\"timeSlider\"<\/span>: {\r\n        <span style=\"color: #032f62\">\"properties\"<\/span>: {\r\n            <span style=\"color: #032f62\">\"startTime\"<\/span>: start_ms,\r\n            <span style=\"color: #032f62\">\"endTime\"<\/span>: end_ms,\r\n            <span style=\"color: #032f62\">\"currentTimeExtent\"<\/span>: [<span style=\"color: #005cc5\">None<\/span>, end_ms],\r\n            <span style=\"color: #032f62\">\"thumbCount\"<\/span>: <span style=\"color: #005cc5\">1<\/span>,\r\n            <span style=\"color: #032f62\">\"thumbMovingRate\"<\/span>: <span style=\"color: #005cc5\">300<\/span>,\r\n            <span style=\"color: #032f62\">\"timeStopInterval\"<\/span>: {\r\n                <span style=\"color: #032f62\">\"interval\"<\/span>: interval_days,\r\n                <span style=\"color: #032f62\">\"units\"<\/span>: <span style=\"color: #032f62\">\"esriTimeUnitsDays\"<\/span>\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n<span style=\"color: #d73a49\">if<\/span> <span style=\"color: #032f62\">\"initialState\"<\/span> <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #d73a49\">in<\/span> data:\r\n    data[<span style=\"color: #032f62\">\"initialState\"<\/span>] = {}\r\ndata[<span style=\"color: #032f62\">\"initialState\"<\/span>][<span style=\"color: #032f62\">\"timeExtent\"<\/span>] = [<span style=\"color: #005cc5\">None<\/span>, end_ms]\r\n\r\nweb_scene_item.update(item_properties={}, data=json.dumps(data))\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Time slider updated: <span style=\"color: #24292e\">{<span style=\"color: #e36209\">min<\/span>(all_starts)}<\/span> \u2192 <span style=\"color: #24292e\">{<span style=\"color: #e36209\">max<\/span>(all_ends)}<\/span> (<span style=\"color: #24292e\">{interval_days}<\/span>-day intervals over <span style=\"color: #24292e\">{<span style=\"color: #e36209\">int<\/span>(total_days)}<\/span> days)\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Summary<\/span>\r\n<span style=\"color: #6a737d\"># Review the results for each layer.<\/span>\r\n\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"\\n=== SUMMARY ===\"<\/span>)\r\n<span style=\"color: #d73a49\">for<\/span> entry <span style=\"color: #d73a49\">in<\/span> summary:\r\n    layer  = entry[<span style=\"color: #032f62\">\"layer\"<\/span>]\r\n    status = entry[<span style=\"color: #032f62\">\"status\"<\/span>]\r\n    <span style=\"color: #d73a49\">if<\/span> status != <span style=\"color: #032f62\">\"ok\"<\/span>:\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  <span style=\"color: #24292e\">{layer}<\/span>: <span style=\"color: #24292e\">{status}<\/span>\"<\/span>)\r\n    <span style=\"color: #d73a49\">else<\/span>:\r\n        updates = entry[<span style=\"color: #032f62\">\"updates\"<\/span>]\r\n        cache   = entry.get(<span style=\"color: #032f62\">\"cache\"<\/span>, <span style=\"color: #032f62\">\"not attempted\"<\/span>)\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  <span style=\"color: #24292e\">{layer}<\/span>: <span style=\"color: #24292e\">{updates}<\/span> features updated, cache \u2192 <span style=\"color: #24292e\">{cache}<\/span>\"<\/span>)\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p>Figure 1 shows an overview of the steps necessary to create the 4D simulation using Scene layer &#8211; 3D object (hosted) and how to keep it up to date.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2979042,"id":2979042,"title":"WorkflowBIMTimeEnable","filename":"WorkflowTimeEnable_Graphic.png","filesize":1148700,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/workflowtimeenable_graphic","alt":"4D simulation for a scene layer and hosted 3D object","author":"166382","description":"Workflow to create a 4D simulation for a scene layer and hosted 3D object","caption":"Figure 1. Workflow to create a 4D simulation for a scene layer and hosted 3D object","name":"workflowtimeenable_graphic","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 18:08:46","modified":"2026-08-03 18:10:20","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1365,"height":768,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","large-width":1365,"large-height":768,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","1536x1536-width":1365,"1536x1536-height":768,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","2048x2048-width":1365,"2048x2048-height":768,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","wide_image-width":1365,"wide_image-height":768}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2><strong>Conclusion<\/strong><\/h2>\n"},{"acf_fc_layout":"content","content":"<p>The schedule stops being a spreadsheet someone must interpret and becomes something the whole team can watch, the structure rising phase by phase, right where it will stand. By using ArcGIS Online for a dynamic and interactive representation of the construction process, 4D simulation enables project teams and stakeholders to have a more up-to-date vision of the execution of the project.<br \/>\nThis illustrates how 4D simulation can enhance BIM projects and provide significant advantages in project planning and scheduling, communication and collaboration, risk mitigation, and resource management.<\/p>\n"},{"acf_fc_layout":"content","content":"<h2><strong>Download the\u00a0<a href=\"https:\/\/arcgis.com\/home\/item.html?id=3e5c294212be48fba8aa6e190fa8ec7c#overview\">ArcGIS Notebook<\/a><\/strong><\/h2>\n"}],"authors":[{"ID":166382,"user_firstname":"David","user_lastname":"Alvarez","nickname":"David Alvarez","user_nicename":"dalvarez","display_name":"David Alvarez","user_email":"DAlvarez@esri.com","user_url":"","user_registered":"2021-01-27 18:11:11","user_description":"David is a product engineer on the BIM\/CAD team.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":369202,"user_firstname":"Jared","user_lastname":"Kohler","nickname":"Jared Kohler","user_nicename":"jkohler","display_name":"Jared Kohler","user_email":"jkohler@esri.com","user_url":"","user_registered":"2025-02-27 20:55:45","user_description":"Jared Kohler is a Sr. Technical Consultant on a Denver-based data science team in Esri Professional Services. He's been helping customers with solution design and problem solving since 2021.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/02\/Jared-Head-Shot-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":386702,"user_firstname":"Brett","user_lastname":"Heist","nickname":"Brett Heist","user_nicename":"bre13078esri-com_arcaec","display_name":"Brett Heist","user_email":"bheist@esri.com","user_url":"","user_registered":"2025-06-27 16:19:25","user_description":"Brett Heist is a Senior Solution Engineer at Esri specializing in the Architecture, Engineering, and Construction industry. With over a decade of AEC experience and a foundation in Environmental Geography and spatial data science, Brett brings a rare combination of domain depth and technical fluency to his work. \r\n\r\nAt Esri, Brett helps AEC organizations unlock the strategic value of location intelligence, from translating complex GIS capabilities into clear business outcomes to developing technical solutions that fit real-world workflows. He's a regular presence at industry conferences, an active creator of AEC-focused content, and someone who gravitates toward the intersection of spatial data, automation, and practical problem-solving.\r\n\r\nWhether he's writing Arcade expressions, building out Python workflows, or piloting a drone to capture aerial data, Brett's approach is consistent: find the most effective way to make spatial technology work harder for the people using it.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/04\/ChatGPT-Image-Apr-30-2026-06_29_26-PM-465x465.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":23991,"user_firstname":"Daniel","user_lastname":"Chantlos","nickname":"Daniel Chantlos","user_nicename":"dchantlos","display_name":"Daniel Chantlos","user_email":"dchantlos@esri.com","user_url":"https:\/\/www.linkedin.com\/in\/dchantlos\/","user_registered":"2020-04-08 14:46:34","user_description":"Daniel is a Sr. Solution Engineer based in Singapore. He specializes in helping AEC firms unlock the value of spatial intelligence by bridging the gap between complex design and construction workflows and GIS.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/05\/DanielChantlos_Profile_FullRes-461x465.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","show_article_image":false,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-CARD2.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-WIDE2.png"},"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>Update a 4D simulation with a scene layer and hosted 3D object - Part 2<\/title>\n<meta name=\"description\" content=\"Learn how to create, automate, and share 4D BIM construction simulations using ArcGIS Pro, IFC models, Scene Layers, Hosted 3D Object Layers, and ArcGIS Online\" \/>\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\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Update a 4D simulation with a scene layer and hosted 3D object - Part 2\" \/>\n<meta property=\"og:description\" content=\"Learn how to create, automate, and share 4D BIM construction simulations using ArcGIS Pro, IFC models, Scene Layers, Hosted 3D Object Layers, and ArcGIS Online\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\" \/>\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=\"2026-08-31T14:35:15+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\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\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\"},\"author\":{\"name\":\"David Alvarez\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/91ef98666e3489083d734f74d3d8ec31\"},\"headline\":\"Update a 4D simulation with a scene layer and hosted 3D object &#8211; Part 2\",\"datePublished\":\"2026-08-27T08:05:12+00:00\",\"dateModified\":\"2026-08-31T14:35:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\"},\"wordCount\":14,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"4D\",\"BIM\",\"ifc\",\"Revit\"],\"articleSection\":[\"3D Visualization &amp; Analytics\",\"Architecture, Engineering, and Construction\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\",\"name\":\"Update a 4D simulation with a scene layer and hosted 3D object - Part 2\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2026-08-27T08:05:12+00:00\",\"dateModified\":\"2026-08-31T14:35:15+00:00\",\"description\":\"Learn how to create, automate, and share 4D BIM construction simulations using ArcGIS Pro, IFC models, Scene Layers, Hosted 3D Object Layers, and ArcGIS Online\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update a 4D simulation with a scene layer and hosted 3D object &#8211; Part 2\"}]},{\"@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\/91ef98666e3489083d734f74d3d8ec31\",\"name\":\"David Alvarez\",\"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\/2021\/02\/DavidAlvarez-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg\",\"caption\":\"David Alvarez\"},\"description\":\"David is a product engineer on the BIM\/CAD team.\",\"sameAs\":[\"www.linkedin.com\/in\/dalvarezgeospatial\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/dalvarez\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Update a 4D simulation with a scene layer and hosted 3D object - Part 2","description":"Learn how to create, automate, and share 4D BIM construction simulations using ArcGIS Pro, IFC models, Scene Layers, Hosted 3D Object Layers, and ArcGIS Online","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\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2","og_locale":"en_US","og_type":"article","og_title":"Update a 4D simulation with a scene layer and hosted 3D object - Part 2","og_description":"Learn how to create, automate, and share 4D BIM construction simulations using ArcGIS Pro, IFC models, Scene Layers, Hosted 3D Object Layers, and ArcGIS Online","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2026-08-31T14:35:15+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2"},"author":{"name":"David Alvarez","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/91ef98666e3489083d734f74d3d8ec31"},"headline":"Update a 4D simulation with a scene layer and hosted 3D object &#8211; Part 2","datePublished":"2026-08-27T08:05:12+00:00","dateModified":"2026-08-31T14:35:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2"},"wordCount":14,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["4D","BIM","ifc","Revit"],"articleSection":["3D Visualization &amp; Analytics","Architecture, Engineering, and Construction"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2","name":"Update a 4D simulation with a scene layer and hosted 3D object - Part 2","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2026-08-27T08:05:12+00:00","dateModified":"2026-08-31T14:35:15+00:00","description":"Learn how to create, automate, and share 4D BIM construction simulations using ArcGIS Pro, IFC models, Scene Layers, Hosted 3D Object Layers, and ArcGIS Online","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Update a 4D simulation with a scene layer and hosted 3D object &#8211; Part 2"}]},{"@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\/91ef98666e3489083d734f74d3d8ec31","name":"David Alvarez","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\/2021\/02\/DavidAlvarez-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg","caption":"David Alvarez"},"description":"David is a product engineer on the BIM\/CAD team.","sameAs":["www.linkedin.com\/in\/dalvarezgeospatial"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/dalvarez"}]}},"text_date":"August 27, 2026","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/4d-simulation-leveraging-scene-layer-3d-object-hosted-part-2","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-WIDE2.png","primary_product":"ArcGIS Pro","tag_data":[{"term_id":781200,"name":"4D","slug":"4d","term_group":0,"term_taxonomy_id":781200,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":30371,"name":"BIM","slug":"bim","term_group":0,"term_taxonomy_id":30371,"taxonomy":"post_tag","description":"","parent":0,"count":71,"filter":"raw"},{"term_id":760762,"name":"ifc","slug":"ifc","term_group":0,"term_taxonomy_id":760762,"taxonomy":"post_tag","description":"","parent":0,"count":20,"filter":"raw"},{"term_id":176662,"name":"Revit","slug":"revit","term_group":0,"term_taxonomy_id":176662,"taxonomy":"post_tag","description":"","parent":0,"count":28,"filter":"raw"}],"category_data":[{"term_id":23771,"name":"3D Visualization &amp; Analytics","slug":"3d-gis","term_group":0,"term_taxonomy_id":23771,"taxonomy":"category","description":"","parent":0,"count":726,"filter":"raw"},{"term_id":615021,"name":"Architecture, Engineering, and Construction","slug":"aec","term_group":0,"term_taxonomy_id":615021,"taxonomy":"category","description":"","parent":0,"count":146,"filter":"raw"}],"product_data":[{"term_id":36551,"name":"ArcGIS Online","slug":"arcgis-online","term_group":0,"term_taxonomy_id":36551,"taxonomy":"product","description":"","parent":0,"count":2503,"filter":"raw"},{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2177,"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\/2979148","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\/166382"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2979148"}],"version-history":[{"count":30,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2979148\/revisions"}],"predecessor-version":[{"id":2981316,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2979148\/revisions\/2981316"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2979148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2979148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2979148"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2979148"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2979148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}