{"id":2050202,"date":"2023-08-16T07:02:12","date_gmt":"2023-08-16T14:02:12","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2050202"},"modified":"2024-04-12T01:16:10","modified_gmt":"2024-04-12T08:16:10","slug":"new-3d-maps-sdk-native-v200-2","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2","title":{"rendered":"What&#8217;s new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?"},"author":10152,"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,37101,738191],"tags":[23811,768202],"industry":[],"product":[761642,769142,769162,768902,769152,768912,36601],"class_list":["post-2050202","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","category-announcements","category-developers","tag-3d-visualization","tag-arcgis-maps-sdks-for-native-apps","product-platform","product-sdk-net","product-sdk-java","product-sdk-kotlin","product-sdk-qt","product-sdk-swift","product-developers"],"acf":{"authors":[{"ID":10152,"user_firstname":"Koushik","user_lastname":"Hajra","nickname":"Koushik Hajra","user_nicename":"khajra","display_name":"Koushik Hajra","user_email":"khajra@esri.com","user_url":"","user_registered":"2019-11-15 00:51:23","user_description":"Koushik is a Principal Product Engineer with the ArcGIS Runtime team. He primarily works on the 3D layers specializing in Qt SDK. He is passionate about building high quality functional APIs for our users. Koushik presents at Esri conferences like Developers Summit or the Users Conference where he talks about using the different parts of the Maps SDK.","user_avatar":"<img alt='' src='https:\/\/secure.gravatar.com\/avatar\/82c2e5bcc4a327abbb93fa36a32ac27e07e28b729377c4a8dded6568b2edcdb8?s=96&#038;d=blank&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/82c2e5bcc4a327abbb93fa36a32ac27e07e28b729377c4a8dded6568b2edcdb8?s=192&#038;d=blank&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'\/>"},{"ID":3811,"user_firstname":"Nicholas","user_lastname":"Furness","nickname":"Nicholas Furness","user_nicename":"nfurness","display_name":"Nick Furness","user_email":"NFurness@esri.com","user_url":"http:\/\/developers.arcgis.com","user_registered":"2018-03-02 00:15:26","user_description":"Nick Furness is a Product Manager for the ArcGIS Maps SDKs for Native Apps, and ArcGIS Maps SDKs for Game Engines, specializing in Swift and iOS. He's spent over 25 years working in the GIS space building projects ranging from small mom-and-pop solutions all the way up to enterprise utility and national government deployments. Nick presents at various Esri Developer Summits, the User Conference, and many other events, almost always talking about something to do with the Native Maps SDKs (although you might find the odd bit of JavaScript thrown in there).","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/DevSummit-2013-Face-150x150.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"This article demonstrates the new 3D features added to the ArcGIS Maps SDKs for Native Apps.","flexible_content":[{"acf_fc_layout":"content","content":"<h2>Introduction<\/h2>\n<p>The August update of Native Maps SDKs brings some exciting new capabilities for 3D visualization and application development. Read on to learn about those capabilities.<\/p>\n<h2>Support for 3D objects in relative surface placement mode<\/h2>\n<p><a href=\"https:\/\/github.com\/Esri\/i3s-spec\/blob\/master\/docs\/1.9\/3Dobject_ReadMe.md\">3D object scene layers<\/a> have been supported by the Native Maps SDKs and Runtime SDKs since version 100.0. They are part of the <a href=\"https:\/\/github.com\/Esri\/i3s-spec\">I3S specification<\/a> and enable you to add GIS data, such as 3D features in your scene. The 200.2 release of the Native Maps SDKs adds support for <em>relative<\/em> <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/sceneviewtypes-h.html#SurfacePlacement-enum\">placement mode<\/a> in addition to <em>absolute<\/em> placement mode, which allows features in a 3D Object Scene layer to be placed relative to a scene&#8217;s surface.<\/p>\n<p>Relative placement is key to supporting the new global <a href=\"https:\/\/esri.maps.arcgis.com\/home\/item.html?id=ca0470dbbddb4db28bad74ed39949e25\">OSM buildings layer<\/a> (published by Esri in the <a href=\"https:\/\/livingatlas.arcgis.com\/en\/home\/\">Living Atlas<\/a>) and you can now include it in your 3D scenes to provide a rich context for your data, anywhere in the world.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2052802,"id":2052802,"title":"osm_buildings_hkg","filename":"osm_buildings_hkg.png","filesize":671784,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\/osm_buildings_hkg","alt":"osm_buildings_hong_kong","author":"10152","description":"","caption":"","name":"osm_buildings_hkg","status":"inherit","uploaded_to":2050202,"date":"2023-08-16 02:30:35","modified":"2023-08-16 02:31:01","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":1520,"height":970,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg.png","medium-width":409,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg.png","medium_large-width":768,"medium_large-height":490,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg.png","large-width":1520,"large-height":970,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg.png","1536x1536-width":1520,"1536x1536-height":970,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg.png","2048x2048-width":1520,"2048x2048-height":970,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg-729x465.png","card_image-width":729,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/osm_buildings_hkg.png","wide_image-width":1520,"wide_image-height":970}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><em>OSM buildings layer showing buildings in relative surface placement mode.<\/em><\/p>\n"},{"acf_fc_layout":"content","content":"<p>The OSM buildings layer can be added to a <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-basemap.html\">basemap<\/a> to provide more realistic context to data in your 3D application. This sample code shows how to create a <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-basemap.html\">basemap<\/a> that combines the OSM buildings layer and a suitable vector tile base layer using the <a href=\"https:\/\/developers.arcgis.com\/qt\/\">ArcGIS Maps SDK for Qt<\/a>, but all the concepts also apply to Java, Kotlin, .NET and Swift Maps SDKs:<\/p>\n"},{"acf_fc_layout":"content","content":"<details>\n<summary><span style=\"color: purple; font-style: bold;\">\u2295 Show code &#8230;<\/span><\/summary>\n<p><!-- HTML generated using hilite.me --><\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #888888;\">\/\/ create a vector tiled layer using the portal item used in the OSM 3D basemap<\/span>\r\nArcGISVectorTiledLayer<span style=\"color: #333333;\">*<\/span> vtl <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">new<\/span> ArcGISVectorTiledLayer(<span style=\"color: #008800; font-weight: bold;\">new<\/span> PortalItem(<span style=\"background-color: #fff0f0;\">\"1e7d1784d1ef4b79ba6764d0bd6c3150\"<\/span>, <span style=\"color: #008800; font-weight: bold;\">this<\/span>), <span style=\"color: #008800; font-weight: bold;\">this<\/span>);\r\n\r\n<span style=\"color: #888888;\">\/\/ create a scene layer using the portal item for the buildings layer in the OSM 3B basemap<\/span>\r\nArcGISSceneLayer<span style=\"color: #333333;\">*<\/span> osm_blds_lyr <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">new<\/span> ArcGISSceneLayer(<span style=\"color: #008800; font-weight: bold;\">new<\/span> PortalItem(<span style=\"background-color: #fff0f0;\">\"ca0470dbbddb4db28bad74ed39949e25\"<\/span>, <span style=\"color: #008800; font-weight: bold;\">this<\/span>), <span style=\"color: #008800; font-weight: bold;\">this<\/span>);\r\n\r\n<span style=\"color: #888888;\">\/\/ create a new basemap object<\/span>\r\nBasemap<span style=\"color: #333333;\">*<\/span> basemap <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">new<\/span> Basemap(<span style=\"color: #008800; font-weight: bold;\">this<\/span>);\r\n\r\n<span style=\"color: #888888;\">\/\/ add both the layers to the basemap's baselayers<\/span>\r\nbasemap<span style=\"color: #333333;\">-&gt;<\/span>baseLayers()<span style=\"color: #333333;\">-&gt;<\/span>append(vtl);\r\nbasemap<span style=\"color: #333333;\">-&gt;<\/span>baseLayers()<span style=\"color: #333333;\">-&gt;<\/span>append(osm_blds_lyr);\r\n\r\n<span style=\"color: #888888;\">\/\/ create a new scene with the basemap<\/span>\r\nm_scene <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">new<\/span> Scene(basemap, <span style=\"color: #008800; font-weight: bold;\">this<\/span>);\r\n<\/pre>\n<\/div>\n<\/details>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"blockquote","content":"<p><strong>Note:<\/strong> Esri <a href=\"https:\/\/esri.maps.arcgis.com\/home\/search.html?restrict=true&amp;sortField=relevance&amp;sortOrder=desc&amp;searchTerm=tags%3A%223D+basemap%22&amp;focus=scenes#content\">3D basemap services<\/a> are currently in beta and are expected to be released for production use later this year. The Native Maps SDKs currently support a subset of the layers of these basemaps, and the above code builds a Basemap object programmatically using these supported layers. When publishing a web scene containing the OSM buildings layer, the Native Maps SDKs cannot currently read that layer if it is part of the basemap and it should be added to the web scene's operational layers. Full support for 3D basemaps, including trees and labels, is on the roadmap for future Native Maps SDK releases.<\/p>\n"},{"acf_fc_layout":"content","content":"<p>The OSM buildings layer can of course also be added as an <a href=\"https:\/\/developers.arcgis.com\/documentation\/glossary\/operational-layer\/\">operational layer<\/a> in Native Maps SDKs, like any other <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-arcgisscenelayer.html\">ArcGISSceneLayer<\/a>.<\/p>\n<p>Since the OSM buildings layer delivers detailed buildings at a global scale, the Native Maps SDKs team has worked hard to ensure the layer performs well, whether as part of a scene\u2019s basemap or its operational layers.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2052032,"id":2052032,"title":"buildings_small","filename":"buildings_small.gif","filesize":4150977,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\/buildings_small","alt":"buildings","author":"10152","description":"","caption":"","name":"buildings_small","status":"inherit","uploaded_to":2050202,"date":"2023-08-15 17:59:11","modified":"2023-08-15 17:59:43","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":793,"height":574,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small.gif","medium-width":361,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small.gif","medium_large-width":768,"medium_large-height":556,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small.gif","large-width":793,"large-height":574,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small.gif","1536x1536-width":793,"1536x1536-height":574,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small.gif","2048x2048-width":793,"2048x2048-height":574,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small-642x465.gif","card_image-width":642,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/buildings_small.gif","wide_image-width":793,"wide_image-height":574}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><em>OSM buildings layer in the ArcGIS Maps SDKs for Native Apps<\/em><\/p>\n"},{"acf_fc_layout":"content","content":"<h2>Support for filtering features in an ArcGISSceneLayer<\/h2>\n<p>The new OSM buildings layer provides great context for your data, but to see your data, you\u2019ll often need to remove certain buildings from the OSM buildings layer, for example to view a proposed development. To let you make way for your data, we\u2019ve added feature filtering. OSM building layer features can be filtered using a geometry, or by specifying features to show or hide.<\/p>\n<p>The video below shows adding the OSM buildings layer as a basemap. The red line shows the boundary of a custom dataset of San Francisco building models. A filter is applied to hide the OSM buildings within the extent of that custom dataset which is then added and displayed without conflicting with the OSM buildings.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2052002,"id":2052002,"title":"filter_add_custom_data","filename":"filter_add_custom_data.gif","filesize":496979,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\/filter_add_custom_data","alt":"","author":"10152","description":"","caption":"","name":"filter_add_custom_data","status":"inherit","uploaded_to":2050202,"date":"2023-08-15 17:50:10","modified":"2023-08-15 17:59:05","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":1520,"height":928,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data.gif","medium-width":428,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data.gif","medium_large-width":768,"medium_large-height":469,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data.gif","large-width":1520,"large-height":928,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data.gif","1536x1536-width":1520,"1536x1536-height":928,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data.gif","2048x2048-width":1520,"2048x2048-height":928,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data-762x465.gif","card_image-width":762,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/filter_add_custom_data.gif","wide_image-width":1520,"wide_image-height":928}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><em>Filtering of features and replacing with custom dataset.<\/em><\/p>\n"},{"acf_fc_layout":"content","content":"<p>Filtering can support different workflows across various industries ranging from city planning to transportation. A typical planning workflow could entail choosing to use the OSM buildings layer as the basemap layer and then add a custom 3D model to replace the relevant features in the OSM buildings layer as in the above example. This would create a much more realistic context for data visualization. Similarly, in the transportation analysis industry, visualization and analysis of replacing a feature representing an older structure with a custom, higher-quality dataset can be easily performed.<\/p>\n<p>Filtering isn\u2019t just limited to the OSM buildings layer. You can apply it to any 3D object layer. In fact, you can also use filtering on point scene layers as well since the API is part of ArcGISSceneLayer.<\/p>\n<p>Those are some basic examples of the possibilities feature filtering in ArcGISSceneLayers. Let\u2019s take a look at the APIs that bring it to life.<\/p>\n<p>There are three separate ways to perform a filtering operation, which are described below.<\/p>\n<h2>Per-feature filtering<\/h2>\n<p>Using this method, features can be identified and then a filter applied to those features using the new methods added to <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-arcgisscenelayer.html\">ArcGISSceneLayer<\/a>. A single feature can be hidden using <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-arcgisscenelayer.html#setFeatureVisible\">ArcGISSceneLayer::setFeatureVisible()<\/a>, and multiple features can be hidden at once using <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-arcgisscenelayer.html#setFeaturesVisible\">ArcGISSceneLayer::setFeaturesVisible()<\/a>. Hidden features can be made visible again by calling <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-arcgisscenelayer.html#resetFeaturesVisible\">ArcGISSceneLayer::resetFeaturesVisible<\/a>.<\/p>\n<p>This is useful when there is a small set of features that need to be hidden. For example, a city planner decides to present the design of a new mall to the stakeholders. There is a dataset\u00a0available for the proposed design. In that case, the planner could selectively hide the current structure and replace it with the newly available dataset by simply clicking or tapping on the older building and then adding the new feature as an operational layer. So, how would that look in code?<\/p>\n"},{"acf_fc_layout":"content","content":"<details>\n<summary><span style=\"color: purple; font-style: bold;\">\u2295 Show code &#8230;<\/span><\/summary>\n<p><!-- HTML generated using hilite.me --><\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #888888;\">\/\/ wire up the mouse click event to perform an identify operation<\/span>\r\nconnect(m_sceneView, <span style=\"color: #333333;\">&amp;<\/span>SceneQuickView<span style=\"color: #333333;\">::<\/span>mouseClicked, <span style=\"color: #008800; font-weight: bold;\">this<\/span>, [<span style=\"color: #008800; font-weight: bold;\">this<\/span>](QMouseEvent<span style=\"color: #333333;\">&amp;<\/span> mouseEvent)\r\n{\r\n  m_sceneView<span style=\"color: #333333;\">-&gt;<\/span>identifyLayer(m_sceneLayer, mouseEvent.position().x(), mouseEvent.position().y(), <span style=\"color: #6600ee; font-weight: bold;\">1.0<\/span>, <span style=\"color: #007020;\">false<\/span>);\r\n});\r\n\r\n<span style=\"color: #888888;\">\/\/ wire up the identifyLayer completed event<\/span>\r\nconnect(m_sceneView, <span style=\"color: #333333;\">&amp;<\/span>SceneQuickView<span style=\"color: #333333;\">::<\/span>identifyLayerCompleted, <span style=\"color: #008800; font-weight: bold;\">this<\/span>, [<span style=\"color: #008800; font-weight: bold;\">this<\/span>](<span style=\"color: #008800; font-weight: bold;\">const<\/span> QUuid<span style=\"color: #333333;\">&amp;<\/span>, IdentifyLayerResult<span style=\"color: #333333;\">*<\/span> identifyResult)\r\n{\r\n<span style=\"color: #008800; font-weight: bold;\">  for<\/span> (<span style=\"color: #008800; font-weight: bold;\">const<\/span> <span style=\"color: #008800; font-weight: bold;\">auto<\/span> element <span style=\"color: #333333;\">:<\/span> identifyResult<span style=\"color: #333333;\">-&gt;<\/span>geoElements())\r\n    {\r\n<span style=\"color: #008800; font-weight: bold;\">      if<\/span> (<span style=\"color: #008800; font-weight: bold;\">dynamic_cast<\/span><span style=\"color: #333333;\">&lt;<\/span>Feature<span style=\"color: #333333;\">*&gt;<\/span>(element))\r\n        {\r\n<span style=\"color: #888888;\">          \/\/ select the feature to be filtered<\/span>\r\n            m_sceneLayer<span style=\"color: #333333;\">-&gt;<\/span>selectFeature(<span style=\"color: #008800; font-weight: bold;\">static_cast<\/span><span style=\"color: #333333;\">&lt;<\/span>Feature<span style=\"color: #333333;\">*&gt;<\/span>(element));\r\n\r\n<span style=\"color: #888888;\">          \/\/ cache the feature to a list for filtering later<\/span>\r\n          m_features.append(<span style=\"color: #008800; font-weight: bold;\">static_cast<\/span><span style=\"color: #333333;\">&lt;<\/span>Feature<span style=\"color: #333333;\">*&gt;<\/span>(element));\r\n        }\r\n    }\r\n});\r\n\r\n<span style=\"color: #888888;\">\/\/ filter using the cached features by setting the visibility to false<\/span>\r\n\r\nm_sceneLayer<span style=\"color: #333333;\">-&gt;<\/span>setFeaturesVisible(m_features, <span style=\"color: #007020;\">false<\/span>);<\/pre>\n<\/div>\n<\/details>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"blockquote","content":"<p>A note on why the select call was added. This was made so that upon clearing the filter, the selection set shows which features were filtered. The code below shows how to clear the filter based on selected features.<\/p>\n"},{"acf_fc_layout":"content","content":"<details>\n<summary><span style=\"color: purple; font-style: bold;\">\u2295 Show code &#8230;<\/span><\/summary>\n<p><!-- HTML generated using hilite.me --><\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #888888;\">\/\/ wire up selected features completed event<\/span>\r\nconnect(m_sceneLayer, <span style=\"color: #333333;\">&amp;<\/span>ArcGISSceneLayer<span style=\"color: #333333;\">::<\/span>selectedFeaturesCompleted, <span style=\"color: #008800; font-weight: bold;\">this<\/span>, [<span style=\"color: #008800; font-weight: bold;\">this<\/span>](<span style=\"color: #008800; font-weight: bold;\">const<\/span> QUuid<span style=\"color: #333333;\">&amp;<\/span> taskId, FeatureQueryResult<span style=\"color: #333333;\">*<\/span> featureQueryResult)\r\n{\r\n  FeatureIterator it <span style=\"color: #333333;\">=<\/span> featureQueryResult<span style=\"color: #333333;\">-&gt;<\/span>iterator();\r\n  m_features <span style=\"color: #333333;\">=<\/span> it.features(<span style=\"color: #008800; font-weight: bold;\">this<\/span>);\r\n\r\n<span style=\"color: #888888;\">  \/\/ make features visible by setting the bool to true<\/span>\r\n  m_sceneLayer<span style=\"color: #333333;\">-&gt;<\/span>setFeaturesVisible(it.features(<span style=\"color: #008800; font-weight: bold;\">this<\/span>), <span style=\"color: #007020;\">true<\/span>);\r\n});\r\n\r\n<span style=\"color: #888888;\">\/\/ call selected features async<\/span>\r\nm_sceneLayer<span style=\"color: #333333;\">-&gt;<\/span>selectedFeatures();<\/pre>\n<\/div>\n<\/details>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<p>The code above demonstrates how to filter multiple features at once. To hide a single feature call <code>m_sceneLayer-&gt;setFeatureVisible(feature, false)<\/code>.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2052102,"id":2052102,"title":"per_feature_filtering_small","filename":"per_feature_filtering_small.gif","filesize":601258,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\/per_feature_filtering_small","alt":"per_feature_filtering","author":"10152","description":"","caption":"","name":"per_feature_filtering_small","status":"inherit","uploaded_to":2050202,"date":"2023-08-15 19:05:04","modified":"2023-08-15 19:05:22","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\/2023\/08\/per_feature_filtering_small-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small.gif","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small.gif","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small.gif","large-width":1280,"large-height":720,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small.gif","1536x1536-width":1280,"1536x1536-height":720,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small.gif","2048x2048-width":1280,"2048x2048-height":720,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small-826x465.gif","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/per_feature_filtering_small.gif","wide_image-width":1280,"wide_image-height":720}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><em>Filtering individual features in a 3D object scene layer<\/em><\/p>\n"},{"acf_fc_layout":"content","content":"<h2>Spatial Filtering<\/h2>\n<p>Using spatial filtering, features can be filtered spatially using one or more polygons as input. A new class called <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-scenelayerpolygonfilter.html\">SceneLayerPolygonFilter<\/a> has been added to define the filter. The filter is defined by a set of <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-scenelayerpolygonfilter.html#polygons\">polygons<\/a> and a <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/maptypes-h.html#SceneLayerPolygonFilterSpatialRelationship-enum\">SpatialRelationship<\/a>. The spatial relationship allows you to choose whether you want to filter features within (contains) or outside (disjoint) of the provided polygons. In the case of contains, everything outside of the polygons would be filtered out and vice versa for disjoint. Once the filter is created, it is applied to the <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-arcgisscenelayer.html\">ArcGISSceneLayer<\/a> via a newly added property called <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-arcgisscenelayer.html#setPolygonFilter\">polygonFilter<\/a> to set it. Spatial filtering allows filtering using multiple polygons, and multipart polygons including polygons with holes.<\/p>\n<p>Spatial Filtering is useful when all features within an area need to be filtered. Consider filtering the extent of a dataset when adding that to an application that has 3D content as part of the basemap.<\/p>\n"},{"acf_fc_layout":"content","content":"<details>\n<summary><span style=\"color: purple; font-style: bold;\">\u2295 Show code &#8230;<\/span><\/summary>\n<p><!-- HTML generated using hilite.me --><\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #888888;\">\/\/ create a new polygon filter based on a list of polygons and a spatial relationship<\/span>\r\nm_polygonFilter <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">new<\/span> SceneLayerPolygonFilter(m_polygons, SceneLayerPolygonFilterSpatialRelationship<span style=\"color: #333333;\">::<\/span>Disjoint, <span style=\"color: #008800; font-weight: bold;\">this<\/span>);\r\n\r\n<span style=\"color: #888888;\">\/\/ set the polygon filter on the scenelayer<\/span>\r\nm_sceneLayer<span style=\"color: #333333;\">-&gt;<\/span>setPolygonFilter(m_polygonFilter);<\/pre>\n<\/div>\n<\/details>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2051992,"id":2051992,"title":"spatial_filtering","filename":"spatial_filtering.gif","filesize":1253845,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\/spatial_filtering","alt":"","author":"10152","description":"","caption":"","name":"spatial_filtering","status":"inherit","uploaded_to":2050202,"date":"2023-08-15 17:48:45","modified":"2023-08-15 17:50:09","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":2386,"height":898,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering.gif","medium-width":464,"medium-height":175,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering.gif","medium_large-width":768,"medium_large-height":289,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering.gif","large-width":1920,"large-height":723,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering-1536x578.gif","1536x1536-width":1536,"1536x1536-height":578,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering-2048x771.gif","2048x2048-width":2048,"2048x2048-height":771,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering-826x311.gif","card_image-width":826,"card_image-height":311,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/spatial_filtering-1920x723.gif","wide_image-width":1920,"wide_image-height":723}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Webscenes published with filters<\/h2>\n<p>Webscenes can be published with filters (both per feature filter and spatial filter) applied to an operational layer or layers. The filtering information can be read and honored by the Native Maps SDKs. A new model representing the data that was filtered can then be added as another operational layer for visualization.<\/p>\n<h2>Summary<\/h2>\n<p>In this article you learned about various advancements we have made to 3D visualization for ArcGIS Maps SDKs for Native Apps. You learned about the support for Relative surface placement for 3D object scene layer. Additionally, you also learned about the filtering capabilities and the different approaches to apply filtering on an ArcGISSceneLayer. To learn more about these new capabilities, please see our <a href=\"https:\/\/developers.arcgis.com\/\">documentation<\/a> and <a href=\"https:\/\/github.com\/Esri\/arcgis-maps-sdk-samples-qt\/tree\/main\/ArcGISRuntimeSDKQt_CppSamples\">samples<\/a> that demonstrate these functionalities.<\/p>\n<p>Please feel free to reach out to us with questions or enhancements by posting in the <a href=\"https:\/\/community.esri.com\/t5\/arcgis-maps-sdks-for-native-apps\/ct-p\/arcgis-runtime-sdks\">ArcGIS Maps SDKs for Native Apps Esri Community<\/a>. Happy filtering!!<\/p>\n<p><em>If you\u2019re new to developing with the ArcGIS Maps SDKs for Native Apps, each SDK (<\/em><a href=\"https:\/\/developers.arcgis.com\/net\/\"><em>.NET<\/em><\/a><em>,\u00a0<\/em><a href=\"https:\/\/developers.arcgis.com\/qt\/\"><em>Qt<\/em><\/a><em>,\u00a0<\/em><a href=\"https:\/\/developers.arcgis.com\/java\/\"><em>Java<\/em><\/a><em>,\u00a0<\/em><a href=\"https:\/\/developers.arcgis.com\/kotlin\/\"><em>Kotlin<\/em><\/a><em>\u00a0and\u00a0<\/em><a href=\"https:\/\/developers.arcgis.com\/swift\/\"><em>Swift<\/em><\/a><em>) has rich guide documentation, API reference, tutorials, and samples. You can create a <\/em><a href=\"https:\/\/developers.arcgis.com\/documentation\/mapping-apis-and-services\/get-started\/\"><em>free ArcGIS Developer account<\/em><\/a><em> and API key to get started building your applications.<\/em><\/p>\n<p>&nbsp;<\/p>\n"}],"related_articles":[{"ID":2051302,"post_author":"3811","post_date":"2023-08-16 07:00:51","post_date_gmt":"2023-08-16 14:00:51","post_content":"","post_title":"What\u2019s new in ArcGIS Maps SDKs for Native Apps 200.2","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"whats-new-in-arcgis-maps-sdks-for-native-apps-200-2","to_ping":"","pinged":"","post_modified":"2024-04-12 01:16:10","post_modified_gmt":"2024-04-12 08:16:10","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2051302","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/OSM-3D-Buildings-Manhattan-card.jpg","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/OSM-3D-Buildings-Manhattan.jpg"},"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>What&#039;s new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?<\/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\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What&#039;s new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-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=\"2024-04-12T08:16:10+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\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\"},\"author\":{\"name\":\"Koushik Hajra\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/bc6919b07c0800535d03064ff373a802\"},\"headline\":\"What&#8217;s new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?\",\"datePublished\":\"2023-08-16T14:02:12+00:00\",\"dateModified\":\"2024-04-12T08:16:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\"},\"wordCount\":12,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"3D visualization\",\"ArcGIS Maps SDKs for Native Apps\"],\"articleSection\":[\"3D Visualization &amp; Analytics\",\"Announcements\",\"Developers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\",\"name\":\"What's new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2023-08-16T14:02:12+00:00\",\"dateModified\":\"2024-04-12T08:16:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What&#8217;s new in 3D for ArcGIS Maps SDKs for Native Apps 200.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\/bc6919b07c0800535d03064ff373a802\",\"name\":\"Koushik Hajra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/82c2e5bcc4a327abbb93fa36a32ac27e07e28b729377c4a8dded6568b2edcdb8?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/82c2e5bcc4a327abbb93fa36a32ac27e07e28b729377c4a8dded6568b2edcdb8?s=96&d=blank&r=g\",\"caption\":\"Koushik Hajra\"},\"description\":\"Koushik is a Principal Product Engineer with the ArcGIS Runtime team. He primarily works on the 3D layers specializing in Qt SDK. He is passionate about building high quality functional APIs for our users. Koushik presents at Esri conferences like Developers Summit or the Users Conference where he talks about using the different parts of the Maps SDK.\",\"sameAs\":[\"www.linkedin.com\/in\/ koushik-hajra-2b32a41\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/khajra\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What's new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?","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\/developers\/announcements\/new-3d-maps-sdk-native-v200-2","og_locale":"en_US","og_type":"article","og_title":"What's new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2024-04-12T08:16:10+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\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2"},"author":{"name":"Koushik Hajra","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/bc6919b07c0800535d03064ff373a802"},"headline":"What&#8217;s new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?","datePublished":"2023-08-16T14:02:12+00:00","dateModified":"2024-04-12T08:16:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2"},"wordCount":12,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["3D visualization","ArcGIS Maps SDKs for Native Apps"],"articleSection":["3D Visualization &amp; Analytics","Announcements","Developers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2","name":"What's new in 3D for ArcGIS Maps SDKs for Native Apps 200.2?","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2023-08-16T14:02:12+00:00","dateModified":"2024-04-12T08:16:10+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"What&#8217;s new in 3D for ArcGIS Maps SDKs for Native Apps 200.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\/bc6919b07c0800535d03064ff373a802","name":"Koushik Hajra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/82c2e5bcc4a327abbb93fa36a32ac27e07e28b729377c4a8dded6568b2edcdb8?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/82c2e5bcc4a327abbb93fa36a32ac27e07e28b729377c4a8dded6568b2edcdb8?s=96&d=blank&r=g","caption":"Koushik Hajra"},"description":"Koushik is a Principal Product Engineer with the ArcGIS Runtime team. He primarily works on the 3D layers specializing in Qt SDK. He is passionate about building high quality functional APIs for our users. Koushik presents at Esri conferences like Developers Summit or the Users Conference where he talks about using the different parts of the Maps SDK.","sameAs":["www.linkedin.com\/in\/ koushik-hajra-2b32a41"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/khajra"}]}},"text_date":"August 16, 2023","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/announcements\/new-3d-maps-sdk-native-v200-2","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/OSM-3D-Buildings-Manhattan.jpg","primary_product":"Developers","tag_data":[{"term_id":23811,"name":"3D visualization","slug":"3d-visualization","term_group":0,"term_taxonomy_id":23811,"taxonomy":"post_tag","description":"","parent":0,"count":46,"filter":"raw"},{"term_id":768202,"name":"ArcGIS Maps SDKs for Native Apps","slug":"arcgis-maps-sdks-for-native-apps","term_group":0,"term_taxonomy_id":768202,"taxonomy":"post_tag","description":"","parent":0,"count":30,"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":686,"filter":"raw"},{"term_id":37101,"name":"Announcements","slug":"announcements","term_group":0,"term_taxonomy_id":37101,"taxonomy":"category","description":"","parent":0,"count":1962,"filter":"raw"},{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":421,"filter":"raw"}],"product_data":[{"term_id":761642,"name":"ArcGIS Location Platform","slug":"platform","term_group":0,"term_taxonomy_id":761642,"taxonomy":"product","description":"","parent":36601,"count":213,"filter":"raw"},{"term_id":769142,"name":"ArcGIS Maps SDK for .NET","slug":"sdk-net","term_group":0,"term_taxonomy_id":769142,"taxonomy":"product","description":"","parent":36601,"count":39,"filter":"raw"},{"term_id":769162,"name":"ArcGIS Maps SDK for Java","slug":"sdk-java","term_group":0,"term_taxonomy_id":769162,"taxonomy":"product","description":"","parent":36601,"count":24,"filter":"raw"},{"term_id":768902,"name":"ArcGIS Maps SDK for Kotlin","slug":"sdk-kotlin","term_group":0,"term_taxonomy_id":768902,"taxonomy":"product","description":"","parent":36601,"count":33,"filter":"raw"},{"term_id":769152,"name":"ArcGIS Maps SDK for Qt","slug":"sdk-qt","term_group":0,"term_taxonomy_id":769152,"taxonomy":"product","description":"","parent":36601,"count":36,"filter":"raw"},{"term_id":768912,"name":"ArcGIS Maps SDK for Swift","slug":"sdk-swift","term_group":0,"term_taxonomy_id":768912,"taxonomy":"product","description":"","parent":36601,"count":32,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":763,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=developers","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2050202","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\/10152"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2050202"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2050202\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2050202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2050202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2050202"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2050202"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2050202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}