private void OnMakeUnionBufferClicked(object sender, EventArgs e) { try { // Get the boolean value whether to create a single convex hull (true) or independent convex hulls (false). bool unionBool = (bool)_convexHullListSwitch.Checked; // Add the geometries of the two polygon graphics to a list of geometries. It will be used as the 1st // input parameter of the GeometryEngine.ConvexHull function. List <Geometry> inputListOfGeomtries = new List <Geometry> { _polygonGraphic1.Geometry, _polygonGraphic2.Geometry }; // Get the returned result from the convex hull operation. When unionBool = true there will be one returned // polygon, when unionBool = false there will be one convex hull returned per input geometry. IEnumerable <Geometry> convexHullGeometries = GeometryEngine.ConvexHull(inputListOfGeomtries, unionBool); // Loop through the returned geometries. foreach (Geometry oneGeometry in convexHullGeometries) { // Create a simple line symbol for the outline of the convex hull graphic(s). SimpleLineSymbol convexHullSimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Red, 10); // Create the simple fill symbol for the convex hull graphic(s) - comprised of a fill style, fill // color and outline. It will be a hollow (i.e.. see-through) polygon graphic with a thick red outline. SimpleFillSymbol convexHullSimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, System.Drawing.Color.Red, convexHullSimpleLineSymbol); // Create the graphic for the convex hull(s) - comprised of a polygon shape and fill symbol. Graphic convexHullGraphic = new Graphic(oneGeometry, convexHullSimpleFillSymbol) { // Set the Z index for the convex hull graphic(s) so that they appear below the initial input graphics // added earlier (polygon1 and polygon2). ZIndex = 0 }; // Add the convex hull graphic to the graphics overlay collection. _graphicsOverlay.Graphics.Add(convexHullGraphic); } // Disable the button after has been used. _convexHullListButton.Enabled = false; } catch (System.Exception ex) { // Display an error message if there is a problem generating convex hull operation. AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this); alertBuilder.SetTitle("There was a problem generating the convex hull."); alertBuilder.SetMessage(ex.ToString()); alertBuilder.Show(); } }
private void BufferButton_Click(object sender, EventArgs e) { // Reset the sample state. // - Clear all existing graphics. _graphicsOverlay.Graphics.Clear(); // - Add the polygons. _graphicsOverlay.Graphics.Add(_polygonGraphic1); _graphicsOverlay.Graphics.Add(_polygonGraphic2); try { // Get the boolean value whether to create a single convex hull (true) or independent convex hulls (false). bool unionBool = _unionSwitch.On; // Add the geometries of the two polygon graphics to a list of geometries. It will be used as the 1st // input parameter of the GeometryEngine.ConvexHull function. List <Geometry> inputGeometryList = new List <Geometry> { _polygonGraphic1.Geometry, _polygonGraphic2.Geometry }; // Get the returned result from the convex hull operation. When unionBool = true there will be one returned // polygon, when unionBool = false there will be one convex hull returned per input geometry. foreach (Geometry oneGeometry in GeometryEngine.ConvexHull(inputGeometryList, unionBool)) { // Create a simple line symbol for the outline of the convex hull graphic(s). SimpleLineSymbol convexHullSimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Red, 10); // Create the simple fill symbol for the convex hull graphic(s) - comprised of a fill style, fill // color and outline. It will be a hollow (i.e.. see-through) polygon graphic with a thick red outline. SimpleFillSymbol convexHullSimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, System.Drawing.Color.Red, convexHullSimpleLineSymbol); // Create the graphic for the convex hull(s) - comprised of a polygon shape and fill symbol. Graphic convexHullGraphic = new Graphic(oneGeometry, convexHullSimpleFillSymbol) { // Set the Z index for the convex hull graphic(s) so that they appear below the initial input graphics // added earlier (polygon1 and polygon2). ZIndex = 0 }; // Add the convex hull graphic to the graphics overlay collection. _graphicsOverlay.Graphics.Add(convexHullGraphic); } } catch (Exception ex) { // Display an error message if there is a problem generating convex hull operation. UIAlertController alertController = UIAlertController.Create("Geometry Engine Failed!", ex.Message, UIAlertControllerStyle.Alert); alertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null)); PresentViewController(alertController, true, null); } }
private async void ConvexHullListButton_Click(object sender, RoutedEventArgs e) { try { // Get the boolean value whether to create a single convex hull (true) or independent convex hulls (false). bool unionBool = (bool)ConvexHullListCheckBox.IsChecked; // Add the geometries of the two polygon graphics to a list of geometries. It will be used as the 1st // input parameter of the GeometryEngine.ConvexHull function. List <Geometry> inputListOfGeomtries = new List <Geometry> { _polygonGraphic1.Geometry, _polygonGraphic2.Geometry }; // Get the returned result from the convex hull operation. When unionBool = true there will be one returned // polygon, when unionBool = false there will be one convex hull returned per input geometry. IEnumerable <Geometry> convexHullGeometries = GeometryEngine.ConvexHull(inputListOfGeomtries, unionBool); // Loop through the returned geometries. foreach (Geometry oneGeometry in convexHullGeometries) { // Create a simple line symbol for the outline of the convex hull graphic(s). SimpleLineSymbol convexHullSimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, Color.Red, 10); // Create the simple fill symbol for the convex hull graphic(s) - comprised of a fill style, fill // color and outline. It will be a hollow (i.e.. see-through) polygon graphic with a thick red outline. SimpleFillSymbol convexHullSimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, Color.Red, convexHullSimpleLineSymbol); // Create the graphic for the convex hull(s) - comprised of a polygon shape and fill symbol. Graphic convexHullGraphic = new Graphic(oneGeometry, convexHullSimpleFillSymbol) { // Set the Z index for the convex hull graphic(s) so that they appear below the initial input graphics // added earlier (polygon1 and polygon2). ZIndex = 0 }; // Add the convex hull graphic to the graphics overlay collection. _graphicsOverlay.Graphics.Add(convexHullGraphic); } // Disable the button after has been used. ConvexHullListCheckBox.IsEnabled = false; ConvexHullListButton.IsEnabled = false; } catch (Exception ex) { // Display an error message if there is a problem generating convex hull operation. MessageDialog theMessageDialog = new MessageDialog("Geometry Engine Failed: " + ex.Message); await theMessageDialog.ShowAsync(); } }
// Creates a convex hull polygon from the input point graphics private void ConvexHullButton_Click(object sender, RoutedEventArgs e) { try { var convexHull = GeometryEngine.ConvexHull(_inputGraphicsOverlay.Graphics.Select(g => g.Geometry)); _convexHullGraphicsOverlay.Graphics.Add(new Graphic(convexHull, _polygonSymbol)); btnConvexHull.IsEnabled = false; } catch (Exception ex) { MessageBox.Show("Error calculating convex hull: " + ex.Message, "Convex Hull Sample"); } }
private void ConvexHullButton_Click(object sender, EventArgs e) { try { // Create a multi-point geometry from the user tapped input map points. Multipoint inputMultipoint = new Multipoint(_inputPointCollection); // Get the returned result from the convex hull operation. Geometry convexHullGeometry = GeometryEngine.ConvexHull(inputMultipoint); // Create a simple line symbol for the outline of the convex hull graphic(s). SimpleLineSymbol convexHullSimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Blue, 4); // Create the simple fill symbol for the convex hull graphic(s) - comprised of a fill style, fill // color and outline. It will be a hollow (i.e.. see-through) polygon graphic with a thick red outline. SimpleFillSymbol convexHullSimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, System.Drawing.Color.Red, convexHullSimpleLineSymbol); // Create the graphic for the convex hull - comprised of a polygon shape and fill symbol. Graphic convexHullGraphic = new Graphic(convexHullGeometry, new Dictionary <string, object>() { { "Type", "Hull" } }, convexHullSimpleFillSymbol) { ZIndex = 1 }; // Remove any existing convex hull graphics from the overlay. foreach (Graphic g in new List <Graphic>(_graphicsOverlay.Graphics)) { if ((string)g.Attributes["Type"] == "Hull") { _graphicsOverlay.Graphics.Remove(g); } } // Add the convex hull graphic to the graphics overlay. _graphicsOverlay.Graphics.Add(convexHullGraphic); // Disable the button after has been used. _convexHullButton.Enabled = false; } catch (System.Exception ex) { // Display an error message if there is a problem generating convex hull operation. AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this); alertBuilder.SetTitle("There was a problem generating the convex hull."); alertBuilder.SetMessage(ex.ToString()); alertBuilder.Show(); } }
private void ConvexHullButton_Click(object sender, EventArgs e) { try { // Create a multi-point geometry from the user tapped input map points. Multipoint inputMultipoint = new Multipoint(_inputPointCollection); // Get the returned result from the convex hull operation. Geometry convexHullGeometry = GeometryEngine.ConvexHull(inputMultipoint); // Create a simple line symbol for the outline of the convex hull graphic(s). SimpleLineSymbol convexHullSimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Blue, 4); // Create the simple fill symbol for the convex hull graphic(s) - comprised of a fill style, fill // color and outline. It will be a hollow (i.e.. see-through) polygon graphic with a thick red outline. SimpleFillSymbol convexHullSimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, System.Drawing.Color.Red, convexHullSimpleLineSymbol); // Create the graphic for the convex hull - comprised of a polygon shape and fill symbol. Graphic convexHullGraphic = new Graphic(convexHullGeometry, new Dictionary <string, object>() { { "Type", "Hull" } }, convexHullSimpleFillSymbol) { // Set the Z index for the convex hull graphic so that it appears below the initial input user tapped map point graphics added earlier. ZIndex = 0 }; // Remove any existing convex hull graphics from the overlay. foreach (Graphic g in _graphicsOverlay.Graphics.ToList()) { if ((string)g.Attributes["Type"] == "Hull") { _graphicsOverlay.Graphics.Remove(g); } } // Add the convex hull graphic to the graphics overlay collection. _graphicsOverlay.Graphics.Add(convexHullGraphic); // Disable the button after has been used. _createHullButton.Enabled = false; } catch (Exception ex) { // Display an error message if there is a problem generating convex hull operation. UIAlertController alertController = UIAlertController.Create("Geometry Engine Failed!", ex.Message, UIAlertControllerStyle.Alert); alertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null)); PresentViewController(alertController, true, null); } }
/// <summary> /// Create sample polygon feature using the point geometries from the multi-point feature using the /// ConvexHull method provided by the GeometryEngine. /// </summary> /// <param name="polygonLayer">Polygon geometry feature layer used to add the new feature.</param> /// <param name="lineLayer">The polyline feature layer containing the features used to construct the polygon.</param> /// <returns></returns> private Task <bool> constructSamplePolygon(FeatureLayer polygonLayer, FeatureLayer lineLayer) { // execute the fine grained API calls on the CIM main thread return(QueuingTaskFactory.StartNew(() => { // get the underlying feature class for each layer var polygonFeatureClass = polygonLayer.GetTableAsync().Result as FeatureClass; var lineFeatureClass = lineLayer.GetTableAsync().Result as FeatureClass; // construct a cursor to retrieve the line features var lineCursor = lineFeatureClass.Search(null, false); // retrieve the feature class schema information for the feature class var polygonDefinition = polygonFeatureClass.Definition as FeatureClassDefinition; var polylineDefinition = lineFeatureClass.Definition as FeatureClassDefinition; // set up the edit operation for the feature creation var createOperation = EditingModule.CreateEditOperation(); createOperation.Name = "Create polygons"; List <CoordinateCollection> combinedCoordinates = new List <CoordinateCollection>(); while (lineCursor.MoveNext()) { // retrieve the first feature var lineFeature = lineCursor.Current as Feature; // add the coordinate collection of the current geometry into our overall list of collections var polylineGeometry = lineFeature.Shape as Polyline; combinedCoordinates.AddRange(polylineGeometry.Paths); } // use the ConvexHull method from the GeometryEngine to construct the polygon geometry var newPolygon = Polygon.Clone(GeometryEngine.ConvexHull(new Polyline(combinedCoordinates, lineFeatureClass.SpatialReference))) as Polygon; // queue the polygon creation createOperation.Create(polygonLayer, newPolygon); // execute the edit (polygon create) operation var t = createOperation.ExecuteAsync().Result; // save the edits return EditingModule.SaveEditsAsync(); })); }
/// <summary> /// Create sample polygon feature using the point geometries from the multi-point feature using the /// ConvexHull method provided by the GeometryEngine. /// </summary> /// <param name="polygonLayer">Polygon geometry feature layer used to add the new feature.</param> /// <param name="lineLayer">The polyline feature layer containing the features used to construct the polygon.</param> /// <returns></returns> private Task <bool> constructSamplePolygon(FeatureLayer polygonLayer, FeatureLayer lineLayer) { // execute the fine grained API calls on the CIM main thread return(QueuedTask.Run(() => { // get the underlying feature class for each layer var polygonFeatureClass = polygonLayer.GetTable() as FeatureClass; var polygonDefinition = polygonFeatureClass.GetDefinition() as FeatureClassDefinition; var lineFeatureClass = lineLayer.GetTable() as FeatureClass; // construct a cursor to retrieve the line features var lineCursor = lineFeatureClass.Search(null, false); // set up the edit operation for the feature creation var createOperation = new EditOperation() { Name = "Create polygons", SelectNewFeatures = false }; PolylineBuilder polylineBuilder = new PolylineBuilder(polygonDefinition.GetSpatialReference()); while (lineCursor.MoveNext()) { // retrieve the first feature var lineFeature = lineCursor.Current as Feature; // add the coordinate collection of the current geometry into our overall list of collections var polylineGeometry = lineFeature.GetShape() as Polyline; polylineBuilder.AddParts(polylineGeometry.Parts); } // use the ConvexHull method from the GeometryEngine to construct the polygon geometry var newPolygon = GeometryEngine.ConvexHull(polylineBuilder.ToGeometry()) as Polygon; // queue the polygon creation createOperation.Create(polygonLayer, newPolygon); // execute the edit (polygon create) operation return createOperation.ExecuteAsync(); })); }
private void ConvexHullButton_Click(object sender, EventArgs e) { try { // Create a multi-point geometry from the user tapped input map points. Multipoint inputMultipoint = new Multipoint(_inputPointCollection); // Get the returned result from the convex hull operation. Geometry convexHullGeometry = GeometryEngine.ConvexHull(inputMultipoint); // Create a simple line symbol for the outline of the convex hull graphic(s). SimpleLineSymbol convexHullSimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Blue, 4); // Create the simple fill symbol for the convex hull graphic(s) - comprised of a fill style, fill // color and outline. It will be a hollow (i.e.. see-through) polygon graphic with a thick red outline. SimpleFillSymbol convexHullSimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, System.Drawing.Color.Red, convexHullSimpleLineSymbol); // Create the graphic for the convex hull - comprised of a polygon shape and fill symbol. Graphic convexHullGraphic = new Graphic(convexHullGeometry, convexHullSimpleFillSymbol); // Set the Z index for the convex hull graphic so that it appears below the initial input user // tapped map point graphics added earlier. convexHullGraphic.ZIndex = 0; // Add the convex hull graphic to the graphics overlay collection. _graphicsOverlay.Graphics.Add(convexHullGraphic); // Disable the button after has been used. _convexHullButton.Enabled = false; } catch (System.Exception ex) { // Display an error message if there is a problem generating convex hull operation. var alertBuilder = new AlertDialog.Builder(this); alertBuilder.SetTitle("Geometry Engine Failed!"); alertBuilder.SetMessage(ex.ToString()); alertBuilder.Show(); } }