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
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.