{"id":76991,"date":"2017-05-23T07:00:12","date_gmt":"2017-05-23T07:00:12","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/products\/product\/uncategorized\/creating-a-predominance-visualization-with-arcade\/"},"modified":"2024-11-11T12:39:59","modified_gmt":"2024-11-11T20:39:59","slug":"creating-a-predominance-visualization-with-arcade","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade","title":{"rendered":"Creating a predominance visualization with Arcade"},"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,30111,24921,27491,33531,28531,26521],"industry":[],"product":[36831,36601],"class_list":["post-76991","blog","type-blog","status-publish","format-standard","hentry","category-arcade","category-mapping","tag-arcade","tag-arcade-expressions","tag-data-visualization","tag-javascript","tag-jsapi4","tag-predominance","tag-renderer","tag-visualization","product-js-api-arcgis","product-developers"],"acf":{"short_description":"At the March 2017 Esri Developer Summit, Dave Bayer and I gave a presentation on how to use Arcade expressions in web apps built on the A...","flexible_content":[{"acf_fc_layout":"content","content":"<p>At the March 2017 Esri Developer Summit, Dave Bayer and I gave <a href=\"https:\/\/www.youtube.com\/watch?v=X6_x3SbTeZU&amp;list=PLaPDDLTCmy4Z844nQ0aFdRCTICoNDPf7E&amp;index=101\">a presentation on how to use Arcade expressions in web apps<\/a> built on the ArcGIS platform. In that presentation I demonstrated a succinct way to create a <a href=\"https:\/\/arcgis-content.maps.arcgis.com\/apps\/MapJournal\/index.html?appid=20ac5ee0812b49f893d4f1b769e10e29\">predominance visualization<\/a> using <a href=\"https:\/\/developers.arcgis.com\/arcade\/\">Arcade<\/a>. <\/p>\n<p>Visualizing predominance involves coloring a layer&#8217;s features based on which attribute among a set of competing numeric attributes wins or beats the others in total count. Common applications of this include visualizing <a href=\"https:\/\/www.nytimes.com\/interactive\/2017\/04\/23\/world\/europe\/french-election-results-maps.html\">election results<\/a>, <a href=\"https:\/\/www.nytimes.com\/interactive\/2013\/12\/20\/sunday-review\/dialect-quiz-map.html\">survey results<\/a>, and <a href=\"https:\/\/www.esri.com\/products\/maps-we-love\/us-minority-populations\">demographic majorities<\/a>.<\/p>\n<p>Arcade is a good solution for predominance visualizations because it allows you to avoid creating new fields in a service for storing the predominant category and the margin of victory. With Arcade, you write the expression and it will return the values at runtime, allowing you to drive the color of the visualization based on the predominant category.<\/p>\n<p>In our Dev Summit presentation I shared <a href=\"https:\/\/www.arcgis.com\/home\/webmap\/viewer.html?webmap=f3f83b97f9c14c1abe79ed49810ba023\">this webmap<\/a>, which depicts the predominant educational attainment achieved by people in Mexico on the municipal level.<\/p>\n<p><a href=\"https:\/\/www.arcgis.com\/home\/webmap\/viewer.html?webmap=f3f83b97f9c14c1abe79ed49810ba023\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/Screen-Shot-2017-05-19-at-10.57.34-AM.png\" alt=\"\" width=\"1008\" height=\"596\" class=\"alignnone size-full wp-image-79145 noIMGBackground\" \/><\/a><\/p>\n<p>The expression used to create the visualization looks like this:<\/p>\n<pre>\r\n<span style=\"color: #998;font-style: italic\">\/\/ Calculate values based on attribute fields<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> primary = $feature.EDUC04_CY + $feature.EDUC07_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> secondary = $feature.EDUC06_CY + $feature.EDUC08_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> highSchool = $feature.EDUC09_CY + $feature.EDUC11_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> college = $feature.EDUC10_CY + $feature.EDUC12_CY\r\n              + $feature.EDUC13_CY+$feature.EDUC14_CY\r\n              + $feature.EDUC15_CY;\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ pass all values to an array<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> fields = [ $feature.EDUC01_CY, $feature.EDUC02_CY,\r\n               $feature.EDUC03_CY, $feature.EDUC05_CY,\r\n                primary, secondary,highSchool,college ];\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ get the max or winner<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> winner = Max(fields);\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ return the string describing the winning value<\/span>\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> Decode(winner,\r\n  $feature.EDUC01_CY, <span style=\"color: #d14\">\"Didn't attend any school\"<\/span>,\r\n  $feature.EDUC02_CY, <span style=\"color: #d14\">\"Preschool\"<\/span>,\r\n  $feature.EDUC03_CY, <span style=\"color: #d14\">\"Incomplete elementary school\"<\/span>,\r\n  primary, <span style=\"color: #d14\">\"Elementary school\"<\/span>,\r\n  $feature.EDUC05_CY, <span style=\"color: #d14\">\"Incomplete middle school\"<\/span>,\r\n  secondary, <span style=\"color: #d14\">\"Middle school\"<\/span>,\r\n  highSchool, <span style=\"color: #d14\">\"High school\"<\/span>,\r\n  college, <span style=\"color: #d14\">\"College\"<\/span>, <span style=\"color: #d14\">\"Other\"<\/span>);\r\n<\/pre>\n<p>Once you understand <a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/\">Arcade&#8217;s syntax<\/a> and what the <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/logical_functions\/#decode\">Decode()<\/a> function is doing, the expression is pretty straightforward to read. Decode is an Arcade function that matches a value (usually feature attribute) to another value among a set of potential matches. Each of the potential matches is paired with other values (usually a string) that describes it. In essence, it matches a value with a meaningful description. In this case, the input value to match is the maximum value of those field values\/expressions in the provided array. All values in the array are passed to the <code>Decode<\/code> function along with matching strings describing what the value represents. So the string matching the max will always be returned. It&#8217;s slick, compact, and simple to use with any dataset.<\/p>\n<h2>An alternate approach<\/h2>\n<p>However, one user at our presentation asked a great question: \u201cWhat if there\u2019s a tie for the top category?\u201d The answer we gave is that Decode will return the <strong>first<\/strong> match in the case of duplicate winners. While ties are relatively common in the datasets I\u2019ve looked at, very few of them involved the max value. Nevertheless, the Decode approach is flawed and doesn\u2019t address the real question: \u201cHow do we visualize ties for the top category?\u201d <\/p>\n<p>The solution I eventually came up takes advantage of Arcade\u2019s ability to write <a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/logic\/#user-defined-functions\">custom functions<\/a>. After testing the revised expression with several datasets, I found it easier to work with and the solution for dealing with tied max values satisfactory:<\/p>\n<pre>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> primary = $feature.EDUC04_CY + $feature.EDUC07_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> secondary = $feature.EDUC06_CY + $feature.EDUC08_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> highSchool = $feature.EDUC09_CY + $feature.EDUC11_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> college = $feature.EDUC10_CY + $feature.EDUC12_CY\r\n              + $feature.EDUC13_CY+$feature.EDUC14_CY\r\n              + $feature.EDUC15_CY;\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ The fields from which to calculate predominance<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ The expression will return the alias of the predominant field<\/span>\r\n\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> fields = [\r\n  { value: $feature.EDUC01_CY, alias: <span style=\"color: #d14\">\"Didn't attend any school\"<\/span> },\r\n  { value: $feature.EDUC02_CY, alias: <span style=\"color: #d14\">\"Preschool\"<\/span> },\r\n  { value: $feature.EDUC03_CY, alias: <span style=\"color: #d14\">\"Incomplete elementary school\"<\/span> },\r\n  { value: primary, alias: <span style=\"color: #d14\">\"Elementary school\"<\/span> },\r\n  { value: $feature.EDUC05_CY, alias: <span style=\"color: #d14\">\"Incomplete middle school\"<\/span> },\r\n  { value: secondary, alias: <span style=\"color: #d14\">\"Middle school\"<\/span> },\r\n  { value: highSchool, alias: <span style=\"color: #d14\">\"High school\"<\/span> },\r\n  { value: college, alias: <span style=\"color: #d14\">\"College\"<\/span> }\r\n];\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ Returns the predominant category as the alias<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ defined in the fields array. If there is a tie,<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ then both names are concatenated and used to<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ indicate the tie<\/span>\r\n\r\n<span><span style=\"color: #333;font-weight: bold\">function<\/span> <span style=\"color: #900;font-weight: bold\">getPredominantCategory<\/span>(<span>fieldsArray<\/span>)<\/span>{\r\n  <span style=\"color: #333;font-weight: bold\">var<\/span> maxValue = -<span style=\"color: #333;font-weight: 500\">Infinity<\/span>;\r\n  <span style=\"color: #333;font-weight: bold\">var<\/span> maxCategory = <span style=\"color: #d14\">\"\"<\/span>;\r\n  <span style=\"color: #333;font-weight: bold\">for<\/span>(<span style=\"color: #333;font-weight: bold\">var<\/span> k <span style=\"color: #333;font-weight: bold\">in<\/span> fieldsArray){\r\n    <span style=\"color: #333;font-weight: bold\">if<\/span>(fieldsArray[k].value &gt; maxValue){\r\n      maxValue = fieldsArray[k].value;\r\n      maxCategory = fieldsArray[k].alias;\r\n    } <span style=\"color: #333;font-weight: bold\">else<\/span> <span style=\"color: #333;font-weight: bold\">if<\/span> (fieldsArray[k].value == maxValue){\r\n      maxCategory = maxCategory + <span style=\"color: #d14\">\"\/\"<\/span> + fieldsArray[k].alias;\r\n    }\r\n  }\r\n  <span style=\"color: #333;font-weight: bold\">return<\/span> IIF(maxValue &lt;= <span style=\"color: #008080\">0<\/span>, <span style=\"color: #333;font-weight: 500\">null<\/span>, maxCategory);\r\n}\r\n\r\ngetPredominantCategory(fields);\r\n<\/pre>\n<p>The <strong><code>getPredominantCategory()<\/code><\/strong> function returns the alias of the max category as defined in the <strong><code>fieldsArray<\/code><\/strong>. Notice that if a tie value is encountered for the max value, then the aliases of all fields involved with the tie are concatenated and returned. <\/p>\n<h2>The results<\/h2>\n<p>Let&#8217;s take a look at how well this approach works using the <a href=\"https:\/\/developers.arcgis.com\/arcade\/playground\/\">Arcade playground<\/a>. I entered dummy field values representing the number of votes cast for three political parties in a fictitious feature and ran the expression. It correctly returned the maximum value.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/one-winner.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/one-winner.png\" alt=\"\" width=\"629\" height=\"490\" class=\"alignnone size-full wp-image-79163 noIMGBackground\" \/><\/a><\/p>\n<p>If the two lower values were tied, the same result was correctly returned since they don&#8217;t involve the maximum value.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/bottom-tie.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/bottom-tie.png\" alt=\"\" width=\"631\" height=\"488\" class=\"alignnone size-full wp-image-79164 noIMGBackground\" \/><\/a><\/p>\n<p>If two values were tied for first place, both aliases were returned as a concatenated string.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/tie-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/tie-2.png\" alt=\"\" width=\"630\" height=\"487\" class=\"alignnone size-full wp-image-79165 noIMGBackground\" \/><\/a><\/p>\n<p>In the unlikely event of a three-way tie, the expression even works in that scenario.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/tie-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/tie-3.png\" alt=\"\" width=\"626\" height=\"481\" class=\"alignnone size-full wp-image-79166 noIMGBackground\" \/><\/a><\/p>\n<p>And what if if all fields have the value of zero? It doesn&#8217;t seem right to visualize a tie since no votes were cast within the given feature. So the expression returns <code>null<\/code>, which will indicate to the layer&#8217;s renderer to not bother with visualizing the feature.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/no-votes.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/no-votes.png\" alt=\"\" width=\"628\" height=\"489\" class=\"alignnone size-full wp-image-79167 noIMGBackground\" \/><\/a><\/p>\n<p>But how does this approach change the visualization of the educational attainment dataset in Mexico? As a whole, the visualization didn&#8217;t change much. If we open up the &#8220;change style&#8221; options in the ArcGIS Online map viewer, we can compare the categories and their total counts between each method used.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/legend-comparison.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/legend-comparison.png\" alt=\"\" width=\"720\" height=\"540\" class=\"alignnone size-full wp-image-79148 noIMGBackground\" \/><\/a><\/p>\n<p>Two unique tie situations were found among six municipalities where ties existed for the max value of the fields. Notice that the map viewer allows you to group values. So if you have a bunch of unique tie scenarios, you can group them into the &#8220;Other&#8221; category and rename it to &#8220;tie&#8221; so they are visualized with the same symbol. <\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/name-to-tie.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/name-to-tie.gif\" alt=\"\" width=\"456\" height=\"386\" class=\"alignnone size-full wp-image-79142 noIMGBackground\" \/><\/a><\/p>\n<p>If building the visualization in a custom app with the ArcGIS API for JavaScript, you would use a <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-renderers-UniqueValueRenderer.html\">UniqueValueRenderer<\/a> and just set the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-renderers-UniqueValueRenderer.html#defaultSymbol\">defaultSymbol<\/a> and <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-renderers-UniqueValueRenderer.html#defaultLabel\">defaultLabel<\/a> to this generic value. Then you won&#8217;t need to specify each tie scenario in the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-renderers-UniqueValueRenderer.html#uniqueValueInfos\">uniqueValueInfos<\/a> of the renderer.<\/p>\n<p>Interestingly, three of the six ties occurred in the same region. We&#8217;ll zoom to northwestern Oaxaca to get a better look at comparing the different visualizations for each method. The labels on each feature indicate the % gap or margin between the top two competing fields. I&#8217;ve circled the features in black where the gap is 0% (or where a tie exists).<\/p>\n<p><strong>Decode methodology &#8211; no ties indicated<\/strong><\/p>\n<p>Notice that the features with ties incorrectly indicate a clear winner.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/map-no-tie.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/map-no-tie.png\" alt=\"\" width=\"937\" height=\"759\" class=\"alignnone size-full wp-image-79153 noIMGBackground\" \/><\/a><\/p>\n<p><strong>Custom function methodology &#8211; unique ties indicated<\/strong><\/p>\n<p>Unique ties are visualized with different colors.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/map-tie.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/map-tie.png\" alt=\"\" width=\"928\" height=\"765\" class=\"alignnone size-full wp-image-79154 noIMGBackground\" \/><\/a><\/p>\n<p><strong>Custom function methodology &#8211; all ties generically indicated<\/strong><\/p>\n<p>All ties are visualized with the same color after grouping them together.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/map-generic-tie.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/map-generic-tie.png\" alt=\"\" width=\"930\" height=\"766\" class=\"alignnone size-full wp-image-79155 noIMGBackground\" \/><\/a><\/p>\n<h2>Methods for indicating strength of predominance<\/h2>\n<p>I&#8217;ve used two different methods for visualizing the strength of the predominant value, or the overall dominance of the winner. They&#8217;re explained in more depth in the <a href=\"https:\/\/www.youtube.com\/watch?v=X6_x3SbTeZU&amp;list=PLaPDDLTCmy4Z844nQ0aFdRCTICoNDPf7E&amp;index=101\">session video<\/a> so I won&#8217;t go into too much depth describing the logic of the Arcade syntax used. <\/p>\n<p>The concept is that we&#8217;ll change the opacity value of each feature based on how convincing the win was between the competing values. This tells another side of the story, especially in the case of elections and survey results.<\/p>\n<p>Opacity can be driven by field values or Arcade expressions by clicking the &#8220;Attribute Values&#8221; link in the &#8220;Change style&#8221; options of ArcGIS Online.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/Screen-Shot-2017-05-19-at-12.14.19-PM.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/Screen-Shot-2017-05-19-at-12.14.19-PM.png\" alt=\"\" width=\"405\" height=\"186\" class=\"alignnone size-full wp-image-79156 noIMGBackground\" \/><\/a><\/p>\n<h3>Strength<\/h3>\n<p>The first method I simply call &#8220;strength of predominance&#8221;. It compares the value of the winner to all other values and returns its strength as a percentage:<\/p>\n<pre>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> primary = $feature.EDUC04_CY + $feature.EDUC07_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> secondary = $feature.EDUC06_CY + $feature.EDUC08_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> highSchool = $feature.EDUC09_CY + $feature.EDUC11_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> college = $feature.EDUC10_CY + $feature.EDUC12_CY+$feature.EDUC13_CY\r\n              +$feature.EDUC14_CY+$feature.EDUC15_CY;\r\n\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> fields = [ $feature.EDUC01_CY, $feature.EDUC02_CY,\r\n               $feature.EDUC03_CY, $feature.EDUC05_CY,\r\n                primary, secondary, highSchool, college ];\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> winner = Max(fields);\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> total = Sum(fields);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> (winner\/total)*<span style=\"color: #008080\">100<\/span>;\r\n<\/pre>\n<p>The percentage is then used to drive the opacity of each feature. The <a href=\"https:\/\/blogs.esri.com\/esri\/arcgis\/2015\/03\/02\/introducing-smart-mapping\/\">Smart mapping API<\/a> will provide good default breakpoints for the opacity values.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/strength.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/strength.png\" alt=\"\" width=\"928\" height=\"755\" class=\"alignnone size-full wp-image-79157 noIMGBackground\" \/><\/a><\/p>\n<p>Notice that features where ties exist can have varying levels of strength. In the image above, the northern-most circled feature has two attributes with high values that are tied. The competing field values might look something like this: <code>[40, 40, 10, 4, 2, 1, 1, 0]<\/code>. The strength expression would return 40%. The max of this feature is likely higher than the max in most other features; thus the feature is more opaque even though a tie exists.<\/p>\n<p>The southern-most circled feature may have the following values for its competing categories: <code>[20, 20, 19, 19, 10, 8, 3, 1]<\/code>. The strength expression would return 20%. The max is relatively low compared to the max value of other features, thus resulting in the vary transparent color.<\/p>\n<h3>Gap<\/h3>\n<p>The &#8220;Gap&#8221; methodology only compares the max value with the second highest value. The resulting value indicates how much the winning feature won by, also know as the &#8220;margin of victory&#8221;.<\/p>\n<pre>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> primary = $feature.EDUC04_CY + $feature.EDUC07_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> secondary = $feature.EDUC06_CY + $feature.EDUC08_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> highSchool = $feature.EDUC09_CY + $feature.EDUC11_CY;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> college = $feature.EDUC10_CY+$feature.EDUC12_CY\r\n             + $feature.EDUC13_CY + $feature.EDUC14_CY \r\n             + $feature.EDUC15_CY;\r\n\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> fields = [ $feature.EDUC01_CY, $feature.EDUC02_CY,\r\n              $feature.EDUC03_CY, $feature.EDUC05_CY,\r\n              primary, secondary,highSchool,college ];\r\n\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> order = Reverse(Sort(fields));\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> winner = order[<span style=\"color: #008080\">0<\/span>];\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> secondPlace = order[<span style=\"color: #008080\">1<\/span>];\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> total = Sum(fields);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> Round(((winner - secondPlace) \/ total) * <span style=\"color: #008080\">100<\/span>, <span style=\"color: #008080\">2<\/span>);\r\n<\/pre>\n<p>In this scenario, the tied features will always have a transparent fill.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/gap.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/gap.png\" alt=\"\" width=\"926\" height=\"756\" class=\"alignnone size-full wp-image-79158 noIMGBackground\" \/><\/a><\/p>\n<h2>Summary<\/h2>\n<p>Arcade can be a powerful vehicle for exploring predominance visualizations among competing attributes. I mentioned a couple of expressions you can use when creating predominance visualizations. Just remember the limitations of each:<\/p>\n<ul>\n<li>The <strong>Decode<\/strong> approach is fine if no ties are present or if you plan on driving opacity with a <strong>gap<\/strong> expression since gap will wash out the color anyway.<\/li>\n<li>The <strong>custom function<\/strong> works well in the case of ties. However, if many unique types of ties exist, you may want to visualize them grouped in a generic &#8220;tie&#8221; category to avoid confusion.<\/li>\n<\/ul>\n<p>Also note that you can leverage the Smart Mapping tools for this workflow. By simply selecting two or more fields in the map viewer, you can select the &#8220;Predominant category&#8221; style option to allow the map viewer to do all the work for you. <\/p>\n<p><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/Screen-Shot-2017-05-19-at-12.09.42-PM.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/Screen-Shot-2017-05-19-at-12.09.42-PM.png\" alt=\"\" width=\"393\" height=\"402\" class=\"alignnone size-full wp-image-79159 noIMGBackground\" \/><\/a><\/p>\n<p>Be sure to check out <a href=\"https:\/\/arcgis-content.maps.arcgis.com\/apps\/MapJournal\/index.html?appid=20ac5ee0812b49f893d4f1b769e10e29\">this story map<\/a> explaining how to visualize predominance in ArcGIS Online. However, you cannot use Arcade expressions for each value in this workflow. In the examples above, some values like &#8220;college degree&#8221; were the sum of multiple fields (e.g. bachelor + master + doctorate degree). The Arcade expressions shared above in this post allow you to perform additional calculations prior to generating the predominance visualization.<\/p>\n"}],"authors":[{"ID":6561,"user_firstname":"Kristian","user_lastname":"Ekenes","nickname":"Kristian Ekenes","user_nicename":"kekenes","display_name":"Kristian Ekenes","user_email":"KEkenes@esri.com","user_url":"https:\/\/github.com\/ekenes","user_registered":"2018-03-02 00:18:32","user_description":"Kristian Ekenes is a Principal Product Engineer at Esri specializing in data visualization on the web. He works on the ArcGIS Maps SDK for JavaScript, ArcGIS Arcade, and Map Viewer in ArcGIS Online. Kristian's work focuses on researching and developing new and innovative data visualization capabilities of geospatial data in web maps, Arcade integration in web maps, and applications of generative AI assistants in web maps. Prior to joining Esri, he worked as a GIS Specialist for an environmental consulting company. Kristian has degrees from Brigham Young University and Arizona State University.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/predominance-card.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/predominance-banner.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>Creating a predominance visualization with Arcade<\/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\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating a predominance visualization with Arcade\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade\" \/>\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:39:59+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\/creating-a-predominance-visualization-with-arcade#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade\"},\"author\":{\"name\":\"Kristian Ekenes\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b\"},\"headline\":\"Creating a predominance visualization with Arcade\",\"datePublished\":\"2017-05-23T07:00:12+00:00\",\"dateModified\":\"2024-11-11T20:39:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade\"},\"wordCount\":6,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"arcade\",\"arcade expressions\",\"data visualization\",\"JavaScript\",\"jsapi4\",\"predominance\",\"renderer\",\"Visualization\"],\"articleSection\":[\"Arcade\",\"Mapping\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade\",\"name\":\"Creating a predominance visualization with Arcade\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2017-05-23T07:00:12+00:00\",\"dateModified\":\"2024-11-11T20:39:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating a predominance visualization with Arcade\"}]},{\"@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":"Creating a predominance visualization with Arcade","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\/creating-a-predominance-visualization-with-arcade","og_locale":"en_US","og_type":"article","og_title":"Creating a predominance visualization with Arcade","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2024-11-11T20:39:59+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\/creating-a-predominance-visualization-with-arcade#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade"},"author":{"name":"Kristian Ekenes","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b"},"headline":"Creating a predominance visualization with Arcade","datePublished":"2017-05-23T07:00:12+00:00","dateModified":"2024-11-11T20:39:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade"},"wordCount":6,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["arcade","arcade expressions","data visualization","JavaScript","jsapi4","predominance","renderer","Visualization"],"articleSection":["Arcade","Mapping"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade","name":"Creating a predominance visualization with Arcade","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2017-05-23T07:00:12+00:00","dateModified":"2024-11-11T20:39:59+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/mapping\/creating-a-predominance-visualization-with-arcade#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Creating a predominance visualization with Arcade"}]},{"@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":"May 23, 2017","author_name":"Kristian Ekenes","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/05\/predominance-banner.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":30111,"name":"data visualization","slug":"data-visualization","term_group":0,"term_taxonomy_id":30111,"taxonomy":"post_tag","description":"","parent":0,"count":97,"filter":"raw"},{"term_id":24921,"name":"JavaScript","slug":"javascript","term_group":0,"term_taxonomy_id":24921,"taxonomy":"post_tag","description":"","parent":0,"count":151,"filter":"raw"},{"term_id":27491,"name":"jsapi4","slug":"jsapi4","term_group":0,"term_taxonomy_id":27491,"taxonomy":"post_tag","description":"","parent":0,"count":111,"filter":"raw"},{"term_id":33531,"name":"predominance","slug":"predominance","term_group":0,"term_taxonomy_id":33531,"taxonomy":"post_tag","description":"","parent":0,"count":5,"filter":"raw"},{"term_id":28531,"name":"renderer","slug":"renderer","term_group":0,"term_taxonomy_id":28531,"taxonomy":"post_tag","description":"","parent":0,"count":6,"filter":"raw"},{"term_id":26521,"name":"Visualization","slug":"visualization","term_group":0,"term_taxonomy_id":26521,"taxonomy":"post_tag","description":"","parent":0,"count":45,"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":2698,"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":363,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":765,"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\/76991","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=76991"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/76991\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=76991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=76991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=76991"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=76991"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=76991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}