{"id":69191,"date":"2015-09-09T05:00:38","date_gmt":"2015-09-09T05:00:38","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/products\/product\/uncategorized\/geometryengine-part-1-testing-spatial-relationships-and-editing\/"},"modified":"2023-03-15T14:56:13","modified_gmt":"2023-03-15T21:56:13","slug":"geometryengine-part-1-testing-spatial-relationships-and-editing","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing","title":{"rendered":"GeometryEngine part 1: Testing spatial relationships and editing"},"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,27491],"industry":[],"product":[36831,36601],"class_list":["post-69191","blog","type-blog","status-publish","format-standard","hentry","category-developers","category-mapping","tag-geometry","tag-geometryengine","tag-javascript","tag-jsapi4","product-js-api-arcgis","product-developers"],"acf":{"short_description":"This is the first post in a three-part series exploring GeometryEngine in the ArcGIS API for JavaScript. This series will cover the follo...","flexible_content":[{"acf_fc_layout":"content","content":"<p>This is the first post in a three-part series exploring <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html\">GeometryEngine<\/a> in the ArcGIS API for JavaScript. This series will cover the following topics:<\/p>\n<ul>\n<li>Part 1: Testing spatial relationships and editing<\/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><a href=\"http:\/\/blogs.esri.com\/esri\/arcgis\/2015\/09\/23\/geometryengine-part-3-overlay-analysis\/\">Part 3: Overlay Analysis<\/a><\/li>\n<\/ul>\n<h1>Overview<\/h1>\n<p>Earlier this year <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html\">GeometryEngine<\/a> and its asynchronous counterpart <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengineasync-amd.html\">GeometryEngineAsync<\/a> were released (beta) in versions <a href=\"https:\/\/developers.arcgis.com\/javascript\/\" title=\"ArcGIS API for JavaScript 3.x\">3.14<\/a> and <a href=\"https:\/\/developers.arcgis.com\/javascript\/beta\/\" title=\"ArcGIS API for JavaScript 4.0 (beta)\">4.0 beta 1<\/a> of the ArcGIS API for JavaScript. These modules each provide more than 30 methods for measuring, overlaying, and testing spatial relationships between geometries in web applications. GeometryEngine includes functions such as <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#geodesicbuffer\">buffer<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#intersect\">intersect<\/a>, and <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#offset\">offset<\/a> for calculating proximity, spatial relationships, and measurements of area and length. This sounds a lot like <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/geometryservice-amd.html\">GeometryService<\/a>, so what\u2019s the big deal? What sets GeometryEngine apart is that it does all of its work client-side.<\/p>\n<p>That\u2019s right. No network requests are made when using any GeometryEngine functions. This means that using GeometryEngine in favor of GeometryService can significantly enhance the performance of web applications, particularly if they make frequent requests with GeometryService or deal with a large number of geometries.<\/p>\n<h1>Testing spatial relationships in editing applications<\/h1>\n<p>Working client-side makes GeometryEngine particularly powerful when used in web applications designed for editing geometries. Functions that test intersections, feature selections, containment, equality, touching, and other relationships can enhance the integrity of data edits and improve user experience while editing. Without GeometryEngine, many of these functions could not be done without sending many server requests or writing lengthy custom JavaScript modules.<\/p>\n<p>What once required clunky workflows using either GeometryService or a custom geoprocessing task, is now simple with the help of GeometryEngine. For example, <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-demo\/\">the following is an editing sample<\/a> that demonstrates several GeometryEngine methods including <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#cut\">cut<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#geodesicarea\">geodesicArea<\/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#difference\">difference<\/a>. But it&#8217;s the testing functions (<a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#offset\">offset<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#disjoint\">disjoint<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#equals\">equals<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#within\">within<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#intersects\">intersects<\/a>, and <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#crosses\">crosses<\/a>) that allow this application to perform the proper cutting, merging, deleting and creating of new features.<\/p>\n<p><a title=\"Click to open the editing app showcasing GeometryEngine\" href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-demo\/\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54070 alignleft\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2015\/09\/ge-editing.png\" alt=\"Click to open the editing app showcasing GeometryEngine\" width=\"500\" height=\"273\" \/><\/a><\/p>\n<p>Open <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-demo\/\">the app<\/a> and select the polygon. Then proceed to draw a line from one end of the polygon to the other. Notice that once the line completely crosses the polygon, the polygon is immediately cut and the area of each of the resulting polygons is printed at their centroids. Prior to attempting the cut, however, a check is made to see if the first click and the current mouse position are disjoint with the selected polygon; the <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/esri.geometry.geometryengine-amd.html#crosses\">crosses<\/a> function is then used to check if the line crosses the selection. These tests ensure the cut operation and area calculations are not performed unless the input parameters will produce a valid cut. These calculations are done each time the mouse is moved.<\/p>\n<p>Similar tests on spatial relationships are done for the other operations, including &#8220;Add Features&#8221;, which checks if the added geometry is not contained by existing geometries. If a new geometry overlaps existing geometries, the difference of the two is retained. This functionality is useful for ensuring new features are topologically correct.<\/p>\n<h1>Performance compared to GeometryService<\/h1>\n<p>If GeometryService were used to attempt all of these operations, each of the methods and calculations would require separate requests each time the mouse is moved. The sheer number of requests made to the server (between two and seven per mouse-move) would slow down the app and frustrate the user. However, GeometryEngine removes GeometryServer requests altogether, allowing developers to create apps that would not be usable with GeometryService.<\/p>\n<p>Bypassing server requests also speeds things up when analysis functions are used, such as buffer, intersect, and union. To illustrate the differences in performance between the two modules, <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-gs\/\">check out the following sample<\/a> (built using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/beta\/\" title=\"ArcGIS API for JavaScript 4.0 (beta)\">4.0 beta 1 version of the API<\/a>) that compares the time it takes to buffer 500 points with GeometryEngine versus GeometryService.<\/p>\n<p><a title=\"Click to open app comparing GeometryEngine's performance vs GeometryService\" href=\"http:\/\/ekenes.github.io\/esri-js-samples\/ge-gs\/\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54072 alignnone\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2015\/09\/ge-gs.png\" alt=\"Click to open app comparing GeometryEngine's performance vs GeometryService\" width=\"500\" height=\"299\" \/><\/a><\/p>\n<p>In this scenario, GeometryEngine can buffer all 500 points in about two or three seconds, while GeometryService takes longer than 30 seconds to do the same work because all 500 geometries are sent in a server request. The time it takes GeometryEngine and GeometryService to produce results will vary depending on the method, number and complexity of geometries, network speed, and browser; in most cases, however, GeometryEngine will perform faster.<\/p>\n<p>Keep in mind that GeometryEngine isn&#8217;t the solution to all problems and it certainly doesn&#8217;t replace GeometryService. GeometryService contains several methods that are not part of GeometryEngine. Some of those include <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/geometryservice-amd.html#project\">project<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/geometryservice-amd.html#fromgeocoordinatestring\">fromGeoCoordinateString<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/geometryservice-amd.html#simplify\">simplify<\/a>, and <a href=\"https:\/\/developers.arcgis.com\/javascript\/jsapi\/geometryservice-amd.html#trimextend\">trimExtend<\/a>.<\/p>\n<p>Stay tuned for additional posts that explore GeometryEngine&#8217;s measurement and overlay methods.<\/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 1: Testing spatial relationships and editing<\/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-1-testing-spatial-relationships-and-editing\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GeometryEngine part 1: Testing spatial relationships and editing\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing\" \/>\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:56:13+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-1-testing-spatial-relationships-and-editing#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing\"},\"author\":{\"name\":\"Kristian Ekenes\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b\"},\"headline\":\"GeometryEngine part 1: Testing spatial relationships and editing\",\"datePublished\":\"2015-09-09T05:00:38+00:00\",\"dateModified\":\"2023-03-15T21:56:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing\"},\"wordCount\":7,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"geometry\",\"GeometryEngine\",\"JavaScript\",\"jsapi4\"],\"articleSection\":[\"Developers\",\"Mapping\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing\",\"name\":\"GeometryEngine part 1: Testing spatial relationships and editing\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2015-09-09T05:00:38+00:00\",\"dateModified\":\"2023-03-15T21:56:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GeometryEngine part 1: Testing spatial relationships and editing\"}]},{\"@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 1: Testing spatial relationships and editing","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-1-testing-spatial-relationships-and-editing","og_locale":"en_US","og_type":"article","og_title":"GeometryEngine part 1: Testing spatial relationships and editing","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2023-03-15T21:56:13+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-1-testing-spatial-relationships-and-editing#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing"},"author":{"name":"Kristian Ekenes","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b"},"headline":"GeometryEngine part 1: Testing spatial relationships and editing","datePublished":"2015-09-09T05:00:38+00:00","dateModified":"2023-03-15T21:56:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing"},"wordCount":7,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["geometry","GeometryEngine","JavaScript","jsapi4"],"articleSection":["Developers","Mapping"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing","name":"GeometryEngine part 1: Testing spatial relationships and editing","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2015-09-09T05:00:38+00:00","dateModified":"2023-03-15T21:56:13+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/geometryengine-part-1-testing-spatial-relationships-and-editing#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"GeometryEngine part 1: Testing spatial relationships and editing"}]},{"@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 9, 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":27491,"name":"jsapi4","slug":"jsapi4","term_group":0,"term_taxonomy_id":27491,"taxonomy":"post_tag","description":"","parent":0,"count":111,"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\/69191","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=69191"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/69191\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=69191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=69191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=69191"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=69191"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=69191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}