{"id":78971,"date":"2017-08-15T07:00:20","date_gmt":"2017-08-15T07:00:20","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/products\/product\/uncategorized\/exploring-3d-object-data-in-a-custom-web-app\/"},"modified":"2018-03-26T21:14:22","modified_gmt":"2018-03-26T21:14:22","slug":"exploring-3d-object-data-in-a-custom-web-app","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app","title":{"rendered":"Exploring 3D object data in a custom web app"},"author":6561,"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],"tags":[25781,30111,27491,24581],"industry":[],"product":[36831,36601],"class_list":["post-78971","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","tag-3d","tag-data-visualization","tag-jsapi4","tag-smart-mapping","product-js-api-arcgis","product-developers"],"acf":{"short_description":"In a session titled 3D Visualization with the ArcGIS API for JavaScript at the 2017 Esri User Conference (UC), Javier Gutierrez and I dem...","flexible_content":[{"acf_fc_layout":"content","content":"<p>In a session titled <a href=\"https:\/\/github.com\/ekenes\/conferences\/tree\/master\/uc-2017\/3d-viz\"><em>3D Visualization with the ArcGIS API for JavaScript<\/em><\/a> at the 2017 <a href=\"https:\/\/www.esri.com\/about\/events\/uc\">Esri User Conference (UC)<\/a>, Javier Gutierrez and I demonstrated some of the new visualization capabilities available in the JavaScript API. I\u2019m particularly excited about <a href=\"https:\/\/blogs.esri.com\/esri\/arcgis\/2015\/03\/02\/introducing-smart-mapping\/\">Smart Mapping<\/a>, which is a set of APIs that allow developers to generate good-looking default visualizations for layers based on a given field value. One of the new capabilities released in Smart Mapping this year was added support for 3D object scene layers.<\/p>\n<p>During our presentation at the UC, we showed off <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/4\/visualization\/exploration\/buildings\/\">this sample<\/a>, which allows users to explore home ownership data in New York City. The app contains a single <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-SceneLayer.html\">SceneLayer<\/a> of 3D buildings in Manhattan and exposes a barebones UI that allows users to explore the data. This data is typically captured by an automated process for constructing 3D objects from large sets of overlapping imagery. A colleague created  a scene layer of the building data, which comes from the <a href=\"https:\/\/www1.nyc.gov\/site\/doitt\/initiatives\/3d-building.page\">NYC 3-D Building Model<\/a>, and used geoenrichment to add two attributes: the percentage of the population that are homeowners, and the average home value. <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/4\/visualization\/exploration\/buildings\/\">Check it out<\/a>. It makes for some cool looking visuals.<\/p>\n<p><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/4\/visualization\/exploration\/buildings\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/08\/above-and-below.png\" alt=\"\" width=\"920\" height=\"537\" class=\"alignnone size-full wp-image-85093 noIMGBackground\" \/><\/a><\/p>\n<h2>Configure your own data exploration app<\/h2>\n<p>As noted throughout the documentation of the ArcGIS API for JavaScript, you should only use the Smart Mapping APIs for custom data exploration apps and visualization authoring apps (similar to the ArcGIS Online map and scene viewers). Also note that Smart Mapping in 3D is limited to point and 3D object data layers.<\/p>\n<p>In a nutshell, the Smart Mapping APIs consist of a set of methods used for generating statistics, renderers, and visual variables. In this app, I call the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer\">createContinuousRenderer()<\/a> method in the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-renderers-smartMapping-creators-color.html\">colorRendererCreator<\/a> object to generate my renderer. Only three parameters are required: <code>layer<\/code>, <code>field<\/code>, and <code>basemap<\/code>. I also like to allow the user to set the <code>theme<\/code> parameter since switching the theme allows them to see the data from different perspectives.<\/p>\n<p>Once the promise resolves, you can set the renderer back to the layer and the view will automatically update.<\/p>\n<pre>\n<span style=\"color: #333;font-weight: bold\">var<\/span> colorParams = {\n  layer: layer,  <span style=\"color: #998;font-style: italic\">\/\/ scene layer instance created earlier in the app<\/span>\n  basemap: map.basemap,  <span style=\"color: #998;font-style: italic\">\/\/ This could be any Esri basemap, such as \"dark-gray\"<\/span>\n  field: <span style=\"color: #d14\">\"OWNER_P\"<\/span>,  <span style=\"color: #998;font-style: italic\">\/\/ field name for attribute containing % of homeowners<\/span>\n  theme: <span style=\"color: #d14\">\"above-and-below\"<\/span>  <span style=\"color: #998;font-style: italic\">\/\/ other values: high-to-low (default) | centered-on | extremes<\/span>\n};\n\ncolorRendererCreator.createContinuousRenderer(colorParams)\n  .then(<span><span style=\"color: #333;font-weight: bold\">function<\/span> (<span>response<\/span>) <\/span>{\n    <span style=\"color: #998;font-style: italic\">\/\/ set the renderer to the layer<\/span>\n    layer.renderer = response.renderer;\n  });\n<\/pre>\n<p>Further down the app, I construct an instance of <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-widgets-ColorSlider.html\">ColorSlider<\/a> and listen to the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-widgets-ColorSlider.html#event:data-change\">data-change event<\/a> (essentially on-slide) and apply the visual variable represented in the slider back to the renderer on the layer. This allows the user to quickly change the visualization to explore the dataset. I also generated a histogram using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-renderers-smartMapping-statistics-histogram.html#histogram\">histogram()<\/a> method available in the API. This can be set on the slider so the user can get an overview of the spread of the data.<\/p>\n<pre>\n<span style=\"color: #333;font-weight: bold\">var<\/span> colorParams = {\n  layer: layer,  <span style=\"color: #998;font-style: italic\">\/\/ feature layer instance created earlier in the app<\/span>\n  basemap: map.basemap,  <span style=\"color: #998;font-style: italic\">\/\/ This could be any Esri basemap, such as \"dark-gray\"<\/span>\n  field: <span style=\"color: #d14\">\"OWNER_P\"<\/span>,  <span style=\"color: #998;font-style: italic\">\/\/ field name for attribute containing % of homeowners<\/span>\n  theme: <span style=\"color: #d14\">\"above-and-below\"<\/span>  <span style=\"color: #998;font-style: italic\">\/\/ other values: high-to-low (default) | centered-on | extremes<\/span>\n};\n\ncolorRendererCreator.createContinuousRenderer(colorParams)\n  .then(<span><span style=\"color: #333;font-weight: bold\">function<\/span> (<span>response<\/span>) <\/span>{\n\n    <span style=\"color: #998;font-style: italic\">\/\/ set the renderer on the layer<\/span>\n    layer.renderer = response.renderer;\n\n    <span style=\"color: #333;font-weight: bold\">var<\/span> histogramParams = {\n      layer: colorParams.layer,\n      field: colorParams.field,\n      numBins: <span style=\"color: #008080\">30<\/span>\n    };\n    <span style=\"color: #333;font-weight: bold\">return<\/span> histogram(histogramParams)\n      .then(<span><span style=\"color: #333;font-weight: bold\">function<\/span> (<span>histogram<\/span>) <\/span>{\n\n        <span style=\"color: #998;font-style: italic\">\/\/ add the statistics and color visual variable objects<\/span>\n        <span style=\"color: #998;font-style: italic\">\/\/ to the color slider parameters<\/span>\n\n        <span style=\"color: #333;font-weight: bold\">var<\/span> sliderParams = {\n          container: <span style=\"color: #d14\">\"slider\"<\/span>,\n          numHandles: <span style=\"color: #008080\">3<\/span>,  <span style=\"color: #998;font-style: italic\">\/\/ can only be 2 or 3 handles<\/span>\n          syncedHandles: <span style=\"color: #008080\">true<\/span>,\n          statistics: response.statistics,\n          visualVariable: response.visualVariable,\n          histogram: histogram,\n          minValue: response.statistics.min,\n          maxValue: response.statistics.max\n        };\n\n        <span style=\"color: #333;font-weight: bold\">var<\/span> colorSlider = <span style=\"color: #333;font-weight: bold\">new<\/span> ColorSlider(sliderParams);\n        <span style=\"color: #998;font-style: italic\">\/\/ when the user slides the handle(s), update the renderer<\/span>\n        <span style=\"color: #998;font-style: italic\">\/\/ with the updated color visual variable object<\/span>\n\n        colorSlider.on(<span style=\"color: #d14\">\"data-change\"<\/span>, <span><span style=\"color: #333;font-weight: bold\">function<\/span> (<span><\/span>) <\/span>{\n          <span style=\"color: #333;font-weight: bold\">var<\/span> renderer = layer.renderer.clone();\n          renderer.visualVariables = [lang.clone(colorSlider.visualVariable)];\n          layer.renderer = renderer;\n        });\n      });\n  });\n<\/pre>\n<p><a href=\"https:\/\/github.com\/ekenes\/esri-js-samples\/blob\/master\/4\/visualization\/exploration\/buildings\/index.html#L207-L210\">I also added a select element<\/a> allowing the user to explore data in different fields. When the user selects a new field name, the generator function is executed once again and the renderer updates with a new default renderer. You can also make the app more configurable and allow the user to visualize different layers based on field values selected from an auto-populated list. <\/p>\n<h2>Working with SceneLayers<\/h2>\n<p>Not all SceneLayer fields can be used for rendering purposes. SceneLayer attributes may be stored in the service cache or as part of a data-connected feature layer depending on how the SceneLayer was published. If the SceneLayer has an associated portal item on ArcGIS Online or an on premise portal, then create the layer <a href=\"https:\/\/github.com\/ekenes\/esri-js-samples\/blob\/master\/4\/visualization\/exploration\/buildings\/index.html#L51-L53\">using the portal item ID<\/a>. That will ensure that attributes can be properly queried for statistics if the layer is a data-connected scene layer. <\/p>\n<p>Depending on where the attributes are stored will determine whether the field may be used for visualization or rendering purposes. The <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-SceneLayer.html#getFieldUsageInfo\">getFieldUsageInfo()<\/a> method on SceneLayer is convenient for checking which capabilities are supported for a given field. If your app allows users to input their own scene layer, then be sure to check the fields for renderer support prior to attempting to use it in the Smart Mapping API.<\/p>\n"}],"authors":[{"ID":6561,"user_firstname":"Kristian","user_lastname":"Ekenes","nickname":"Kristian Ekenes","user_nicename":"kekenes","display_name":"Kristian Ekenes","user_email":"KEkenes@esri.com","user_url":"https:\/\/github.com\/ekenes","user_registered":"2018-03-02 00:18:32","user_description":"Kristian Ekenes is a Principal Product Engineer at Esri specializing in data visualization on the web. He works on the ArcGIS Maps SDK for JavaScript, ArcGIS Arcade, and Map Viewer in ArcGIS Online. Kristian's work focuses on researching and developing new and innovative data visualization capabilities of geospatial data in web maps, Arcade integration in web maps, and applications of generative AI assistants in web maps. Prior to joining Esri, he worked as a GIS Specialist for an environmental consulting company. Kristian has degrees from Brigham Young University and Arizona State University.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}]},"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>Exploring 3D object data in a custom web app<\/title>\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\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exploring 3D object data in a custom web app\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app\" \/>\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=\"2018-03-26T21:14:22+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\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app\"},\"author\":{\"name\":\"Kristian Ekenes\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b\"},\"headline\":\"Exploring 3D object data in a custom web app\",\"datePublished\":\"2017-08-15T07:00:20+00:00\",\"dateModified\":\"2018-03-26T21:14:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app\"},\"wordCount\":9,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"3D\",\"data visualization\",\"jsapi4\",\"smart mapping\"],\"articleSection\":[\"3D Visualization &amp; Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app\",\"name\":\"Exploring 3D object data in a custom web app\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2017-08-15T07:00:20+00:00\",\"dateModified\":\"2018-03-26T21:14:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exploring 3D object data in a custom web app\"}]},{\"@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\/5469f723fbfb78138efbb1da56e6aa9b\",\"name\":\"Kristian Ekenes\",\"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\/10\/ekenes-zurich-213x200.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png\",\"caption\":\"Kristian Ekenes\"},\"description\":\"Kristian Ekenes is a Principal Product Engineer at Esri specializing in data visualization on the web. He works on the ArcGIS Maps SDK for JavaScript, ArcGIS Arcade, and Map Viewer in ArcGIS Online. Kristian's work focuses on researching and developing new and innovative data visualization capabilities of geospatial data in web maps, Arcade integration in web maps, and applications of generative AI assistants in web maps. Prior to joining Esri, he worked as a GIS Specialist for an environmental consulting company. Kristian has degrees from Brigham Young University and Arizona State University.\",\"sameAs\":[\"https:\/\/github.com\/ekenes\",\"https:\/\/www.linkedin.com\/in\/kristian-ekenes\/\",\"https:\/\/x.com\/kekenes\"],\"gender\":\"male\",\"jobTitle\":\"Principal Product Engineer\",\"worksFor\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Exploring 3D object data in a custom web app","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\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app","og_locale":"en_US","og_type":"article","og_title":"Exploring 3D object data in a custom web app","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2018-03-26T21:14:22+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\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app"},"author":{"name":"Kristian Ekenes","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b"},"headline":"Exploring 3D object data in a custom web app","datePublished":"2017-08-15T07:00:20+00:00","dateModified":"2018-03-26T21:14:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app"},"wordCount":9,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["3D","data visualization","jsapi4","smart mapping"],"articleSection":["3D Visualization &amp; Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app","name":"Exploring 3D object data in a custom web app","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2017-08-15T07:00:20+00:00","dateModified":"2018-03-26T21:14:22+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/3d-gis\/3d-gis\/exploring-3d-object-data-in-a-custom-web-app#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Exploring 3D object data in a custom web app"}]},{"@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\/5469f723fbfb78138efbb1da56e6aa9b","name":"Kristian Ekenes","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\/10\/ekenes-zurich-213x200.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png","caption":"Kristian Ekenes"},"description":"Kristian Ekenes is a Principal Product Engineer at Esri specializing in data visualization on the web. He works on the ArcGIS Maps SDK for JavaScript, ArcGIS Arcade, and Map Viewer in ArcGIS Online. Kristian's work focuses on researching and developing new and innovative data visualization capabilities of geospatial data in web maps, Arcade integration in web maps, and applications of generative AI assistants in web maps. Prior to joining Esri, he worked as a GIS Specialist for an environmental consulting company. Kristian has degrees from Brigham Young University and Arizona State University.","sameAs":["https:\/\/github.com\/ekenes","https:\/\/www.linkedin.com\/in\/kristian-ekenes\/","https:\/\/x.com\/kekenes"],"gender":"male","jobTitle":"Principal Product Engineer","worksFor":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes"}]}},"text_date":"August 15, 2017","author_name":"Kristian Ekenes","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/08\/Newsroom-Keyart-Wide-1920-x-1080.jpg","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":25781,"name":"3D","slug":"3d","term_group":0,"term_taxonomy_id":25781,"taxonomy":"post_tag","description":"","parent":0,"count":351,"filter":"raw"},{"term_id":30111,"name":"data visualization","slug":"data-visualization","term_group":0,"term_taxonomy_id":30111,"taxonomy":"post_tag","description":"","parent":0,"count":99,"filter":"raw"},{"term_id":27491,"name":"jsapi4","slug":"jsapi4","term_group":0,"term_taxonomy_id":27491,"taxonomy":"post_tag","description":"","parent":0,"count":111,"filter":"raw"},{"term_id":24581,"name":"smart mapping","slug":"smart-mapping","term_group":0,"term_taxonomy_id":24581,"taxonomy":"post_tag","description":"","parent":0,"count":81,"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":707,"filter":"raw"}],"product_data":[{"term_id":36831,"name":"ArcGIS Maps SDK for JavaScript","slug":"js-api-arcgis","term_group":0,"term_taxonomy_id":36831,"taxonomy":"product","description":"","parent":36601,"count":365,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":777,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=js-api-arcgis","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/78971","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\/6561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=78971"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/78971\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=78971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=78971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=78971"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=78971"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=78971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}