{"id":2751222,"date":"2025-04-15T09:15:47","date_gmt":"2025-04-15T16:15:47","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2751222"},"modified":"2025-04-15T12:20:43","modified_gmt":"2025-04-15T19:20:43","slug":"how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules","title":{"rendered":"How to perform snap geometry edits with utility network connectivity rules"},"author":359632,"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,27971,771862,28011,35461],"industry":[],"product":[769142,36601],"class_list":["post-2751222","blog","type-blog","status-publish","format-standard","hentry","category-developers","tag-arcgis-maps-sdks-for-native-apps","tag-editing","tag-feature","tag-snapping","tag-utility-network","product-sdk-net","product-developers"],"acf":{"authors":[{"ID":359632,"user_firstname":"Hamish","user_lastname":"Duff","nickname":"Hamish Duff","user_nicename":"hduff","display_name":"Hamish Duff","user_email":"hduff@esri.com","user_url":"","user_registered":"2024-07-26 10:03:08","user_description":"I'm a product engineer on the ArcGIS Maps SDKs for Native Apps team.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/07\/99325835-213x200.jpeg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"Learn about feature creation and editing using geometry editor snapping with utility network connectivity rules in 200.7 of the Native Maps SDKs","flexible_content":[{"acf_fc_layout":"content","content":"<h2>Introduction<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"6\">Utility networks are advanced systems used to model and analyze complex infrastructure such as gas, electricity, water, and telecommunications. These networks provide a comprehensive framework for representing the connectivity and behavior of utility systems in a geospatial environment.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"8\">Accurate representation of these systems is crucial for maintaining data integrity and supporting efficient utility operations. With the <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/developers\/developers\/whats-new-in-arcgis-maps-sdks-for-native-apps-200-7\">latest 200.7 release<\/a> of the ArcGIS Maps SDK for Native Apps, the <code>GeometryEditor<\/code>\u00a0now includes rule-based snapping capabilities, significantly enhancing the accuracy and efficiency of geometry editing tasks.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"10\">In this blog, we will explore how to use utility network connectivity rules when editing geometries. You will learn how to create and configure snap rules, understand\u00a0<code>SnapRuleBehavior<\/code>, and perform additional utility network operations to optimize your workflow.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"10\"><em>The concepts shared here apply to the Qt, Kotlin, Swift and .NET Maps SDKs in the ArcGIS Maps SDKs for Native Apps suite, with the code snippets shared using the .NET Maps SDK.<\/em><\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<h2 id=\"what-are-network-rules\" class=\"code-line\" dir=\"auto\" data-line=\"12\">What are network rules?<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"14\"><a href=\"https:\/\/developers.arcgis.com\/net\/utility-network\/\" data-href=\"https:\/\/developers.arcgis.com\/net\/utility-network\/\">Utility networks<\/a>\u00a0use network rules to dictate which network features can connect or associate in the utility network based on their specified asset types.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"16\"><em>Note:\u00a0<a href=\"https:\/\/developers.arcgis.com\/net\/api-reference\/api\/net\/Esri.ArcGISRuntime\/Esri.ArcGISRuntime.UtilityNetworks.UtilityAssetType.html\" data-href=\"https:\/\/developers.arcgis.com\/net\/api-reference\/api\/net\/Esri.ArcGISRuntime\/Esri.ArcGISRuntime.UtilityNetworks.UtilityAssetType.html\">Asset type<\/a>\u00a0refers to the combined network source id, asset group code and asset type code.<\/em><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"18\">Network rules fall into a number of categories:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"20\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"20\">Junction-edge connectivity<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"21\">Junction-junction connectivity<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"22\">Edge-junction-edge connectivity<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"23\">Structural attachment<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"24\">Containment<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"26\">Snap rules can be created, for use in the\u00a0<a href=\"https:\/\/developers.arcgis.com\/net\/api-reference\/api\/net\/Esri.ArcGISRuntime\/Esri.ArcGISRuntime.UI.Editing.GeometryEditor.html\" data-href=\"https:\/\/developers.arcgis.com\/net\/api-reference\/api\/net\/Esri.ArcGISRuntime\/Esri.ArcGISRuntime.UI.Editing.GeometryEditor.html\">geometry editor<\/a>, using a subset of the connectivity rules in a network.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"28\"><em>Note: Structural attachment and containment rules are not related to spatial connectivity and so are not utilized in the creation of snap rules.<\/em><\/p>\n"},{"acf_fc_layout":"content","content":"<div>\n<div>\n<h3 id=\"connectivity-rules-as-snap-rules\" class=\"code-line\" dir=\"auto\" data-line=\"30\">Connectivity rules as snap rules<\/h3>\n<p class=\"code-line code-active-line\" dir=\"auto\" data-line=\"32\">The following image displays an example of each connectivity rule. More information can be found in the\u00a0<a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/data\/utility-network\/network-rules.htm\" data-href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/data\/utility-network\/network-rules.htm\">ArcGIS Pro documentation<\/a>.<\/p>\n<\/div>\n<\/div>\n"},{"acf_fc_layout":"image","image":{"ID":2751232,"id":2751232,"title":"ConnectivityRules","filename":"ConnectivityRules.png","filesize":21385,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\/connectivityrules","alt":"","author":"359632","description":"","caption":"","name":"connectivityrules","status":"inherit","uploaded_to":2751222,"date":"2025-04-08 09:53:35","modified":"2025-04-08 09:53:35","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":649,"height":131,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules-213x131.png","thumbnail-width":213,"thumbnail-height":131,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","medium-width":464,"medium-height":94,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","medium_large-width":649,"medium_large-height":131,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","large-width":649,"large-height":131,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","1536x1536-width":649,"1536x1536-height":131,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","2048x2048-width":649,"2048x2048-height":131,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","card_image-width":649,"card_image-height":131,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/ConnectivityRules.png","wide_image-width":649,"wide_image-height":131}},"image_position":"center","orientation":"horizontal","hyperlink":"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/data\/utility-network\/network-rules.htm"},{"acf_fc_layout":"content","content":"<p class=\"code-line\" dir=\"auto\" data-line=\"36\">Junction-junction connectivity rules govern the ability for point features or junction objects to connect where they may or may not be geometrically coincident. These rules are typically used to support terminal connectivity. As they do not necessarily require geometric coincidence, they are not used when creating snap rules.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"38\">Junction-edge connectivity rules govern connectivity between point and line objects. These rules are predominantly used for spatial connectivity and so are used when creating snap rules. These rules also operate in both directions, that is if a rule exists that allows a specified junction to snap to a specified edge then the edge will also be allowed to snap to the junction.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"40\">Edge-junction-edge connectivity rules govern the ability for line features or edge objects to connect using an intermediate junction feature or junction object. These rules are useful to ensure a line does not terminate with a junction (because junctions should connect two features or objects). These rules are not taken into account when creating snap rules.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"42\">While no edge-edge connectivity rules exist, additional snap rules are created for edges to allow snapping to endpoint vertices of other edges with the same asset type e.g. to extend cable or pipes.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"44\"><em>Note: The same asset type means the network source id, asset group code and asset type code are the same.<br \/>\n<\/em><\/p>\n<table class=\"code-line\" dir=\"auto\" data-line=\"46\">\n<thead class=\"code-line\" dir=\"auto\" data-line=\"46\">\n<tr class=\"code-line\" dir=\"auto\" data-line=\"46\">\n<th>Connectivity Rule<\/th>\n<th>Used in snap rules<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"code-line\" dir=\"auto\" data-line=\"48\">\n<tr class=\"code-line\" dir=\"auto\" data-line=\"48\">\n<td>Junction-junction<\/td>\n<td>\u274c<\/td>\n<\/tr>\n<tr class=\"code-line\" dir=\"auto\" data-line=\"49\">\n<td>Junction-edge<\/td>\n<td>\u2714<\/td>\n<\/tr>\n<tr class=\"code-line\" dir=\"auto\" data-line=\"50\">\n<td>Edge-junction-edge<\/td>\n<td>\u274c<\/td>\n<\/tr>\n<tr class=\"code-line\" dir=\"auto\" data-line=\"51\">\n<td>Edge-edge (for same asset type)<\/td>\n<td>\u2714<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n"},{"acf_fc_layout":"content","content":"<h3 id=\"how-to-create-snap-rules\" class=\"code-line\" dir=\"auto\" data-line=\"53\">How to create snap rules<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"54\">You can create\u00a0<code>SnapRules<\/code>\u00a0in two different ways, and both require the utility network you are working with.<\/p>\n<h4 id=\"using-utilityassettype\" class=\"code-line\" dir=\"auto\" data-line=\"56\">Using\u00a0<code>UtilityAssetType<\/code>:<\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"58\">If you know the utility asset type, you can use this in conjunction with the utility network. This is particularly useful when editing an existing feature as you can call\u00a0<code>UtilityNetwork.CreateElement(arcGISFeature)<\/code>\u00a0and then get the\u00a0<code>UtilityElement.AssetType<\/code>.<\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\nSnapRules snapRules = <span style=\"color: #d73a49\">await<\/span> SnapRules.CreateAsync(utilityNetwork, utilityAssetType);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"sidebar","content":"<p><em>Note:\u00a0<code>UtilityNetwork.CreateElement(arcGISFeature)<\/code>\u00a0only works if the feature already exists in the table. If you don&#8217;t have an existing feature but you know which asset type you want to use, you can obtain it from the asset group in the utility network source.<\/em><\/p>\n","image_reference":false,"layout":"standard","image_reference_figure":"","snippet":"","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<h4 id=\"using-feature-attributes\" class=\"code-line code-active-line\" dir=\"auto\" data-line=\"66\">Using feature attributes:<\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"68\">If you have a set of\u00a0<code>Feature.Attributes<\/code>\u00a0you can use these with the utility network and the\u00a0<code>FeatureTable<\/code>\u00a0associated with the feature to create snap rules. This is a good approach to use if you are creating a new feature using a\u00a0<code>FeatureTemplate<\/code>.<\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\nSnapRules snapRules = <span style=\"color: #d73a49\">await<\/span> SnapRules.CreateAsync(utilityNetwork, featureTable, featureAttributes);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3 id=\"configuring-the-geometry-editor-with-snap-rules\" class=\"code-line\" dir=\"auto\" data-line=\"74\">Configuring the geometry editor with snap rules<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"76\">Ensure you have a geometry editor connected to your map view and your map view has a map containing the utility network you are working with. Then, using the snap rules you previously created, synchronize the snap sources in the geometry editor.<\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\nGeometryEditor.SnapSettings.SyncSourceSettings(snapRules, SnapSourceEnablingBehavior.SetFromRules);\r\n<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"82\">Using\u00a0<code>SnapSourceEnablingBehavior.SetFromRules<\/code>\u00a0will enable snap sources for which snap rules are having an effect. This effect is described by a\u00a0<code>SnapRuleBehavior<\/code>\u00a0which I cover in more detail later in this article.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"84\">Alternatively you can use\u00a0<code>SnapSourceEnablingBehavior.Preserve<\/code>\u00a0which will leave the\u00a0<code>SnapSourceSettings.IsEnabled<\/code>\u00a0properties unaffected when synchronizing the snap sources. This may be a useful approach to use if you are working with asset types that have rules for multiple snap sources but you know you only want to work with the same snap source regardless of the asset type.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"86\">After synchronizing the snap sources with the geometry editor, snap sources can be found in the\u00a0<code>GeometryEditor.SnapSettings.SnapSourceSettings<\/code>\u00a0collection. If your map includes\u00a0<code>SubtypeFeatureLayer<\/code>\u00a0snap sources, child\u00a0<code>SubtypeSublayer<\/code>\u00a0objects are included as snap sources in the parent\u00a0<code>SnapSourceSettings.ChildSnapSources<\/code>\u00a0collection in the same order as the\u00a0<code>SubtypeFeatureLayer.SubtypeSublayers<\/code>\u00a0collection.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"88\">Now that the snap sources have been synchronized with a set of snap rules, the geometry editor can be started and will use the snap rules for the asset type you are editing.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"90\">The geometry editor can be started with an existing geometry (for example from a feature that is being edited).<\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\nGeometryEditor.Start(existingFeature.Geometry);\r\n<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"95\">Or with a\u00a0<code>GeometryType<\/code>\u00a0to create a new geometry.<\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\nGeometryEditor.Start(GeometryType.Point);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3 id=\"what-does-snaprulebehavior-mean\" class=\"code-line\" dir=\"auto\" data-line=\"101\">What does\u00a0<code>SnapRuleBehavior<\/code>\u00a0mean?<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"102\">After synchronizing your geometry editor with a set of snap rules, each of your snap sources will be marked with a\u00a0<code>SnapRuleBehavior<\/code>. This is an indication of the presence and impact of snap rules on your snap source. Here is a short overview of what these different values mean and the situations you may come across them:<\/p>\n<h4 id=\"snaprulebehaviornone\" class=\"code-line\" dir=\"auto\" data-line=\"104\"><code>SnapRuleBehavior.None<\/code><\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"106\">This means the snap source is not a part of the utility network that you created the snap rules with. No connectivity rules exist and so\u00a0<code>SnapRules<\/code>\u00a0have no influence here &#8211; snapping can freely occur to any geometry in this snap source (assuming the source is enabled for snapping). Typically you will see this value when working with a graphics overlay or a feature layer that is not a part of the utility network.<\/p>\n<h4 id=\"snaprulebehaviorruleslimitsnapping\" class=\"code-line\" dir=\"auto\" data-line=\"108\"><code>SnapRuleBehavior.RulesLimitSnapping<\/code><\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"110\">The snap source is a part of the utility network, rules exist such that snapping can occur between your chosen asset type and at least one asset type in the snap source.<\/p>\n<h4 id=\"snaprulebehaviorrulespreventsnapping\" class=\"code-line\" dir=\"auto\" data-line=\"112\"><code>SnapRuleBehavior.RulesPreventSnapping<\/code><\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"114\">The snap source is a part of the utility network and no rules exist between your chosen asset type and any asset type in the snap source. No snapping will occur whether the snap source is enabled or disabled.<\/p>\n"},{"acf_fc_layout":"content","content":"<h2 id=\"additional-utility-network-operations\" class=\"code-line\" dir=\"auto\" data-line=\"116\">Additional utility network operations<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"118\">Editing utility network feature geometry with snap rules helps to ensure your edits result in valid connections. Should you wish to perform topology validation after making edits, or perform a network trace, check out the links to utility network samples in the next section.<\/p>\n<h2 id=\"summary\" class=\"code-line\" dir=\"auto\" data-line=\"120\">Summary<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"122\">The geometry editor with snap rules is a powerful tool to help you make efficient and accurate edits to features in a utility network. In this article I\u2019ve given an overview of what utility networks and utility network rules are and why maintaining utility networks with precise edits is an important workflow. I\u2019ve explained how new functionality coming in 200.7 allows you to use utility network connectivity rules to create snap rules and how these snap rules can be used to configure your geometry editor.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"124\">We\u2019d love to know what apps you\u2019re building and to hear your feedback on our new rule based snapping functionality. Suggestions are welcome over on our\u00a0<a href=\"https:\/\/community.esri.com\/t5\/arcgis-maps-sdks-for-native-apps\/ct-p\/arcgis-runtime-sdks\" data-href=\"https:\/\/community.esri.com\/t5\/arcgis-maps-sdks-for-native-apps\/ct-p\/arcgis-runtime-sdks\">Esri Community Forums<\/a>.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"126\">If you\u2019d like to know more about utility network and editing geometries please have a look at the related articles and samples below.<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"128\">\n<li dir=\"auto\" data-line=\"128\">Validate utility network topology Native Maps SDK sample:\u00a0<a href=\"https:\/\/developers.arcgis.com\/net\/maui\/sample-code\/validate-utility-network-topology\/\">.NET<\/a> |\u00a0<a href=\"https:\/\/developers.arcgis.com\/swift\/sample-code\/validate-utility-network-topology\/\">Swift<\/a> | <a href=\"https:\/\/developers.arcgis.com\/kotlin\/sample-code\/validate-utility-network-topology\/\">Kotlin<\/a> | <a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/sample-code\/validate-utility-network-topology\/\">Qt<\/a><\/li>\n<li dir=\"auto\" data-line=\"128\">Trace utility network Native Maps SDK sample:\u00a0<a href=\"https:\/\/developers.arcgis.com\/net\/maui\/sample-code\/trace-utility-network\/\">.NET<\/a> |\u00a0<a href=\"https:\/\/developers.arcgis.com\/swift\/sample-code\/trace-utility-network\/\">Swift<\/a> |\u00a0<a href=\"https:\/\/developers.arcgis.com\/kotlin\/sample-code\/trace-utility-network\/\">Kotlin<\/a> |\u00a0<a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/sample-code\/trace-utility-network\/\">Qt<\/a><\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"128\">Snap geometry edits with utility network rules Native Maps SDK sample:\u00a0<a href=\"https:\/\/developers.arcgis.com\/net\/maui\/sample-code\/snap-geometry-edits-with-utility-network-rules\/\">.NET<\/a> |\u00a0<a href=\"https:\/\/developers.arcgis.com\/swift\/sample-code\/snap-geometry-edits-with-utility-network-rules\/\">Swift<\/a> |\u00a0<a href=\"https:\/\/developers.arcgis.com\/kotlin\/sample-code\/snap-geometry-edits-with-utility-network-rules\/\">Kotlin<\/a><\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"129\">Create and edit geometries Native Maps SDK sample:\u00a0<a href=\"https:\/\/developers.arcgis.com\/net\/maui\/sample-code\/create-and-edit-geometries\/\" data-href=\"https:\/\/developers.arcgis.com\/net\/maui\/sample-code\/create-and-edit-geometries\/\">.NET<\/a>\u00a0|\u00a0<a href=\"https:\/\/developers.arcgis.com\/swift\/sample-code\/create-and-edit-geometries\/\" data-href=\"https:\/\/developers.arcgis.com\/swift\/sample-code\/create-and-edit-geometries\/\">Swift<\/a>\u00a0|\u00a0<a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/sample-code\/create-and-edit-geometries\/\" data-href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/sample-code\/create-and-edit-geometries\/\">Qt<\/a>\u00a0|\u00a0<a href=\"https:\/\/developers.arcgis.com\/flutter\/sample-code\/create-and-edit-geometries\/\" data-href=\"https:\/\/developers.arcgis.com\/flutter\/sample-code\/create-and-edit-geometries\/\">Flutter<\/a><\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"130\"><a href=\"https:\/\/developers.arcgis.com\/net\/api-reference\/api\/netwin\/Esri.ArcGISRuntime\/index.html\" data-href=\"https:\/\/developers.arcgis.com\/net\/api-reference\/api\/netwin\/Esri.ArcGISRuntime\/index.html\">ArcGIS Maps SDK for .NET API Reference<\/a><\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"131\"><a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/migrating-your-legacy-sketcheditor-code-to-the-new-geometryeditor\/\" data-href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/migrating-your-legacy-sketcheditor-code-to-the-new-geometryeditor\/\">Migrating your legacy .NET SketchEditor code to the new GeometryEditor<\/a><\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"133\">To see an example of snapping with utility network connectivity rules as part of a larger feature editing workflow take a look at our 2025 Dev Summit plenary below.<\/p>\n"},{"acf_fc_layout":"kaltura","video_id":"1_51igflaj","time":true,"start":"445","stop":"745"}],"related_articles":[{"ID":2749742,"post_author":"4091","post_date":"2025-04-09 06:19:10","post_date_gmt":"2025-04-09 13:19:10","post_content":"","post_title":"What's new in ArcGIS Maps SDKs for Native Apps 200.7","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"whats-new-in-arcgis-maps-sdks-for-native-apps-200-7","to_ping":"","pinged":"","post_modified":"2025-05-19 06:01:16","post_modified_gmt":"2025-05-19 13:01:16","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2749742","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":2670772,"post_author":"366462","post_date":"2025-02-05 04:34:37","post_date_gmt":"2025-02-05 12:34:37","post_content":"","post_title":"2024 Recap: Utility Network Enhancements in ArcGIS Maps SDKs for Native Apps","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"2024-recap-utility-network-enhancements-in-arcgis-maps-sdks-for-native-apps","to_ping":"","pinged":"","post_modified":"2025-02-10 11:19:00","post_modified_gmt":"2025-02-10 19:19:00","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2670772","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"show_article_image":false,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/04\/UNSnapping.jpg","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>How to perform snap geometry edits with utility network connectivity rules<\/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\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to perform snap geometry edits with utility network connectivity rules\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\" \/>\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-04-15T19:20:43+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=\"7 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-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\"},\"author\":{\"name\":\"Hamish Duff\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/776665929a66fa840b76139acd87f394\"},\"headline\":\"How to perform snap geometry edits with utility network connectivity rules\",\"datePublished\":\"2025-04-15T16:15:47+00:00\",\"dateModified\":\"2025-04-15T19:20:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\"},\"wordCount\":11,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"ArcGIS Maps SDKs for Native Apps\",\"editing\",\"feature\",\"Snapping\",\"utility network\"],\"articleSection\":[\"Developers\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\",\"name\":\"How to perform snap geometry edits with utility network connectivity rules\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2025-04-15T16:15:47+00:00\",\"dateModified\":\"2025-04-15T19:20:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to perform snap geometry edits with utility network connectivity rules\"}]},{\"@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\/776665929a66fa840b76139acd87f394\",\"name\":\"Hamish Duff\",\"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\/2024\/07\/99325835-213x200.jpeg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/07\/99325835-213x200.jpeg\",\"caption\":\"Hamish Duff\"},\"description\":\"I'm a product engineer on the ArcGIS Maps SDKs for Native Apps team.\",\"url\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to perform snap geometry edits with utility network connectivity rules","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-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules","og_locale":"en_US","og_type":"article","og_title":"How to perform snap geometry edits with utility network connectivity rules","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2025-04-15T19:20:43+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules"},"author":{"name":"Hamish Duff","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/776665929a66fa840b76139acd87f394"},"headline":"How to perform snap geometry edits with utility network connectivity rules","datePublished":"2025-04-15T16:15:47+00:00","dateModified":"2025-04-15T19:20:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules"},"wordCount":11,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["ArcGIS Maps SDKs for Native Apps","editing","feature","Snapping","utility network"],"articleSection":["Developers"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules","name":"How to perform snap geometry edits with utility network connectivity rules","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2025-04-15T16:15:47+00:00","dateModified":"2025-04-15T19:20:43+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-net\/developers\/how-to-perform-snap-geometry-edits-with-utility-network-connectivity-rules#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"How to perform snap geometry edits with utility network connectivity rules"}]},{"@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\/776665929a66fa840b76139acd87f394","name":"Hamish Duff","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\/2024\/07\/99325835-213x200.jpeg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/07\/99325835-213x200.jpeg","caption":"Hamish Duff"},"description":"I'm a product engineer on the ArcGIS Maps SDKs for Native Apps team.","url":""}]}},"text_date":"April 15, 2025","author_name":"Hamish Duff","author_page":false,"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 .NET","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":27971,"name":"editing","slug":"editing","term_group":0,"term_taxonomy_id":27971,"taxonomy":"post_tag","description":"","parent":0,"count":166,"filter":"raw"},{"term_id":771862,"name":"feature","slug":"feature","term_group":0,"term_taxonomy_id":771862,"taxonomy":"post_tag","description":"","parent":0,"count":3,"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"},{"term_id":35461,"name":"utility network","slug":"utility-network","term_group":0,"term_taxonomy_id":35461,"taxonomy":"post_tag","description":"","parent":0,"count":61,"filter":"raw"}],"category_data":[{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":421,"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":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":763,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=sdk-net","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2751222","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\/359632"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2751222"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2751222\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2751222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2751222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2751222"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2751222"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2751222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}