Hello,how to remove duplicate MapPoints?Is there an easy way? or should I upload the coordinates of each MapPoint, then save and delete the same?
Thank you in advanceDavid
I created sample code that copies all vertices from a line layer (TestLines) into a point layer (PointsNoDuplicates) and then deletes all duplicates (with the same shape) using the "management.DeleteIdentical" GP tool. I used an addin with a button to test this code and a map that contained the required layers.
protected override async void OnClick() { try { var lineLayerName = "TestLines"; var noDupPointLayerName = "PointsNoDuplicates"; FeatureLayer polyLine = MapView.Active.Map.GetLayersAsFlattenedList().FirstOrDefault(layer => layer.Name.Equals(lineLayerName)) as FeatureLayer; FeatureLayer pointsNoDuplicates = MapView.Active.Map.GetLayersAsFlattenedList().FirstOrDefault(layer => layer.Name.Equals(noDupPointLayerName)) as FeatureLayer; var ok = await QueuedTask.Run<bool>(() => { var createFeatures = new EditOperation(); createFeatures.Name = "Add Points with duplicates"; //Create a feature for each point using (var fc = polyLine.Search()) { while (fc.MoveNext()) { using (var feature = fc.Current as Feature) { var multiPart = feature.GetShape() as Multipart; foreach (var point in multiPart.Points) { createFeatures.Create(pointsNoDuplicates, point); } } } } //Execute to execute the operation //Must be called within QueuedTask.Run var result = createFeatures.Execute(); if (!result) { MessageBox.Show($@"Error creating points with duplicated: {createFeatures.ErrorMessage}"); } return result; }); if (!ok) return; await Project.Current.SaveEditsAsync(); // Clear selection await QueuedTask.Run (() => pointsNoDuplicates.ClearSelection()); // arcpy.management.DeleteIdentical(noDupPointLayerName, "Shape", "0.1 Meters", 0.1) var paramsArray = Geoprocessing.MakeValueArray(noDupPointLayerName, "Shape", "0.1 Meters", 0.1); var delDupsDlg = new ProgressDialog("Delete Duplicates", "Cancel", 100, false); var progsrc=new CancelableProgressorSource(delDupsDlg); await Geoprocessing.ExecuteToolAsync("management.DeleteIdentical", paramsArray, null, progsrc.Progressor); } catch (Exception ex) { MessageBox.Show($@"{ex.Message}"); } }
Note that when i click my button repeatedly it will add the same points again (hence creating duplicates) which are then removed by the GP tool.
I had a Polyline layer which I converted to a PointCollection from which I created a Point layer.
You have to describe your workflow in a bit more detail. For example, where are your MapPoints? In a graphic layer, in a feature layer, in memory? You are talking about 'uploading coordinates', I am not clear what that means. Do you have to check the 'dataset' to where you 'upload' your MapPoints for duplicates before you upload? If you have a feature class with MapPoints you suspect having duplicates you can use the 'Delete Identical (Data Management)' geoprocessing tool: Delete Identical (Data Management)—ArcGIS Pro | Documentation
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.