Click or drag to resize

GeodeticCurveType Enumeration

This enumeration defines different types of curves that can be calculated for geodesic geometry engine operation.

Namespace:  Esri.ArcGISRuntime.Geometry
Assembly:  Esri.ArcGISRuntime (in Esri.ArcGISRuntime.dll) Version: 100.9.0
public enum GeodeticCurveType
  Member nameValueDescription
Geodesic0 A geodesic line (shortest path along two points on an ellipsoid).
Loxodrome1 A rhumb line (loxodrome).
GreatElliptic2 A great elliptic.
NormalSection3 A normal section.
ShapePreserving4 The segment shape is preserved in the projection where it is defined.


Example Name: Buffer

Create a buffer around a map point and display the results as a `Graphic`

Code example screen shot.

// Copyright 2018 Esri.
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
// language governing permissions and limitations under the License.

using System.Windows;
using Esri.ArcGISRuntime.Geometry;
using Esri.ArcGISRuntime.Mapping;
using Esri.ArcGISRuntime.Symbology;
using Esri.ArcGISRuntime.UI;
using System.Drawing;

namespace ArcGISRuntime.WPF.Samples.Buffer
        name: "Buffer",
        category: "Geometry",
        description: "Create a buffer around a map point and display the results as a `Graphic`",
        instructions: "1. Tap on the map.",
        tags: new[] { "analysis", "buffer", "euclidean", "geodesic", "geometry", "planar" })]
    public partial class Buffer
        public Buffer()

            // Initialize the map and graphics overlays.

        private void Initialize()
            // Create a map with a topographic basemap and add it to the map view.
            MyMapView.Map = new Map(Basemap.CreateTopographic());

            // Handle the MapView's GeoViewTapped event to create buffers.
            MyMapView.GeoViewTapped += MyMapView_GeoViewTapped;

            // Create a fill symbol for geodesic buffer polygons.            
            Color geodesicBufferColor = Color.FromArgb(120, 255, 0, 0);
            SimpleLineSymbol geodesicOutlineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, geodesicBufferColor, 2);
            SimpleFillSymbol geodesicBufferFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, geodesicBufferColor, geodesicOutlineSymbol);

            // Create a fill symbol for planar buffer polygons.            
            Color planarBufferColor = Color.FromArgb(120, 0, 0, 255);
            SimpleLineSymbol planarOutlineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, planarBufferColor, 2);
            SimpleFillSymbol planarBufferFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, planarBufferColor, planarOutlineSymbol);

            // Create a marker symbol for tap locations.
            SimpleMarkerSymbol tapSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Cross, Color.White, 14);

            // Create a graphics overlay to display geodesic polygons, set its renderer and add it to the map view.
            GraphicsOverlay geodesicPolysOverlay = new GraphicsOverlay
                Id = "GeodesicPolys",
                Renderer = new SimpleRenderer(geodesicBufferFillSymbol)

            // Create a graphics overlay to display planar polygons, set its renderer and add it to the map view.
            GraphicsOverlay planarPolysOverlay = new GraphicsOverlay
                Id = "PlanarPolys",
                Renderer = new SimpleRenderer(planarBufferFillSymbol)

            // Create a graphics overlay to display tap locations for buffers, set its renderer and add it to the map view.
            GraphicsOverlay tapLocationsOverlay = new GraphicsOverlay
                Id = "TapPoints",
                Renderer = new SimpleRenderer(tapSymbol)

            // Show the colors for each type of buffer in the UI.
            ShowBufferSwatches(planarBufferColor, geodesicBufferColor);

        private void MyMapView_GeoViewTapped(object sender, Esri.ArcGISRuntime.UI.Controls.GeoViewInputEventArgs e)
                // Get the location tapped by the user (a map point in the WebMercator projected coordinate system).
                MapPoint userTapPoint = e.Location;

                // Get the buffer distance (miles) entered in the text box.
                double bufferInMiles = System.Convert.ToDouble(BufferDistanceMilesTextBox.Text);

                // Call a helper method to convert the input distance to meters.
                double bufferInMeters = LinearUnits.Miles.ToMeters(bufferInMiles);

                // Create a planar buffer graphic around the input location at the specified distance.
                Geometry bufferGeometryPlanar = GeometryEngine.Buffer(userTapPoint, bufferInMeters);
                Graphic planarBufferGraphic = new Graphic(bufferGeometryPlanar);

                // Create a geodesic buffer graphic using the same location and distance.
                Geometry bufferGeometryGeodesic = GeometryEngine.BufferGeodetic(userTapPoint, bufferInMeters, LinearUnits.Meters, double.NaN, GeodeticCurveType.Geodesic);
                Graphic geodesicBufferGraphic = new Graphic(bufferGeometryGeodesic);

                // Create a graphic for the user tap location.
                Graphic locationGraphic = new Graphic(userTapPoint); 

                // Get the graphics overlays.
                GraphicsOverlay planarBufferGraphicsOverlay = MyMapView.GraphicsOverlays["PlanarPolys"];
                GraphicsOverlay geodesicBufferGraphicsOverlay = MyMapView.GraphicsOverlays["GeodesicPolys"];
                GraphicsOverlay tapPointGraphicsOverlay = MyMapView.GraphicsOverlays["TapPoints"];

                // Add the buffer polygons and tap location graphics to the appropriate graphic overlays.
            catch (System.Exception ex)
                // Display an error message if there is a problem generating the buffers.
                MessageBox.Show(ex.Message, "Error creating buffers");

        private void ShowBufferSwatches(Color planarBufferColor, Color geodesicBufferColor)
            // Create an equivalent System.Windows.Media.Color for each of the buffer symbol colors (System.Drawing.Color).
            System.Windows.Media.Color planarLabelColor = System.Windows.Media.Color.FromArgb(
            System.Windows.Media.Color geodesicLabelColor = System.Windows.Media.Color.FromArgb(

            // Show buffer symbol colors in the UI by setting the appropriate Ellipse object fill color.
            BufferSwatchPlanarEllipse.Fill = new System.Windows.Media.SolidColorBrush(planarLabelColor);
            BufferSwatchGeodesicEllipse.Fill = new System.Windows.Media.SolidColorBrush(geodesicLabelColor);

        private void ClearBuffersButton_Click(object sender, RoutedEventArgs e)
            // Clear the buffer and point graphics.
            foreach (GraphicsOverlay ov in MyMapView.GraphicsOverlays)
<UserControl x:Class="ArcGISRuntime.WPF.Samples.Buffer.Buffer"
        <esri:MapView x:Name="MyMapView" />
        <Border Style="{StaticResource BorderStyle}">
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition />
                    <ColumnDefinition Width="Auto" />
                <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"
                       Content="Click the map to create planar and geodesic buffers." />
                <Label Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
                       Content="Buffer distance (miles):" />
                <TextBox x:Name="BufferDistanceMilesTextBox"
                         Grid.Row="1" Grid.Column="2"
                         TextAlignment="Right" VerticalContentAlignment="Center"
                         Text="1000" />
                <Ellipse x:Name="BufferSwatchPlanarEllipse"
                         Grid.Row="2" Grid.Column="0"
                         Width="20" Height="20" />
                <Label Grid.Row="2" Grid.Column="1"
                       Content="Planar buffers (Web Mercator)" />
                <Ellipse x:Name="BufferSwatchGeodesicEllipse"
                         Grid.Row="3" Grid.Column="0"
                         Width="20" Height="20" />
                <Label Grid.Row="3" Grid.Column="1"
                       Content="Geodesic buffers" />
                <Button x:Name="ClearBuffersButton"
                        Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3"
                        Click="ClearBuffersButton_Click" />
See Also
Additional Examples
Hyperlink to ExampleDescription
BufferCreate a buffer around a map point and display the results as a `Graphic`
GenerateOfflineMapWithOverridesTake a web map offline with additional options for each layer.
GeodesicOperationsCalculate a geodesic path between two points and measure its distance.
LineOfSightGeoElementShow a line of sight between two moving objects.
NavigateRouteReroutingNavigate between two points and dynamically recalculate an alternate route when the original route is unavailable.
RouteAroundBarriersFind a route that reaches all stops without crossing any barriers.
ViewshedGeoElementAnalyze the viewshed for an object (GeoElement) in a scene.