{"id":158121,"date":"2018-04-23T08:00:05","date_gmt":"2018-04-23T08:00:05","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=158121"},"modified":"2018-04-23T15:22:04","modified_gmt":"2018-04-23T15:22:04","slug":"introducing-the-client-side-projection-engine","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine","title":{"rendered":"Introducing client-side projection engine"},"author":5981,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[22941],"tags":[43191,24921,31311,27491,43201],"industry":[],"product":[36831,36601],"class_list":["post-158121","blog","type-blog","status-publish","format-standard","hentry","category-mapping","tag-client-side-projection","tag-javascript","tag-jsapi3","tag-jsapi4","tag-project","product-js-api-arcgis","product-developers"],"acf":{"short_description":"Client-side projection engine converts geometries from one spatial reference to another without making network requests.","flexible_content":[{"acf_fc_layout":"content","content":"<p>The <a href=\"https:\/\/developers.arcgis.com\/javascript\/\">4.7<\/a> and <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/\">3.24<\/a> versions of the ArcGIS API for JavaScript introduce the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-projection.html\"> client-side projection engine<\/a>. The big advantage of using this engine is its ability to convert geometries from one spatial reference to another on the client-side, so that no network requests are required. This means that using the client-side projection engine instead of <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-tasks-GeometryService.html#project\">GeometryService projection<\/a> can significantly improve the performance of web applications, particularly if they make frequent requests to GeometryService or project a large number of geometries.<\/p>\n<p>There are several things to remember when using the client-side projection engine:<\/p>\n<ul>\n<li>The client-side projection engine will only load in browsers that support <a href=\"https:\/\/caniuse.com\/#feat=wasm\">WebAssembly<\/a>.<\/li>\n<li>At this time, the client-side projection engine supports <a href=\"https:\/\/developers.arcgis.com\/java\/10-2\/guide\/datum-transformations.htm#ESRI_SECTION1_7635FE2A60E6449898D5AD0ADE2CA0C3\">equation-based geographic transformations<\/a> only. You can specify a specific equation-based <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-support-GeographicTransformation.html\">geographic transformation<\/a> for the project operation, or accept the default transformation if one is needed.<\/li>\n<li>When projecting array of geometries, the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-projection.html#project\">project<\/a> method will use the input spatial reference of the first geometry in the array as the input spatial reference. So make sure that all geometries are in the same spatial reference.<\/li>\n<\/ul>\n<p>Versions 4.7 and 3.24 already take advantage of the client-side projection engine in several places. For example, the\u00a0<a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-CSVLayer.html\">CSVLayer<\/a> in version 4.7\u00a0can be re-projected on the client-side if its\u00a0<a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-CSVLayer.html#spatialReference\">spatialReference<\/a>\u00a0does not match the\u00a0<a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-views-View.html#spatialReference\">view&#8217;s spatialReference<\/a>.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":158421,"id":158421,"title":"csvLayer-projection","filename":"csvLayer-projection.png","filesize":599550,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\/csvlayer-projection","alt":"","author":"5981","description":"","caption":"","name":"csvlayer-projection","status":"inherit","uploaded_to":158121,"date":"2018-04-19 22:04:00","modified":"2018-04-19 22:04:00","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":671,"height":387,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","thumbnail-width":213,"thumbnail-height":123,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","medium-width":453,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","medium_large-width":671,"medium_large-height":387,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","large-width":671,"large-height":387,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","1536x1536-width":671,"1536x1536-height":387,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","2048x2048-width":671,"2048x2048-height":387,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","card_image-width":671,"card_image-height":387,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/csvLayer-projection.png","wide_image-width":671,"wide_image-height":387}},"image_position":"left-center","orientation":"horizontal","hyperlink":"https:\/\/developers.arcgis.com\/javascript\/latest\/sample-code\/layers-csv-projection\/live\/index.html"},{"acf_fc_layout":"content","content":"<p>The <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-coordinateFormatter.html\">coordinateFormatter<\/a> module is also new at 4.7 and 3.24. It converts between points and specified formatted coordinate notation strings such as decimal degrees and U.S. National Grid (USNG). This module takes advantage of the client-side projection engine. <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jssamples\/client-projection.html\">This 3.24 sample<\/a> highlights the use of client-side projection engine. One of the things it does is display the re-projected coordinates of the cursor in real-time in the bottom left corner of the application. This is accomplished by re-projecting the point from Winkel III projection to WGS84 projection using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/esri.geometry.projection-amd.html#project\">project<\/a> method, then passing the projected point to <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/esri.geometry.coordinateformatter-amd.html#tolatitudelongitude\">coordinateFormatter.toLatitudeLongitude<\/a> method. Projecting a point using the GeometryService would not be ideal and as responsive in this case.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":156451,"id":156451,"title":"coordinateFormatter_3.24","filename":"coordinateFormatter_3.24.gif","filesize":336487,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\/coordinateformatter_3-24","alt":"","author":"5981","description":"","caption":"","name":"coordinateformatter_3-24","status":"inherit","uploaded_to":158121,"date":"2018-04-18 21:53:13","modified":"2018-04-19 20:30:05","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":640,"height":363,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","thumbnail-width":213,"thumbnail-height":121,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","medium-width":460,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","medium_large-width":640,"medium_large-height":363,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","large-width":640,"large-height":363,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","1536x1536-width":640,"1536x1536-height":363,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","2048x2048-width":640,"2048x2048-height":363,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","card_image-width":640,"card_image-height":363,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/coordinateFormatter_3.24.gif","wide_image-width":640,"wide_image-height":363}},"image_position":"left-center","orientation":"horizontal","hyperlink":"https:\/\/developers.arcgis.com\/javascript\/3\/jssamples\/client-projection.html"},{"acf_fc_layout":"content","content":"<p><strong>Using the client-side projection engine<\/strong><\/p>\n<p>To use client-side projection, the application must reference the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-projection.html\">projection module<\/a> and should check if the projection engine is <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-projection.html#isSupported\">supported<\/a> by the browser. If it is supported then <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-projection.html#load\">load<\/a> the projection engine. Once the projection engine is loaded successfully, the geometries can be converted from one spatial reference to another by calling its <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-projection.html#project\">project()<\/a> method. Example code to convert geometries from one spatial reference to another could as simple as the following:<\/p>\n<pre><code style=\"display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; -webkit-text-size-adjust: none;\">\r\n<span style=\"color: #0086b3;\">require<\/span>([\r\n  <span style=\"color: #d14;\">\"esri\/geometry\/projection\"<\/span>,\r\n  <span style=\"color: #d14;\">\"dojo\/domReady!\"<\/span>\r\n], <span style=\"color: #333; font-weight: bold;\">function<\/span> (\r\n  projection\r\n) {\r\n\r\n  <span style=\"color: #333; font-weight: bold;\">if<\/span> (!projection.isSupported()) {\r\n    alert(<span style=\"color: #d14;\">\"client-side projection is not supported\"<\/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;\">\/\/ load the projection module<\/span>\r\n  projection.load().then(<span style=\"color: #333; font-weight: bold;\">function<\/span> () {\r\n    <span style=\"color: #998; font-style: italic;\">\/\/ project an array of geometries to the specified output spatial reference<\/span>\r\n    projectedGeometries = projection.project(geometries, outSpatialReference);\r\n  });\r\n});\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p><strong>Performance compared to GeometryService projection<\/strong><\/p>\n<p>If the GeometryService was used to convert geometries from one spatial reference to another, each individual projection operation would require separate requests to the server every time the\u00a0<a href=\"https:\/\/jscore.esri.com\/javascript\/latest\/api-reference\/esri-tasks-GeometryService.html#project\">project()<\/a> method is called. The sheer number of requests made to the server (with each mouse-move for example) would slow down the application. However, the client-side projection removes the need for requests made to the server, which makes the application more reactive.<\/p>\n"},{"acf_fc_layout":"content","content":"<p>To see the differences in performance between the two modules, check out <a href=\"https:\/\/ubatsukh.github.io\/pe-gs-projection\/\">this sample<\/a> that compares the time it takes to project large polygons with the client-side projection engine versus the GeometryService. The sample converts polygons representing world continents and oceans from WGS84 to a specified projection using the client-side engine projection and GeomeryService projection operation. As you load the application and change the projection, you should notice that the client-projection is faster compared to GeometryService projection. The time it takes the client-side projection and GeometryService to produce results will vary depending on number and complexity of geometries, network speed, and browser; in most cases, however, the client-side projection engine will perform faster. You can get the source code for this sample from <a href=\"https:\/\/github.com\/ubatsukh\/arcgis-js-api-demos\/tree\/master\/pe-gs-projection\">here<\/a>.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":157041,"id":157041,"title":"compare-pe-gs-project","filename":"compare-pe-gs-project.gif","filesize":1415930,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/compare-pe-gs-project","alt":"","author":"5981","description":"","caption":"","name":"compare-pe-gs-project","status":"inherit","uploaded_to":0,"date":"2018-04-19 15:37:05","modified":"2018-04-19 15:37:05","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":640,"height":318,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","thumbnail-width":213,"thumbnail-height":106,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","medium-width":464,"medium-height":231,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","medium_large-width":640,"medium_large-height":318,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","large-width":640,"large-height":318,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","1536x1536-width":640,"1536x1536-height":318,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","2048x2048-width":640,"2048x2048-height":318,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","card_image-width":640,"card_image-height":318,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/compare-pe-gs-project.gif","wide_image-width":640,"wide_image-height":318}},"image_position":"left-center","orientation":"horizontal","hyperlink":"https:\/\/ubatsukh.github.io\/pe-gs-projection\/"},{"acf_fc_layout":"content","content":"<p>Keep in mind that the client-side projection is not necessarily the correct solution for every projection issue. The client-side projection engine only supports equation-based geographic transformations, while the GeometryService project operation can convert geometries with equation-based geographic transformations, grid based geographic transformations, and vertical transformations.<\/p>\n<p>We hope client-side projection engine will make you more productive in your application development. We are very excited to see how you will use client-side projection in your applications. <\/p>\n"}],"authors":[{"ID":5981,"user_firstname":"Undral","user_lastname":"Batsukh","nickname":"Undral","user_nicename":"undr3986","display_name":"Undral Batsukh","user_email":"ubatsukh@esri.com","user_url":"","user_registered":"2018-03-02 00:17:50","user_description":"Undral is a Product Engineer at Esri, working on the ArcGIS Maps SDK for JavaScript.","user_avatar":"<img alt='' src='https:\/\/secure.gravatar.com\/avatar\/c1405160351c3e4722c0c72071122fe10e812710bb886abf9e09701c7c219563?s=96&#038;d=blank&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/c1405160351c3e4722c0c72071122fe10e812710bb886abf9e09701c7c219563?s=192&#038;d=blank&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/projection-banner.png","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>Introducing client-side projection engine<\/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\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing client-side projection engine\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\" \/>\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=\"2018-04-23T15:22:04+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\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\"},\"author\":{\"name\":\"Undral Batsukh\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/e42c26b3a6a3ad517ec6148b1f8d4f6a\"},\"headline\":\"Introducing client-side projection engine\",\"datePublished\":\"2018-04-23T08:00:05+00:00\",\"dateModified\":\"2018-04-23T15:22:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\"},\"wordCount\":4,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"client-side projection\",\"JavaScript\",\"jsapi3\",\"jsapi4\",\"project\"],\"articleSection\":[\"Mapping\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\",\"name\":\"Introducing client-side projection engine\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2018-04-23T08:00:05+00:00\",\"dateModified\":\"2018-04-23T15:22:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing client-side projection engine\"}]},{\"@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\/e42c26b3a6a3ad517ec6148b1f8d4f6a\",\"name\":\"Undral Batsukh\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c1405160351c3e4722c0c72071122fe10e812710bb886abf9e09701c7c219563?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c1405160351c3e4722c0c72071122fe10e812710bb886abf9e09701c7c219563?s=96&d=blank&r=g\",\"caption\":\"Undral Batsukh\"},\"description\":\"Undral is a Product Engineer at Esri, working on the ArcGIS Maps SDK for JavaScript.\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/undr3986\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introducing client-side projection engine","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\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine","og_locale":"en_US","og_type":"article","og_title":"Introducing client-side projection engine","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2018-04-23T15:22:04+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\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine"},"author":{"name":"Undral Batsukh","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/e42c26b3a6a3ad517ec6148b1f8d4f6a"},"headline":"Introducing client-side projection engine","datePublished":"2018-04-23T08:00:05+00:00","dateModified":"2018-04-23T15:22:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine"},"wordCount":4,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["client-side projection","JavaScript","jsapi3","jsapi4","project"],"articleSection":["Mapping"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine","name":"Introducing client-side projection engine","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2018-04-23T08:00:05+00:00","dateModified":"2018-04-23T15:22:04+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/mapping\/introducing-the-client-side-projection-engine#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Introducing client-side projection engine"}]},{"@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\/e42c26b3a6a3ad517ec6148b1f8d4f6a","name":"Undral Batsukh","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c1405160351c3e4722c0c72071122fe10e812710bb886abf9e09701c7c219563?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c1405160351c3e4722c0c72071122fe10e812710bb886abf9e09701c7c219563?s=96&d=blank&r=g","caption":"Undral Batsukh"},"description":"Undral is a Product Engineer at Esri, working on the ArcGIS Maps SDK for JavaScript.","url":"https:\/\/www.esri.com\/arcgis-blog\/author\/undr3986"}]}},"text_date":"April 23, 2018","author_name":"Undral Batsukh","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/undr3986","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":43191,"name":"client-side projection","slug":"client-side-projection","term_group":0,"term_taxonomy_id":43191,"taxonomy":"post_tag","description":"","parent":0,"count":1,"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":31311,"name":"jsapi3","slug":"jsapi3","term_group":0,"term_taxonomy_id":31311,"taxonomy":"post_tag","description":"","parent":0,"count":19,"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":43201,"name":"project","slug":"project","term_group":0,"term_taxonomy_id":43201,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"}],"category_data":[{"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\/158121","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\/5981"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=158121"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/158121\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=158121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=158121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=158121"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=158121"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=158121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}