{"id":69291,"date":"2015-09-23T04:00:51","date_gmt":"2015-09-23T04:00:51","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/products\/product\/uncategorized\/geometryengine-part-3-overlay-analysis\/"},"modified":"2023-03-15T14:57:43","modified_gmt":"2023-03-15T21:57:43","slug":"geometryengine-part-3-overlay-analysis","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis","title":{"rendered":"GeometryEngine part 3: Overlay analysis"},"author":6561,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191,22941],"tags":[28391,28401,24921,28481,28491,24961,28501],"industry":[],"product":[36831,36601],"class_list":["post-69291","blog","type-blog","status-publish","format-standard","hentry","category-developers","category-mapping","tag-geometry","tag-geometryengine","tag-javascript","tag-overlay","tag-spatial-overlay","tag-web-gis","tag-webgis","product-js-api-arcgis","product-developers"],"acf":{"short_description":"This is the final post in a three-part series exploring the client-side\u00a0GeometryEngine in the ArcGIS API for JavaScript. This series cov...","flexible_content":[{"acf_fc_layout":"content","content":"<p>This is the final post in a <a href=\"http:\/\/blogs.esri.com\/esri\/arcgis\/tag\/geometryengine\/\">three-part series<\/a> exploring the client-side\u00a0<a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html\">GeometryEngine<\/a> in the ArcGIS API for JavaScript. This series covers the following topics:<\/p>\n<ul>\n<li><a href=\"http:\/\/blogs.esri.com\/esri\/arcgis\/2015\/09\/09\/geometryengine-part-1-testing-spatial-relationships-and-editing\/\">Part 1: Testing spatial relationships and editing<\/a><\/li>\n<li><a href=\"http:\/\/blogs.esri.com\/esri\/arcgis\/2015\/09\/16\/geometryengine-part-2-measurement\/\">Part 2: Measurement<\/a><\/li>\n<li>Part 3: Overlay Analysis<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blogs.esri.com\/esri\/arcgis\/2015\/09\/09\/geometryengine-part-1-testing-spatial-relationships-and-editing\/\">In the first post<\/a>, we reviewed testing functions GeometryEngine provides that are useful for <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-demo\/\">editing geometries<\/a> in web applications. <a href=\"http:\/\/blogs.esri.com\/esri\/arcgis\/2015\/09\/16\/geometryengine-part-2-measurement\/\">In the second post<\/a>, we explored measurement and proximity functions, such as <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#buffer\">buffer<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#geodesicarea\">area<\/a>, and <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#geodesiclength\">length<\/a> and established when to use the planar and geodesic versions of each.<\/p>\n<p>In this final post, we\u2019ll take a look at GeometryEngine\u2019s overlay methods that can be leveraged to perform simple spatial analysis for data exploration purposes. These overlay functions include <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#clip\">clip<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#difference\">difference<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#intersect\">intersect<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#union\">union<\/a>, and <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#symmetricdifference\">symmetricDifference<\/a>.<\/p>\n<p>The <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-overlay\/\">following sample<\/a> demonstrates how three of these overlay functions can work together to create a simple application with the purpose of exploring land ownership. Specifically, this app allows users to click or drag the mouse anywhere in the state of Utah to view privately-owned land and compare it to public land within 10 miles of the mouse location. It then generates a pie chart, which compares the areas of each land type to each other.<\/p>\n<p>Whether you want to know the area affected by fire or flood within a certain distance of a point, or the habitat of sensitive or endangered species within the buffer of a project area, applications such as these are useful because they can explore spatial relationships and perform preliminary calculations prior to doing hefty GIS analysis.<\/p>\n<p><strong><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-overlay\/\">Open sample: Overlay in GeometryEngine<\/a><\/strong><br \/>\n<a title=\"Click image to open sample\" href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-overlay\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-54674\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2015\/09\/ge-overlay2.gif\" alt=\"\" width=\"512\" height=\"256\" \/><\/a><\/p>\n<p>Notice how quickly it takes for this whole process to run. The performance of this app varies depending on the complexity of features involved on any given mouse click or drag. But the experience would be much slower if this were attempted with <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/geometryservice-amd.html\">GeometryService<\/a> or a custom <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/geoprocessor-amd.html\">geoprocessing task<\/a>.<\/p>\n<p>This app uses geometries from the graphics of a layer representing privately owned land in Utah as a basis for the analysis. The following functions are used to produce the results: <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#geodesicbuffer\">geodesicBuffer<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#intersect\">intersect<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#union\">union<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#difference\">difference<\/a>, and <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#geodesicarea\">geodesicArea<\/a>. In addition, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#intersects\">intersects<\/a> (note the \u2018s\u2019), <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#within\">within<\/a>, and <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#overlaps\">overlaps<\/a> are used to test the spatial relationship of features to ensure the analysis is done within the state of Utah and that proper inputs are in place before any overlay operations are performed.<\/p>\n<p>Let&#8217;s take a look at the code to see how these methods all work together in generating our results.<\/p>\n<h1>Overlay sample workflow<\/h1>\n<p>First, the buffer is created using <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#geodesicbuffer\">geodesicBuffer<\/a> with the mouse location as the center point. The <code>evt<\/code> object containing the mapPoint is retrieved on each mouse-click and mouse-drag.<\/p>\n<pre><code style=\"color: #333;background: #f8f8f8\"><span style=\"color: #333;font-weight: bold\">var<\/span> centerPt = evt.mapPoint;\r\n<span style=\"color: #998;font-style: italic\">\/\/Generate buffer of mouse location<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> buffGeom = geometryEngine.geodesicBuffer(centerPt, <span style=\"color: #008080\">10<\/span>, <span style=\"color: #d14\">\"miles\"<\/span>);<\/code><\/pre>\n<p>Now we have a 10-mile buffer. Prior to performing any overlay, it is good practice to test the spatial relationship of the buffer with bounding geometries. In this case we don&#8217;t want to attempt an overlay if the buffer exists outside the Utah state boundary since there won&#8217;t be any features to overlay outside the state. Also, if the buffer is partially within the state, we only want to keep the portion of the buffer&#8217;s geometry that overlaps the state. If there is overlap, we&#8217;ll use <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#intersect\">intersect<\/a> to only get the intersecting portion of the geometries.<\/p>\n<pre style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #998;font-style: italic\">\/\/check if buffer is completely within Utah -- UtahBoundary is a polygon geometry<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> within = geometryEngine.within(bufferGeom, UtahBoundary);\r\n<span style=\"color: #998;font-style: italic\">\/\/check if buffer overlaps Utah<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> overlaps = geometryEngine.overlaps(bufferGeom, UtahBoundary);\r\n\r\n<span style=\"color: #333;font-weight: bold\">if<\/span>(!within &amp;&amp; overlaps){\r\n<span style=\"color: #998;font-style: italic\">  \/\/If buffer is not within Utah, but overlaps it, then only keep the portion within Utah<\/span>\r\n  bufferGeom = geometryEngine.intersect(bufferGeom, UtahBoundary);\r\n}\r\n<span style=\"color: #333;font-weight: bold\">if<\/span>(!within &amp;&amp; !overlaps){\r\n<span style=\"color: #998;font-style: italic\">  \/\/If buffer is completely outside Utah, then don't attempt any overlay<\/span>\r\n<span style=\"color: #0086b3\">  console<\/span>.log(<span style=\"color: #d14\">\"outside of utah!\"<\/span>);\r\n  <span style=\"color: #333;font-weight: bold\">return<\/span>;\r\n}\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/If the buffer is completely within Utah, then keep the original buffer geometry<\/span>\r\n<\/pre>\n<p>We didn&#8217;t use <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#clip\">clip<\/a> to keep the area common to both geometries because clip uses the envelope of one of the input geometries to find the common area, whereas intersect uses the geometry itself.<\/p>\n<p>Once we know the buffer&#8217;s geometry is located within Utah&#8217;s boundary (or overlaps it), we can proceed with the overlay to determine the area of private and public land inside the buffer. In this case, the ownership layer only contains features representing privately owned land. We are presuming that all other land is owned or managed by some government entity. To make the area calculation easier, we want to represent all private land as one polygon. To do this we need to merge the private geometries together using <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#union\">union<\/a>.<\/p>\n<pre style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #998;font-style: italic\">\/\/To simplify the merge, we only care about the geometries that intersect the buffer<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/so we'll loop through the geometries to essentially preform a \"select by location\"<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/using 'intersects' and keep the private land geometries that intersect the buffer.<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> intersectingPvtLand = array.filter(privateLandGeoms, <span><span style=\"color: #333;font-weight: bold\">function<\/span>(<span>pvtGeom<\/span>)<\/span>{\r\n  <span style=\"color: #333;font-weight: bold\">if<\/span>(geometryEngine.intersects(bufferGeom, pvtGeom)){\r\n    <span style=\"color: #333;font-weight: bold\">return<\/span> pvtGeom;\r\n  }\r\n});<\/pre>\n<p>Now that we have an array of geometries that intersect the buffer we can proceed with the overlay and area calculation.<\/p>\n<pre style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #998;font-style: italic\">\/\/merge all the private land features that intersect buffer into one geometry<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> privateUnion = geometryEngine.union(intersectingPvtLand);\r\n<span style=\"color: #998;font-style: italic\">\/\/get intersection of buffer and union of private land (cookie cutter)<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> privateIntersect = geometryEngine.intersect(privateUnion, bufferGeom);\r\n<span style=\"color: #998;font-style: italic\">\/\/calculate area of private land within buffer<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> privateArea = geometryEngine.geodesicArea(privateIntersect, <span style=\"color: #d14\">\"square-miles\"<\/span>);\r\n<\/pre>\n<p>The geometry representing private land within the buffer can now be added to the map as a graphic. The area can be used for further analysis or printed to the user.<\/p>\n<p>Once we have the private land, the area of the public land is easy to calculate. There are a number of ways to do it, but since we&#8217;re exploring GeometryEngine, we&#8217;ll see how <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#difference\">difference<\/a> can help us easily find this result.<\/p>\n<pre style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #998;font-style: italic\">\/\/most land that isn't private is public (city, county, state, or federally owned)<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> publicLand = geometryEngine.difference(bufferGeom, privateIntersect);\r\n<span style=\"color: #998;font-style: italic\">\/\/calculate area of public land<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> publicArea = geometryEngine.geodesicArea(publicLand, <span style=\"color: #d14\">\"square-miles\"<\/span>);<\/pre>\n<p>While the area calculations are good, they don&#8217;t take into account other features that affect the result, such as water bodies within the buffer. To improve the analysis, we could use <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#difference\">difference<\/a> to remove the geometries of water bodies within the buffer.<\/p>\n<h1>GeometryEngine overlay and analysis widgets<\/h1>\n<p>Note there are similar overlay functions available in the ArcGIS JavaScript API as <a href=\"https:\/\/developers.arcgis.com\/javascript\/jshelp\/intro_analysiswidgets.html\">analysis widgets<\/a>, such as <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/overlaylayers-amd.html\">OverlayLayers<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/createbuffers-amd.html\">CreateBuffers<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/mergelayers-amd.html\">MergeLayers<\/a>, etc. These widgets are very different from the overlay functions in GeometryEngine. GeometryEngine methods, for example, only execute processes in the browser; that means developers can create apps focused on data exploration with an enhanced interactive experience for users. In addition, GeometryEngine&#8217;s methods work only with geometries, not attributes or layers.<\/p>\n<p>While GeometryEngine&#8217;s overlay methods can provide a rich user experience in web applications, they are limited to generating results within a single browser session. The analysis widgets are different because they perform analysis for layers, which include both geometries and attributes, and process the analyses server-side. Therefore developers can use the analysis widgets to generate overlay results as feature services within the ArcGIS platform. These results can then be perpetuated and consumed inside custom web applications and ArcGIS Online web maps.<\/p>\n<p>In summary, GeometryEngine is a powerful client-side engine that provides developers with the ability to test geometric relationships; calculate proximity, areas and distances; and perform simple overlays all client-side. These are fundamental methods that make GIS applications a popular way to explore, analyze, and summarize data.<\/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":false,"wide_image":false},"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>GeometryEngine part 3: Overlay analysis<\/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\/developers\/geometryengine-part-3-overlay-analysis\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GeometryEngine part 3: Overlay analysis\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis\" \/>\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=\"2023-03-15T21:57:43+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\/developers\/geometryengine-part-3-overlay-analysis#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis\"},\"author\":{\"name\":\"Kristian Ekenes\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b\"},\"headline\":\"GeometryEngine part 3: Overlay analysis\",\"datePublished\":\"2015-09-23T04:00:51+00:00\",\"dateModified\":\"2023-03-15T21:57:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis\"},\"wordCount\":4,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"geometry\",\"GeometryEngine\",\"JavaScript\",\"overlay\",\"spatial overlay\",\"web GIS\",\"WebGIS\"],\"articleSection\":[\"Developers\",\"Mapping\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis\",\"name\":\"GeometryEngine part 3: Overlay analysis\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2015-09-23T04:00:51+00:00\",\"dateModified\":\"2023-03-15T21:57:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GeometryEngine part 3: Overlay analysis\"}]},{\"@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":"GeometryEngine part 3: Overlay analysis","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\/developers\/geometryengine-part-3-overlay-analysis","og_locale":"en_US","og_type":"article","og_title":"GeometryEngine part 3: Overlay analysis","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2023-03-15T21:57:43+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\/developers\/geometryengine-part-3-overlay-analysis#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis"},"author":{"name":"Kristian Ekenes","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b"},"headline":"GeometryEngine part 3: Overlay analysis","datePublished":"2015-09-23T04:00:51+00:00","dateModified":"2023-03-15T21:57:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis"},"wordCount":4,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["geometry","GeometryEngine","JavaScript","overlay","spatial overlay","web GIS","WebGIS"],"articleSection":["Developers","Mapping"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis","name":"GeometryEngine part 3: Overlay analysis","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2015-09-23T04:00:51+00:00","dateModified":"2023-03-15T21:57:43+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-3-overlay-analysis#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"GeometryEngine part 3: Overlay analysis"}]},{"@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":"September 23, 2015","author_name":"Kristian Ekenes","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/08\/Newsroom-Keyart-Wide-1920-x-1080.jpg","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":28391,"name":"geometry","slug":"geometry","term_group":0,"term_taxonomy_id":28391,"taxonomy":"post_tag","description":"","parent":0,"count":9,"filter":"raw"},{"term_id":28401,"name":"GeometryEngine","slug":"geometryengine","term_group":0,"term_taxonomy_id":28401,"taxonomy":"post_tag","description":"","parent":0,"count":3,"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":28481,"name":"overlay","slug":"overlay","term_group":0,"term_taxonomy_id":28481,"taxonomy":"post_tag","description":"","parent":0,"count":9,"filter":"raw"},{"term_id":28491,"name":"spatial overlay","slug":"spatial-overlay","term_group":0,"term_taxonomy_id":28491,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":24961,"name":"web GIS","slug":"web-gis","term_group":0,"term_taxonomy_id":24961,"taxonomy":"post_tag","description":"","parent":0,"count":19,"filter":"raw"},{"term_id":28501,"name":"WebGIS","slug":"webgis","term_group":0,"term_taxonomy_id":28501,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"}],"category_data":[{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":420,"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\/69291","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=69291"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/69291\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=69291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=69291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=69291"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=69291"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=69291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}