{"id":2298622,"date":"2024-05-22T04:51:59","date_gmt":"2024-05-22T11:51:59","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2298622"},"modified":"2025-05-13T10:08:34","modified_gmt":"2025-05-13T17:08:34","slug":"feature-snapping-with-the-native-maps-sdks","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks","title":{"rendered":"Feature Snapping with the Native Maps SDKs"},"author":341972,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191],"tags":[768202,28391,758802,28011],"industry":[],"product":[769142,769162,768902,769152,768912],"class_list":["post-2298622","blog","type-blog","status-publish","format-standard","hentry","category-developers","tag-arcgis-maps-sdks-for-native-apps","tag-geometry","tag-native-apps","tag-snapping","product-sdk-net","product-sdk-java","product-sdk-kotlin","product-sdk-qt","product-sdk-swift"],"acf":{"authors":[{"ID":341972,"user_firstname":"Luis","user_lastname":"Flores Carrubio","nickname":"Luis Flores Carrubio","user_nicename":"lflores","display_name":"Luis Flores Carrubio","user_email":"lflores@esri.com","user_url":"","user_registered":"2023-07-10 10:03:35","user_description":"Luis is a Product Engineer at Esri working on the ArcGIS Maps SDKs for Game Engines and the ArcGIS Maps SDKs for Native Apps.","user_avatar":"<img alt='' src='https:\/\/secure.gravatar.com\/avatar\/7b2ad2eb832dc4cfe17187976aa8d5662dd3950883a8ad45527c42b93c23d425?s=96&#038;d=blank&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/7b2ad2eb832dc4cfe17187976aa8d5662dd3950883a8ad45527c42b93c23d425?s=192&#038;d=blank&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'\/>"}],"short_description":"This blog covers how to configure and use snapping during interactive editing sessions with the Geometry Editor.","flexible_content":[{"acf_fc_layout":"content","content":"<h2>Introduction<\/h2>\n<p style=\"text-align: justify\">In version 200.4 of the ArcGIS Maps SDKs for Native Apps, we\u2019ve introduced feature snapping support for the Geometry Editor. This functionality ensures data integrity when precise geometric coincidence is crucial during interactive editing sessions.<\/p>\n<p style=\"text-align: justify\">In this blog post, you\u2019ll learn how to configure snapping within your Native Maps SDKs application, and discover how it can be used when creating and editing geometries with the Geometry Editor.<\/p>\n<h2>What is snapping?<\/h2>\n<p style=\"text-align: justify\">Snapping improves the experience of editing geographic data making it easier to create and edit geometries that are coincident and connected to each other. This is important when editing connected features such as utility networks, transport networks and building footprints. The animated image below shows how this is achieved when the position of an interactive geometry edit is adjusted so that it connects with a nearby feature allowing for greater accuracy during an editing session. The next section of this blog post covers how snapping works and how to configure it in your application to leverage its advantages.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2320742,"id":2320742,"title":"Snapping","filename":"snapping2.gif","filesize":6140347,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\/snapping2-3","alt":"Animated image showing how to create a lateral line in a water distribution network using feature snapping.","author":"341972","description":"","caption":"Creation of a lateral line in a water distribution network using feature snapping for geometric coincidence.","name":"snapping2-3","status":"inherit","uploaded_to":2298622,"date":"2024-04-29 16:21:54","modified":"2024-05-21 13:53:03","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":480,"height":446,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","medium-width":281,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","medium_large-width":480,"medium_large-height":446,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","large-width":480,"large-height":446,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","1536x1536-width":480,"1536x1536-height":446,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","2048x2048-width":480,"2048x2048-height":446,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","card_image-width":480,"card_image-height":446,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping2.gif","wide_image-width":480,"wide_image-height":446}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>How it works<\/h2>\n<p style=\"text-align: justify\">The <a href=\"https:\/\/developers.arcgis.com\/kotlin\/spatial-and-data-analysis\/create-and-edit-geometries\/#geometry-editor\">Geometry Editor<\/a> has a new <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-snap-settings\/index.html?query=class%20SnapSettings\"><em>snapSettings<\/em><\/a> property to control the interactive snapping functionality. This property provides controls for enabling snapping both for the application and for individual <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-snap-source-settings\/index.html?query=class%20SnapSourceSettings\"><em>SnapSourceSettings<\/em><\/a> objects in the <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-snap-settings\/source-settings.html?query=val%20sourceSettings:%20List%3CSnapSourceSettings%3E\"><em>sourceSettings<\/em><\/a> collection. These configurable objects are associated with a valid <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-snap-source\/index.html?query=interface%20SnapSource\"><em>SnapSource<\/em><\/a> from the connected <em>ArcGISMap<\/em> representing an underlying source of geometries to snap to, for example a feature layer. However, before these objects can be configured for snapping, the <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-snap-settings\/sync-source-settings.html?query=fun%20syncSourceSettings()\"><em>syncSourceSettings<\/em><\/a> \u00a0method needs to be called to synchronize the <em>sourceSettings<\/em> collection with the loaded operational layers of the <em>ArcGISMap<\/em>. Let\u2019s have a closer look at how to configure snapping using the ArcGIS Maps SDK for Kotlin. This workflow is also supported in the other <a href=\"https:\/\/developers.arcgis.com\/documentation\/mapping-apis-and-services\/apis-and-sdks\/#native\">Native Maps SDKs<\/a>.<\/p>\n<div>\n<pre style=\"background: #f5f5f5;overflow: auto;width: auto;padding: 0.2em 0.6em 0.2em 40px;border-style: solid;border-color: gray;border-width: 0em 0em 0em 0.2em;margin: 0px;line-height: 125%;font-size: 15px\"><span style=\"color: #888888\">\/\/ connect the map and geometry editor to the map view<\/span>\r\nmapView<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">map<\/span> <span style=\"color: #333333\">=<\/span> ArcGISMap<span style=\"color: #333333\">()<\/span>\r\n<span style=\"color: #008800;font-weight: bold\">val<\/span> geometryEditor <span style=\"color: #333333\">=<\/span> GeometryEditor<span style=\"color: #333333\">()<\/span>\r\nmapView<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">geometryEditor<\/span> <span style=\"color: #333333\">=<\/span> geometryEditor\r\n\r\n<span style=\"color: #888888\">\/\/ synchronize the collection and enable snapping<\/span>\r\n<span style=\"color: #008800;font-weight: bold\">val<\/span> snapSettings <span style=\"color: #333333\">=<\/span> geometryEditor<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">snapSettings<\/span>\r\nsnapSettings<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">syncSourceSettings<\/span><span style=\"color: #333333\">()<\/span>\r\nsnapSettings<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">isEnabled<\/span> <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800;font-weight: bold\">true<\/span>\r\n\r\n<span style=\"color: #888888\">\/\/ enable snapping for each valid snap source<\/span>\r\nsnapSettings<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">sourceSettings<\/span><span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">forEach<\/span> <span style=\"color: #333333\">{<\/span> snapSourceSettings <span style=\"color: #333333\">-&gt;<\/span>\r\n  snapSourceSettings<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">isEnabled<\/span> <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800;font-weight: bold\">true<\/span>\r\n<span style=\"color: #333333\">}<\/span>\r\n<\/pre>\n<\/div>\n<p style=\"text-align: justify\">As seen in the code above, each valid snap source can be enabled or disabled individually allowing for an easier snapping experience. This is beneficial when features in different layers are close to and overlap with each other resulting in a challenging snapping experience. Furthermore, any change in the operational layers of the connected <em>ArcGISMap<\/em> will require the collection to be synchronized again to account for updates to any of the valid snap sources. Details on the validity of snap sources and how to setup your data for snapping is available in a later section of this blog.<\/p>\n<h2>Interactions and feedback<\/h2>\n<p style=\"text-align: justify\">Snapping can be used during interactive edits that add or move existing vertices of a geometry with the <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-vertex-tool\/index.html?query=class%20VertexTool%20:%20GeometryEditorTool\"><em>VertexTool<\/em><\/a>. The Native Maps SDKs for Java, Qt, .NET, and Swift support snapping for input devices with a hover event such as a mouse move. On touch screen devices, snapping visual cues and interactive edits are likely to be obstructed by the user&#8217;s hand. To solve this usability problem, the use of the magnifier is recommended by enabling it through the <em>MapView<\/em> or <em>mapViewInteractionOptions<\/em> supported in the ArcGIS Maps SDKs for Kotlin, Qt, .NET, and Swift. The magnifier is shown offset from the interaction position by long pressing on the <em>MapView<\/em> making it possible to see the snapping visual cues when using a touch screen. Therefore, by long pressing and holding on a vertex, the magnifier is displayed, follows the interactive position, and remains visible until the vertex is released as seen in the animated image below.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2320752,"id":2320752,"title":"snapping_magnifier2","filename":"snapping_magnifier2.gif","filesize":8403866,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\/snapping_magnifier2","alt":"Animated image showing how to connect a main line in a water distribution network using feature snapping.","author":"341972","description":"","caption":"Connecting two main lines in a water distribution network with feature snapping while using the magnifier.","name":"snapping_magnifier2","status":"inherit","uploaded_to":2298622,"date":"2024-04-29 16:22:57","modified":"2024-05-21 13:54:26","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":480,"height":446,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","medium-width":281,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","medium_large-width":480,"medium_large-height":446,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","large-width":480,"large-height":446,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","1536x1536-width":480,"1536x1536-height":446,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","2048x2048-width":480,"2048x2048-height":446,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","card_image-width":480,"card_image-height":446,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/snapping_magnifier2.gif","wide_image-width":480,"wide_image-height":446}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p style=\"text-align: justify\">The visual cues or symbols that show when snapping has occurred represent which aspect of the feature geometry was used as the best candidate for that adjustment. These can be vertices, polylines, or also segments between two vertices when using polylines or polygons. The symbols that represent snapping feedback can be customized via accessing the <em><a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-geometry-editor-style\/index.html?query=class%20GeometryEditorStyle\">GeometryEditorStyle<\/a><\/em> properties that define the visual appearance of geometries displayed by the Geometry Editor. By configuring and enabling snapping in your application, you can leverage these advantages and enhance the editing experience with the Geometry Editor.<\/p>\n<h2>Data requirements<\/h2>\n<p style=\"text-align: justify\">To use snapping, a <em><a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view.geometryeditor\/-snap-source\/index.html?query=interface%20SnapSource\">SnapSource<\/a><\/em> needs to be created from a source of geometries like a feature layer. It is important that each source provides full resolution geometries to ensure data integrity between different sources during an editing session. This is because the snapping adjustment can be inexact when geometries are not in full resolution. Local data sources, such as geodatabases, always provide full resolution geometries. However, some of the default optimizations used to improve the efficiency of data transfer and display of polyline and polygon layers based on feature services are not appropriate to use with snapping. The recommended approach when using hosted feature layers is to ensure the following properties are configured before the layers are loaded:<\/p>\n<div>\n<pre style=\"background: #f5f5f5;overflow: auto;width: auto;padding: 0.2em 0.6em 0.2em 40px;border-style: solid;border-color: gray;border-width: 0em 0em 0em 0.2em;margin: 0px;line-height: 125%;font-size: 15px\"><span style=\"color: #888888\">\/\/ Kotlin Maps SDK code demonstrating feature layer configuration<\/span><\/pre>\n<pre style=\"background: #f5f5f5;overflow: auto;width: auto;padding: 0.2em 0.6em 0.2em 40px;border-style: solid;border-color: gray;border-width: 0em 0em 0em 0.2em;margin: 0px;line-height: 125%;font-size: 15px\">featureLayer<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">tilingMode<\/span> <span style=\"color: #333333\">=<\/span> FeatureTilingMode<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">EnabledWithFullResolutionWhenSupported<\/span>\r\nserviceFeatureTable<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">featureRequestMode<\/span> <span style=\"color: #333333\">=<\/span> FeatureRequestMode<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">OnInteractionCache<\/span><\/pre>\n<\/div>\n<p style=\"text-align: justify\">These properties can be configured on a per-layer basis or for a whole <em>ArcGISMap<\/em> using <em>LoadSettings.featureRequestMode<\/em> and <em>LoadSettings.featureTilingMode<\/em>.<\/p>\n<p style=\"text-align: justify\">An alternative approach which is useful when your data includes curved features is to disable feature tiling using <em>FeatureTilingMode.disabled<\/em> and set the request mode to <em>FeatureRequestMode.onInteractionCache<\/em>. Furthermore, using the request mode <em>FeatureRequestMode.manualCache<\/em> with any feature tiling mode also provides full resolution geometries. These alternatives can be used to ensure that true curves are preserved in a snap source based on a feature service as seen in the GIF below. This is because if an application sets the <em>ArcGISRuntimeEnvironment.<\/em><em>serviceCurveGeometryMode<\/em> to <em>ServiceCurveGeometryMode.trueCurveClient<\/em> so that true curves are fetched, densified curves are returned from the service when feature tiling is used. The requirement to only allow snapping to snap sources that provide full resolution geometries is designed to help protect you from imprecise snapping wherever possible.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2340302,"id":2340302,"title":"curve_snapping","filename":"curve_snapping.gif","filesize":122119,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\/curve_snapping","alt":"Animated image showing snapping to curved features.","author":"341972","description":"","caption":"Snapping to curved features in an electric line distribution network.","name":"curve_snapping","status":"inherit","uploaded_to":2298622,"date":"2024-05-15 15:29:57","modified":"2024-05-21 13:54:59","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":544,"height":469,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping.gif","medium-width":303,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping.gif","medium_large-width":544,"medium_large-height":469,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping.gif","large-width":544,"large-height":469,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping.gif","1536x1536-width":544,"1536x1536-height":469,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping.gif","2048x2048-width":544,"2048x2048-height":469,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping-539x465.gif","card_image-width":539,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/curve_snapping.gif","wide_image-width":544,"wide_image-height":469}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Summary<\/h2>\n<p style=\"text-align: justify\">In this blog you\u2019ve learned about snapping and how to configure it for your application to leverage its advantages during an interactive editing session. The snapping roadmap includes allowing snapping to other sources of geometries in addition to feature layers like graphics overlays. We also plan to enhance the touch screen experience for snapping along with releasing sample applications to showcase snapping functionality in the Native Maps SDKs.<\/p>\n<p style=\"text-align: justify\">If you\u2019d like to get started with snapping easily and quickly, you can check out the <a href=\"https:\/\/developers.arcgis.com\/net\/wpf\/sample-code\/snap-geometry-edits\/\">Snap Geometry Edits<\/a> (.NET Maps SDK) sample for a fully configured code example you can copy into your own project. We\u2019d also love to hear your feedback on feature snapping! Let us know how you\u2019re getting on and what you\u2019re building on the <a href=\"https:\/\/community.esri.com\/t5\/arcgis-maps-sdks-for-native-apps\/ct-p\/arcgis-runtime-sdks\">Esri Community Forums.<\/a><\/p>\n<p style=\"text-align: justify\">If you\u2019re new to the ArcGIS Maps SDKs for Native Apps and want to have some fun testing out snapping, head to the <a href=\"https:\/\/developers.arcgis.com\/documentation\/\">ArcGIS Developers<\/a> documentation website! There you can learn how to sign up for a free developer account and gain access to everything you need to get started building your apps.<\/p>\n"}],"related_articles":[{"ID":2293842,"post_author":"3811","post_date":"2024-04-11 07:02:37","post_date_gmt":"2024-04-11 14:02:37","post_content":"","post_title":"What\u2019s new in ArcGIS Maps SDKs for Native Apps 200.4","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"whats-new-in-arcgis-maps-sdks-for-native-apps-200-4","to_ping":"","pinged":"","post_modified":"2024-05-10 12:22:56","post_modified_gmt":"2024-05-10 19:22:56","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2293842","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":2048452,"post_author":"6351","post_date":"2023-08-23 08:00:57","post_date_gmt":"2023-08-23 15:00:57","post_content":"","post_title":"Migrating your legacy .NET SketchEditor code to the new GeometryEditor","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"migrating-your-legacy-sketcheditor-code-to-the-new-geometryeditor","to_ping":"","pinged":"","post_modified":"2024-04-12 01:15:46","post_modified_gmt":"2024-04-12 08:15:46","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2048452","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1536502,"post_author":"9622","post_date":"2022-04-05 11:56:30","post_date_gmt":"2022-04-05 18:56:30","post_content":"","post_title":"Make it Snappy","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"make-it-snappy","to_ping":"","pinged":"","post_modified":"2022-04-05 14:08:30","post_modified_gmt":"2022-04-05 21:08:30","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1536502","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":2751222,"post_author":"359632","post_date":"2025-04-15 09:15:47","post_date_gmt":"2025-04-15 16:15:47","post_content":"","post_title":"How to perform snap geometry edits with utility network connectivity rules","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules","to_ping":"","pinged":"","post_modified":"2025-04-15 12:20:43","post_modified_gmt":"2025-04-15 19:20:43","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2751222","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/05\/Screenshot-2024-05-20-at-16.44.17.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/2024-04-12_12-58-44.png","show_article_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>Feature Snapping with the Native Maps SDKs<\/title>\n<meta name=\"description\" content=\"Learn how to configure and use feature snapping in your application with the Geometry Editor and the Native Maps SDKs.\" \/>\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\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Feature Snapping with the Native Maps SDKs\" \/>\n<meta property=\"og:description\" content=\"Learn how to configure and use feature snapping in your application with the Geometry Editor and the Native Maps SDKs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\" \/>\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=\"2025-05-13T17:08:34+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\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\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\"},\"author\":{\"name\":\"Luis Flores Carrubio\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/070faf4eca106797854d28154d2c36c7\"},\"headline\":\"Feature Snapping with the Native Maps SDKs\",\"datePublished\":\"2024-05-22T11:51:59+00:00\",\"dateModified\":\"2025-05-13T17:08:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\"},\"wordCount\":7,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"ArcGIS Maps SDKs for Native Apps\",\"geometry\",\"native apps\",\"Snapping\"],\"articleSection\":[\"Developers\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\",\"name\":\"Feature Snapping with the Native Maps SDKs\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2024-05-22T11:51:59+00:00\",\"dateModified\":\"2025-05-13T17:08:34+00:00\",\"description\":\"Learn how to configure and use feature snapping in your application with the Geometry Editor and the Native Maps SDKs.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Feature Snapping with the Native Maps SDKs\"}]},{\"@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\/070faf4eca106797854d28154d2c36c7\",\"name\":\"Luis Flores Carrubio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7b2ad2eb832dc4cfe17187976aa8d5662dd3950883a8ad45527c42b93c23d425?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7b2ad2eb832dc4cfe17187976aa8d5662dd3950883a8ad45527c42b93c23d425?s=96&d=blank&r=g\",\"caption\":\"Luis Flores Carrubio\"},\"description\":\"Luis is a Product Engineer at Esri working on the ArcGIS Maps SDKs for Game Engines and the ArcGIS Maps SDKs for Native Apps.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/-luisfc\/\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/lflores\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Feature Snapping with the Native Maps SDKs","description":"Learn how to configure and use feature snapping in your application with the Geometry Editor and the Native Maps SDKs.","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\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks","og_locale":"en_US","og_type":"article","og_title":"Feature Snapping with the Native Maps SDKs","og_description":"Learn how to configure and use feature snapping in your application with the Geometry Editor and the Native Maps SDKs.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2025-05-13T17:08:34+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks"},"author":{"name":"Luis Flores Carrubio","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/070faf4eca106797854d28154d2c36c7"},"headline":"Feature Snapping with the Native Maps SDKs","datePublished":"2024-05-22T11:51:59+00:00","dateModified":"2025-05-13T17:08:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks"},"wordCount":7,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["ArcGIS Maps SDKs for Native Apps","geometry","native apps","Snapping"],"articleSection":["Developers"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks","name":"Feature Snapping with the Native Maps SDKs","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2024-05-22T11:51:59+00:00","dateModified":"2025-05-13T17:08:34+00:00","description":"Learn how to configure and use feature snapping in your application with the Geometry Editor and the Native Maps SDKs.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/feature-snapping-with-the-native-maps-sdks#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Feature Snapping with the Native Maps SDKs"}]},{"@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\/070faf4eca106797854d28154d2c36c7","name":"Luis Flores Carrubio","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/7b2ad2eb832dc4cfe17187976aa8d5662dd3950883a8ad45527c42b93c23d425?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7b2ad2eb832dc4cfe17187976aa8d5662dd3950883a8ad45527c42b93c23d425?s=96&d=blank&r=g","caption":"Luis Flores Carrubio"},"description":"Luis is a Product Engineer at Esri working on the ArcGIS Maps SDKs for Game Engines and the ArcGIS Maps SDKs for Native Apps.","sameAs":["https:\/\/www.linkedin.com\/in\/-luisfc\/"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/lflores"}]}},"text_date":"May 22, 2024","author_name":"Luis Flores Carrubio","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/lflores","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/04\/2024-04-12_12-58-44.png","primary_product":"ArcGIS Maps SDK for Kotlin","tag_data":[{"term_id":768202,"name":"ArcGIS Maps SDKs for Native Apps","slug":"arcgis-maps-sdks-for-native-apps","term_group":0,"term_taxonomy_id":768202,"taxonomy":"post_tag","description":"","parent":0,"count":30,"filter":"raw"},{"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":758802,"name":"native apps","slug":"native-apps","term_group":0,"term_taxonomy_id":758802,"taxonomy":"post_tag","description":"","parent":0,"count":17,"filter":"raw"},{"term_id":28011,"name":"Snapping","slug":"snapping","term_group":0,"term_taxonomy_id":28011,"taxonomy":"post_tag","description":"","parent":0,"count":8,"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"}],"product_data":[{"term_id":769142,"name":"ArcGIS Maps SDK for .NET","slug":"sdk-net","term_group":0,"term_taxonomy_id":769142,"taxonomy":"product","description":"","parent":36601,"count":39,"filter":"raw"},{"term_id":769162,"name":"ArcGIS Maps SDK for Java","slug":"sdk-java","term_group":0,"term_taxonomy_id":769162,"taxonomy":"product","description":"","parent":36601,"count":24,"filter":"raw"},{"term_id":768902,"name":"ArcGIS Maps SDK for Kotlin","slug":"sdk-kotlin","term_group":0,"term_taxonomy_id":768902,"taxonomy":"product","description":"","parent":36601,"count":33,"filter":"raw"},{"term_id":769152,"name":"ArcGIS Maps SDK for Qt","slug":"sdk-qt","term_group":0,"term_taxonomy_id":769152,"taxonomy":"product","description":"","parent":36601,"count":36,"filter":"raw"},{"term_id":768912,"name":"ArcGIS Maps SDK for Swift","slug":"sdk-swift","term_group":0,"term_taxonomy_id":768912,"taxonomy":"product","description":"","parent":36601,"count":32,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=sdk-kotlin","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2298622","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\/341972"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2298622"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2298622\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2298622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2298622"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2298622"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2298622"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2298622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}