{"id":403392,"date":"2019-01-15T08:00:41","date_gmt":"2019-01-15T16:00:41","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=403392"},"modified":"2024-11-11T12:35:28","modified_gmt":"2024-11-11T20:35:28","slug":"create-powerful-popups-in-web-apps-with-arcade-feature-sets","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets","title":{"rendered":"Create powerful popups in web apps with Arcade feature sets"},"author":6561,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[777102,22941],"tags":[32551,32521,31311,212872],"industry":[],"product":[36831,36601],"class_list":["post-403392","blog","type-blog","status-publish","format-standard","hentry","category-arcade","category-mapping","tag-arcade","tag-arcade-expressions","tag-jsapi3","tag-popups","product-js-api-arcgis","product-developers"],"acf":{"short_description":"Feature sets allow you to access multiple features within an Arcade expression, enabling you to create powerful popup content.","flexible_content":[{"acf_fc_layout":"content","content":"<p>In December 2018 the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jshelp\/whats_new.html\">3.27 ArcGIS API for JavaScript<\/a> released support for accessing data from multiple data sources inside a single feature\u2019s popup. This is accomplished using the <a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/types\/#featureset\">Feature Set<\/a> functions made available in <a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/release-notes\/#version-15\">ArcGIS Arcade version 1.5<\/a>. Feature Sets allow you to query features from any layer in a map or feature service within the context of a feature&#8217;s popup and use those features&#8217; attributes and geometries in calculations. The results of those calculations, otherwise not present in the feature&#8217;s attributes, can be displayed in the popup.<\/p>\n<p>For example, you can use feature sets to compare the value of a feature\u2019s attribute to the same attribute in neighboring features; summarize the number of points in another layer within a polygon feature; or compare a feature\u2019s value to the mean of all features in the same layer.<\/p>\n<p>In this post we\u2019ll use feature sets in an Arcade expression to calculate the floor area ratio of buildings in land parcels. If you&#8217;re unfamiliar with Arcade, I encourage you to check out the following resources:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/using-arcade-expressions-in-web-apps\/\">Using Arcade expressions in web apps<\/a><\/li>\n<li><a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/\">Arcade Guide: Getting Started<\/a><\/li>\n<li><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/guide\/arcade\/index.html\">JS API Guide: Arcade &#8211; expression language<\/a><\/li>\n<li><a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/apps\/uncategorized\/introducing-arcade\/\">Introducing Arcade<\/a><\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":403532,"id":403532,"title":"popup-open","filename":"popup-open.png","filesize":43865,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\/popup-open","alt":"","author":"6561","description":"","caption":"This app uses a feature set in an Arcade expression to calculate a land parcel's floor area ratio using the geometry of a building queried from a separate layer.","name":"popup-open","status":"inherit","uploaded_to":403392,"date":"2019-01-09 01:20:53","modified":"2019-01-09 22:17:23","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":596,"height":388,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open-300x195.png","medium-width":300,"medium-height":195,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open.png","medium_large-width":596,"medium_large-height":388,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open.png","large-width":596,"large-height":388,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open.png","1536x1536-width":596,"1536x1536-height":388,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open.png","2048x2048-width":596,"2048x2048-height":388,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open.png","card_image-width":596,"card_image-height":388,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/popup-open.png","wide_image-width":596,"wide_image-height":388}},"image_position":"center","orientation":"horizontal","hyperlink":"https:\/\/ekenes.github.io\/esri-js-samples\/3\/arcade\/featureset-far.html"},{"acf_fc_layout":"content","content":"<h2>Floor Area Ratio<\/h2>\n<p><a href=\"https:\/\/www.planning.org\/pas\/reports\/report111.htm\">Floor area ratio (FAR)<\/a> is defined as the ratio of the gross floor area of all buildings on a lot to the area of the lot. For example, if a lot has one building with one level that completely covers the lot, then the FAR of the lot is 1.0. If the lot has an FAR of 1.0, but the building has two levels, that indicates the lot is 50% covered.<\/p>\n<p>The image below, which appears in an <a href=\"https:\/\/www.planning.org\/pas\/reports\/report111.htm\">historic information report<\/a> from the American Planning Association, depicts how FAR values of 1.0, 4.0, and 9.0 appear in various scenarios.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":403542,"id":403542,"title":"far-overview","filename":"far-overview.jpg","filesize":295590,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview.jpg","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\/far-overview","alt":"","author":"6561","description":"","caption":"Illustrations of Floor Area Ratios. Source: A New Zoning Plan for the District of Columbia. Harold M. Lewis, 1956.","name":"far-overview","status":"inherit","uploaded_to":403392,"date":"2019-01-09 01:26:35","modified":"2019-01-09 01:28:03","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1820,"height":2472,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview-150x150.jpg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview-221x300.jpg","medium-width":192,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview-768x1043.jpg","medium_large-width":768,"medium_large-height":1043,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview-754x1024.jpg","large-width":754,"large-height":1024,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview.jpg","1536x1536-width":1131,"1536x1536-height":1536,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview.jpg","2048x2048-width":1508,"2048x2048-height":2048,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview-342x465.jpg","card_image-width":342,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/far-overview-795x1080.jpg","wide_image-width":795,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>FAR is used in zoning to control the volume of buildings in particular zones. For example, a commercial zone may limit building up a parcel to an FAR of 5.0, thus allowing for taller buildings, while residential zones may limit building in parcels to an FAR of 0.3. <\/p>\n<p>This measure has also been used in real estate applications as one of many factors for analyzing the price per square foot of a structure.<\/p>\n<p>Check out the <a href=\"https:\/\/ekenes.github.io\/esri-js-samples\/3\/arcade\/featureset-far.html\">following app<\/a>, which displays two layers in a map: one for parcels and one for buildings. The parcels don\u2019t have FAR in the attributes, but we can calculate that using Arcade and display it to the user as they click a parcel. Go ahead and try it! Explore the map, clicking on some parcels to view the FAR value.<\/p>\n"},{"acf_fc_layout":"storymap","title":"","description":"","static":false,"storymap_url":"<a href=\"https:\/\/ekenes.github.io\/esri-js-samples\/3\/arcade\/featureset-far.html\">https:\/\/ekenes.github.io\/esri-js-samples\/3\/arcade\/featureset-far.html<\/a>"},{"acf_fc_layout":"content","content":"<h2>How it works<\/h2>\n<p>The following snippet shows the bulk of the JavaScript used in this application, which you&#8217;ll note isn&#8217;t too verbose. <\/p>\n<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">const<\/span> farArcade = <span style=\"color: #d14\">`\r\n  var buildingFootprints = Intersects($feature, FeatureSetByName($map, \"Building Footprints\"));\r\n  \r\n  var grossFloorArea = 0;\r\n  for (var building in buildingFootprints){\r\n    var floors = IIF(building.FLOORCOUNT == 0, 1, building.FLOORCOUNT);\r\n    grossFloorArea += ( AreaGeodetic( Intersection(building, $feature), 'square-feet') * floors );\r\n  }\r\n\r\n  Round( ( grossFloorArea \/ AreaGeodetic($feature, 'square-feet') ), 1);\r\n`<\/span>;\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ Loads the necessary resources for the expression including the<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ geometry engine and permits async execution of the script<\/span>\r\npopupProfile.initialize( [ farArcade ] ).then(<span><span style=\"color: #333;font-weight: bold\">function<\/span>(<span><\/span>)<\/span>{\r\n  <span style=\"color: #998;font-style: italic\">\/\/ loads layers from a webmap with the given id<\/span>\r\n  arcgisUtils.createMap(<span style=\"color: #d14\">\"da634028a734418f8a5416c675559c3a\"<\/span>, <span style=\"color: #d14\">\"map\"<\/span>)\r\n    .then(<span><span style=\"color: #333;font-weight: bold\">function<\/span> (<span>response<\/span>) <\/span>{\r\n      <span style=\"color: #333;font-weight: bold\">const<\/span> map = response.map;\r\n      <span style=\"color: #333;font-weight: bold\">const<\/span> layerIds = map.graphicsLayerIds;\r\n      <span style=\"color: #333;font-weight: bold\">const<\/span> layer = map.getLayer(layerIds[<span style=\"color: #008080\">1<\/span>]);\r\n\r\n      <span style=\"color: #998;font-style: italic\">\/\/ Reference the expression in the popup template and set it on the parcels layer<\/span>\r\n      layer.setInfoTemplate( <span style=\"color: #333;font-weight: bold\">new<\/span> PopupTemplate({\r\n        description: <span style=\"color: #d14\">\"Floor Area Ratio (FAR): {expression\/far}\"<\/span>,\r\n        expressionInfos: [{\r\n          name: <span style=\"color: #d14\">\"far\"<\/span>,\r\n          title: <span style=\"color: #d14\">\"far\"<\/span>,\r\n          expression: farArcade\r\n        }]\r\n      }) );\r\n    });\r\n});\r\n<\/code><\/pre>\n<p>The Arcade expression is stored as a string and initialized using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/esri.arcadeprofiles.popupprofile-amd.html\">esri\/arcadeProfiles\/popupProfile<\/a> module. This initialization is critical because it inspects the script and loads all required dependencies for it to properly execute. Since <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/geometry_functions\/\">geometry functions<\/a> and <a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/logic\/#featuresets\">feature set functions<\/a> are used, the popup needs to load the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/esri.geometry.geometryengineasync-amd.html\">geometryEngine<\/a> and allow the expression to execute in an asynchronous environment. The async behavior is required because network requests will likely be made during the execution of the script.<\/p>\n<p>Once the script is initialized, we can set it in the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/popuptemplate-amd.html\">PopupTemplate<\/a> of the parcels layer.<\/p>\n<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #998;font-style: italic\">\/\/ Reference the expression in the popup template and set it on the parcels layer<\/span>\r\nlayer.setInfoTemplate( <span style=\"color: #333;font-weight: bold\">new<\/span> PopupTemplate({\r\n  description: <span style=\"color: #d14\">\"Floor Area Ratio (FAR): {expression\/far}\"<\/span>,\r\n  expressionInfos: [{\r\n    name: <span style=\"color: #d14\">\"far\"<\/span>,\r\n    title: <span style=\"color: #d14\">\"far\"<\/span>,\r\n    expression: farArcade\r\n  }]\r\n}) );\r\n<\/code><\/pre>\n<p>Let&#8217;s take a close look at the expression itself. Remember, the goal is to calculate FAR for the parcel. Keep in mind the parcel layer doesn&#8217;t have this data, nor does it have data related to buildings or building area in the feature attributes.<\/p>\n<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #998;font-style: italic\">\/\/ buildingFootprints represents the buildings that intersect the clicked parcel<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> buildingFootprints = Intersects($feature, FeatureSetByName($map, <span style=\"color: #d14\">\"Building Footprints\"<\/span>));\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> totalArea = <span style=\"color: #008080\">0<\/span>;\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ since a building may have multiple floors, we must multiply the floor area by the number<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ of floors. Also note the building data shows some buildings in dense areas as crossing<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ multiple polygons. To avoid miscalculation, we calculate the intersection of the building.<\/span>\r\n<span style=\"color: #333;font-weight: bold\">for<\/span> (<span style=\"color: #333;font-weight: bold\">var<\/span> building <span style=\"color: #333;font-weight: bold\">in<\/span> buildingFootprints){\r\n  <span style=\"color: #333;font-weight: bold\">var<\/span> floors = IIF(building.FLOORCOUNT == <span style=\"color: #008080\">0<\/span>, <span style=\"color: #008080\">1<\/span>, building.FLOORCOUNT);\r\n  totalArea += ( AreaGeodetic( Intersection(building, $feature), <span style=\"color: #d14\">'square-feet'<\/span>) * floors );\r\n}\r\n<span style=\"color: #998;font-style: italic\">\/\/ Compute the ratio of the gross building area to the parcel area<\/span>\r\nRound( ( totalArea \/ AreaGeodetic($feature, <span style=\"color: #d14\">'square-feet'<\/span>) ), <span style=\"color: #008080\">1<\/span>);\r\n<\/code><\/pre>\n<p>The first line of the expression executes a query that returns all buildings that intersect the clicked parcel. <\/p>\n<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #998;font-style: italic\">\/\/ queries for all buildings that intersect the clicked feature<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> buildingFootprints = Intersects($feature, FeatureSetByName($map, <span style=\"color: #d14\">\"Building Footprints\"<\/span>));\r\n<\/code><\/pre>\n<p>Two functions are used in this line: <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/geometry_functions\/#intersects\">Intersects()<\/a> and <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/data_functions\/#featuresetbyname\">FeatureSetByName()<\/a>. <code>FeatureSetByName<\/code> returns a <a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/types\/#featureset\">FeatureSet<\/a>, which is a <em>representation<\/em> of all the features of another layer in the map. In this case, the feature set refers to all features in the layer with the name \u201cBuilding Footprints\u201d. <\/p>\n<p>Note my use of the word <em>representation<\/em> in the previous paragraph. At this point, the expression does not execute a query for ALL features in that layer. No query is made until the FeatureSet is used in another function parameter or statement. In the case of this expression, we use it immediately in the <code>Intersects<\/code> function. This is an example of <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-online\/mapping\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\/#chaining-number-of-queries-and-performance\">chaining<\/a> functions for improving performance.<\/p>\n<p><code>Intersects<\/code> builds and executes a query for all features in the input FeatureSet (i.e. the buildings layer) that intersect the input geometry (the clicked parcel), and returns those features as a FeatureSet. So in layman\u2019s terms, we&#8217;re executing a query for all buildings that intersect the clicked parcel. You can observe this behavior when you inspect the network traffic upon clicking the feature.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":404722,"id":404722,"title":"network-traffic","filename":"network-traffic.png","filesize":123241,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\/network-traffic","alt":"","author":"6561","description":"","caption":"Effectively chaining Arcade functions is crucial for maintaining reasonable performance in expressions that use feature sets. In this case, the parcel geometry will query for buildings that intersect it, ensuring that we'll work with 1 - 3 buildings in the majority of cases.","name":"network-traffic","status":"inherit","uploaded_to":403392,"date":"2019-01-09 22:42:28","modified":"2019-01-09 22:45: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":1245,"height":378,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic-300x91.png","medium-width":300,"medium-height":91,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic-768x233.png","medium_large-width":768,"medium_large-height":233,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic-1024x311.png","large-width":1024,"large-height":311,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic.png","1536x1536-width":1245,"1536x1536-height":378,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic.png","2048x2048-width":1245,"2048x2048-height":378,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic-826x251.png","card_image-width":826,"card_image-height":251,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/network-traffic.png","wide_image-width":1245,"wide_image-height":378}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Once the building footprint features have been fetched, they are now available on the client, allowing the rest of this expression to execute client-side.<\/p>\n<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> grossFloorArea = <span style=\"color: #008080\">0<\/span>;\r\n<span style=\"color: #333;font-weight: bold\">for<\/span> (<span style=\"color: #333;font-weight: bold\">var<\/span> building <span style=\"color: #333;font-weight: bold\">in<\/span> buildingFootprints){\r\n  <span style=\"color: #333;font-weight: bold\">var<\/span> floors = IIF(building.FLOORCOUNT == <span style=\"color: #008080\">0<\/span>, <span style=\"color: #008080\">1<\/span>, building.FLOORCOUNT);\r\n  <span style=\"color: #998;font-style: italic\">\/\/ multiply the square footage of the footprint by the number of floors<\/span>\r\n  grossFloorArea += ( AreaGeodetic( Intersection(building, $feature), <span style=\"color: #d14\">'square-feet'<\/span>) * floors );\r\n}\r\n<\/code><\/pre>\n<p>Note the <code>buildingFootprints<\/code> variable is a FeatureSet of <em>client-side features<\/em>, as opposed to a <em>reference to a service<\/em>. <\/p>\n<p>I then iterate through each feature in the FeatureSet and sum the gross floor area of all buildings (e.g. floor area * number of floors) intersecting the parcel.<\/p>\n<p>Notice that I also calculate the intersection of the building and the parcel. This particular buildings dataset contains generalized buildings that span multiple parcels in more dense areas. Without calculating the intersection of the building to the parcel, the expression would return FAR values much higher than they are in reality. The parcels in this image, for example, intersect a single one-story building.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":406152,"id":406152,"title":"one-building-many-parcels","filename":"one-building-many-parcels-1.png","filesize":75344,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\/one-building-many-parcels-2","alt":"","author":"6561","description":"","caption":"In the image above, the black polygon represents one building feature. If the Intersection of the building and the parcel weren't computed, the FAR value of each parcel in this image would be greatly exaggerated.","name":"one-building-many-parcels-2","status":"inherit","uploaded_to":403392,"date":"2019-01-10 19:44:41","modified":"2019-01-10 19:46:26","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":450,"height":309,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1-300x206.png","medium-width":300,"medium-height":206,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1.png","medium_large-width":450,"medium_large-height":309,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1.png","large-width":450,"large-height":309,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1.png","1536x1536-width":450,"1536x1536-height":309,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1.png","2048x2048-width":450,"2048x2048-height":309,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1.png","card_image-width":450,"card_image-height":309,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/one-building-many-parcels-1.png","wide_image-width":450,"wide_image-height":309}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Although the building in the image above is only one story, the intersecting parcels would report a much larger FAR, often eclipsing 10.0 to 14.0. The <code>Intersection<\/code> function allows me to only account for the intersecting portion of the one-story building in the parcel, and thus get more realistic values for this area, usually between 0.6 and 1.0.<\/p>\n<p>The final line of the expression completes the final FAR calculation, dividing the gross floor area by the area of the parcel.<\/p>\n<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\nRound( ( grossFloorArea \/ AreaGeodetic($feature, <span style=\"color: #d14\">'square-feet'<\/span>) ), <span style=\"color: #008080\">1<\/span>);\r\n<\/code><\/pre>\n<p>Since FAR is typically expressed as a number rounded to one decimal place, we can use the <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/math_functions\/#round\">Round<\/a> function to help us with that as well.<\/p>\n<h2>Summary<\/h2>\n<p>Keep in mind this Arcade expression is just an approximation of FAR. It does not account for the shape of the buildings, what counts as a floor, or whether all floors have the same square footage. It makes a lot of general assumptions. However, this example does provide a glimpse into the power and complexity FeatureSets can bring to your apps.<\/p>\n<p>Note also that the unwise use of feature sets in Arcade expressions can cause popup performance to suffer. Here are a few suggestions of good practices when working with feature sets in Arcade expressions:<\/p>\n<ul>\n<li><strong>Avoid iterating through all features in a layer.<\/strong> This action requires the expression to fetch all features from the service. The query itself can be slow, and depending on how many features are in your layer, the iteration can slow things down as well.<\/li>\n<li><strong>Chain functions as much as possible.<\/strong> If you can reduce two or three requests down to one via chaining, then do it! Limiting the number of trips to the server will keep the app more useable.<\/li>\n<li><strong>Keep the expression as simple as possible.<\/strong> Using seven geometry functions in a complex 100-line expression may make you feel like an Arcade ninja, but it could cause your users to spend extra time waiting for popup content to show up while unnecessary processing takes place behind the scenes. Geometry operations can be especially slow if you are working with complex features with many vertices.<\/li>\n<li><strong>If you don\u2019t need it, don\u2019t request it!<\/strong> If you\u2019re creating a Feature Set, only request the fields you need. If you&#8217;re not using geometry functions, then be sure to exclude geometries from the feature set. Small details like this can go a long way in improving performance.<\/li>\n<\/ul>\n<p>If you&#8217;re interested in learning more about feature sets, I encourage you to read the following blogs by <a href=\"https:\/\/www.esri.com\/arcgis-blog\/author\/pbarker_esri\/\">Paul Barker<\/a>, who describes FeatureSets in detail with additional context.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-online\/mapping\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-1\/\">Taking a stroll through feature sets part 1<\/a><\/li>\n<li><a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-online\/mapping\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\/\">Taking a stroll through feature sets part 2<\/a><\/li>\n<\/ul>\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'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/banner-small-1.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/banner-big-1.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>ArcGIS blog - Create powerful popups in web apps with Arcade feature sets in web apps<\/title>\n<meta name=\"description\" content=\"Feature sets allow you to access multiple features within an Arcade expression, enabling you to create powerful popup content.\" \/>\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\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create powerful popups in web apps with Arcade feature sets\" \/>\n<meta property=\"og:description\" content=\"Feature sets allow you to access multiple features within an Arcade expression, enabling you to create powerful popup content.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\" \/>\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-11-11T20:35:28+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\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\"},\"author\":{\"name\":\"Kristian Ekenes\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b\"},\"headline\":\"Create powerful popups in web apps with Arcade feature sets\",\"datePublished\":\"2019-01-15T16:00:41+00:00\",\"dateModified\":\"2024-11-11T20:35:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\"},\"wordCount\":10,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"arcade\",\"arcade expressions\",\"jsapi3\",\"popups\"],\"articleSection\":[\"Arcade\",\"Mapping\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\",\"name\":\"ArcGIS blog - Create powerful popups in web apps with Arcade feature sets in web apps\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2019-01-15T16:00:41+00:00\",\"dateModified\":\"2024-11-11T20:35:28+00:00\",\"description\":\"Feature sets allow you to access multiple features within an Arcade expression, enabling you to create powerful popup content.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create powerful popups in web apps with Arcade feature sets\"}]},{\"@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":"ArcGIS blog - Create powerful popups in web apps with Arcade feature sets in web apps","description":"Feature sets allow you to access multiple features within an Arcade expression, enabling you to create powerful popup content.","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\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets","og_locale":"en_US","og_type":"article","og_title":"Create powerful popups in web apps with Arcade feature sets","og_description":"Feature sets allow you to access multiple features within an Arcade expression, enabling you to create powerful popup content.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2024-11-11T20:35:28+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\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets"},"author":{"name":"Kristian Ekenes","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b"},"headline":"Create powerful popups in web apps with Arcade feature sets","datePublished":"2019-01-15T16:00:41+00:00","dateModified":"2024-11-11T20:35:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets"},"wordCount":10,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["arcade","arcade expressions","jsapi3","popups"],"articleSection":["Arcade","Mapping"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets","name":"ArcGIS blog - Create powerful popups in web apps with Arcade feature sets in web apps","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2019-01-15T16:00:41+00:00","dateModified":"2024-11-11T20:35:28+00:00","description":"Feature sets allow you to access multiple features within an Arcade expression, enabling you to create powerful popup content.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/create-powerful-popups-in-web-apps-with-arcade-feature-sets#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Create powerful popups in web apps with Arcade feature sets"}]},{"@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":"January 15, 2019","author_name":"Kristian Ekenes","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/banner-big-1.png","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":32551,"name":"arcade","slug":"arcade","term_group":0,"term_taxonomy_id":32551,"taxonomy":"post_tag","description":"","parent":0,"count":113,"filter":"raw"},{"term_id":32521,"name":"arcade expressions","slug":"arcade-expressions","term_group":0,"term_taxonomy_id":32521,"taxonomy":"post_tag","description":"","parent":0,"count":27,"filter":"raw"},{"term_id":31311,"name":"jsapi3","slug":"jsapi3","term_group":0,"term_taxonomy_id":31311,"taxonomy":"post_tag","description":"","parent":0,"count":19,"filter":"raw"},{"term_id":212872,"name":"popups","slug":"popups","term_group":0,"term_taxonomy_id":212872,"taxonomy":"post_tag","description":"","parent":0,"count":12,"filter":"raw"}],"category_data":[{"term_id":777102,"name":"Arcade","slug":"arcade","term_group":0,"term_taxonomy_id":777102,"taxonomy":"category","description":"","parent":0,"count":98,"filter":"raw"},{"term_id":22941,"name":"Mapping","slug":"mapping","term_group":0,"term_taxonomy_id":22941,"taxonomy":"category","description":"","parent":0,"count":2683,"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":361,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":761,"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\/403392","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=403392"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/403392\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=403392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=403392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=403392"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=403392"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=403392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}