/// <summary> /// Updates the m_Polyline and MeasureItemsCollection based on the progress /// reported by <see cref="Esri.ArcGISRuntime.Controls.Editor"/> /// </summary> /// <param name="status"></param> private void OnStatusReported(GeometryEditStatus status) { var polyline = status.NewGeometry as Polyline; // Only reset display when first vertex is committed. if (polyline != null && polyline.Parts != null && polyline.Parts.Count > 0) { var vertices = polyline.Parts[0].GetPoints(); if (vertices != null && vertices.Count() == 1) { ResetDisplay(); } } switch (status.GeometryEditAction) { case GeometryEditAction.AddedVertex: { MeasureItemCollection.Insert(status.VertexPosition.CoordinateIndex, new MeasureItem() { Location = status.NewVertex, LinearUnitType = LinearUnitType, CoordinateFormat = CoordinateFormat }); break; } case GeometryEditAction.DeletedVertex: { MeasureItemCollection.RemoveAt(status.VertexPosition.CoordinateIndex); break; } default: { MeasureItemCollection.Clear(); if (polyline != null && polyline.Parts != null) { foreach (var p in polyline.Parts[0].GetPoints()) { MeasureItemCollection.Add(new MeasureItem() { Location = p, LinearUnitType = LinearUnitType, CoordinateFormat = CoordinateFormat }); } } break; } } UpdateDisplay(polyline); }
private void OnStatusUpdated(GeometryEditStatus status) { _measurements.Clear(); var polyline = status.NewGeometry as Polyline; if (polyline == null || polyline.Parts == null || polyline.Parts.Count == 0) return; var vertices = polyline.Parts[0].GetPoints(); if (vertices == null || !vertices.Any()) return; var count = vertices.Count(); if (count <= 1) return; MapPoint previous = null; int i = 1; foreach (var point in vertices) { if (previous == null) { previous = point; continue; } var lineSegment = new Polyline(new MapPoint[] {previous, point}, polyline.SpatialReference); var intermediateLength = GeometryEngine.GeodesicLength(lineSegment); _measurements.Add(string.Format("[{0}-{1}]\t:\t{2:0} m\n", i, i + 1, intermediateLength)); previous = point; i++; } var totalLength = GeometryEngine.GeodesicLength(polyline); TotalLength.Text = string.Format("Total Length\t:\t{0:0} m\n", totalLength); if (count <= 2) return; var layer = MyMapView.Map.Layers["ResultLayer"] as GraphicsLayer; if (layer == null) return; var graphic = layer.Graphics.FirstOrDefault(); var polygon = new Polygon(vertices, polyline.SpatialReference); if (graphic != null) graphic.Geometry = polygon; else layer.Graphics.Add(new Graphic(polygon)); if (count <= 1) return; if (count <= 2) return; var area = GeometryEngine.GeodesicArea(polygon); TotalArea.Text = string.Format("Area\t\t:\t{0:0} m²\n", area); }
/// <summary> /// Updates the m_Polyline and MeasureItemsCollection based on the progress /// reported by <see cref="Esri.ArcGISRuntime.Controls.Editor"/> /// </summary> /// <param name="status"></param> private void OnStatusReported(GeometryEditStatus status) { var polyline = status.NewGeometry as Polyline; switch (status.GeometryEditAction) { case GeometryEditAction.AddedVertex: { MeasureItemCollection.Insert(status.VertexPosition.CoordinateIndex, new MeasureItem() { Location = status.NewVertex, LinearUnitType = LinearUnitType, CoordinateFormat = CoordinateFormat }); break; } case GeometryEditAction.DeletedVertex: { MeasureItemCollection.RemoveAt(status.VertexPosition.CoordinateIndex); break; } default: { MeasureItemCollection.Clear(); if (polyline != null) { foreach (var p in polyline.Paths[0]) { MeasureItemCollection.Add(new MeasureItem() { Location = new MapPoint(p, polyline.SpatialReference), LinearUnitType = LinearUnitType, CoordinateFormat = CoordinateFormat }); } } break; } } UpdateDisplay(polyline); }
/// <summary> /// Updates the m_Polyline and MeasureItemsCollection based on the progress /// reported by <see cref="Esri.ArcGISRuntime.Controls.Editor"/> /// </summary> /// <param name="status"></param> private void OnStatusReported(GeometryEditStatus status) { var polyline = status.NewGeometry as Polyline; // Only reset display when first vertex is committed. if (polyline != null && polyline.Parts != null && polyline.Parts.Count > 0) { var vertices = polyline.Parts[0].GetPoints(); if (vertices != null && vertices.Count() == 1) ResetDisplay(); } switch (status.GeometryEditAction) { case GeometryEditAction.AddedVertex: { MeasureItemCollection.Insert(status.VertexPosition.CoordinateIndex, new MeasureItem() { Location = status.NewVertex, LinearUnitType = LinearUnitType, CoordinateFormat = CoordinateFormat }); break; } case GeometryEditAction.DeletedVertex: { MeasureItemCollection.RemoveAt(status.VertexPosition.CoordinateIndex); break; } default: { MeasureItemCollection.Clear(); if (polyline != null && polyline.Parts != null) { foreach (var p in polyline.Parts[0].GetPoints()) { MeasureItemCollection.Add(new MeasureItem() { Location = p, LinearUnitType = LinearUnitType, CoordinateFormat = CoordinateFormat }); } } break; } } UpdateDisplay(polyline); }
private void OnStatusUpdated(GeometryEditStatus status) { _measurements.Clear(); var polyline = status.NewGeometry as Polyline; if (polyline == null || polyline.Parts == null || polyline.Parts.Count == 0) { return; } var vertices = polyline.Parts[0].GetPoints(); if (vertices == null || !vertices.Any()) { return; } var count = vertices.Count(); if (count <= 1) { return; } MapPoint previous = null; int i = 1; foreach (var point in vertices) { if (previous == null) { previous = point; continue; } var lineSegment = new Polyline(new MapPoint[] { previous, point }, polyline.SpatialReference); var intermediateLength = GeometryEngine.GeodesicLength(lineSegment); _measurements.Add(string.Format("[{0}-{1}]\t:\t{2:0} m\n", i, i + 1, intermediateLength)); previous = point; i++; } var totalLength = GeometryEngine.GeodesicLength(polyline); TotalLength.Text = string.Format("Total Length\t:\t{0:0} m\n", totalLength); if (count <= 2) { return; } var layer = MyMapView.Map.Layers["ResultLayer"] as GraphicsLayer; if (layer == null) { return; } var graphic = layer.Graphics.FirstOrDefault(); var polygon = new Polygon(vertices, polyline.SpatialReference); if (graphic != null) { graphic.Geometry = polygon; } else { layer.Graphics.Add(new Graphic(polygon)); } if (count <= 1) { return; } if (count <= 2) { return; } var area = GeometryEngine.GeodesicArea(polygon); TotalArea.Text = string.Format("Area\t\t:\t{0:0} m²\n", area); }