ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Geometry Namespace / IGeometryEngine Interface / GeodesicBuffer Method / GeodesicBuffer(IEnumerable<Geometry>,Double,LinearUnit) Method
Specifies the input geometries.
The distance to buffer the geometries.
The unit of the buffer distance. If null, then the buffer distance is in meters.
Example

In This Topic
    GeodesicBuffer(IEnumerable<Geometry>,Double,LinearUnit) Method
    In This Topic
    Creates buffers at the specified distance around the given geometries. Will union the results of all buffers.
    Syntax

    Parameters

    geometries
    Specifies the input geometries.
    distance
    The distance to buffer the geometries.
    distanceUnit
    The unit of the buffer distance. If null, then the buffer distance is in meters.

    Return Value

    The polygon that represents the buffered area.
    Exceptions
    ExceptionDescription
    Geometries is null.
    Geometries have no spatial reference.
    At least one of the geometries is null.
    The method is not implemented for GeometryBag.
    The first non-null spatial reference is an image coordinate system.
    The buffer distance must be a valid floating point number.
    Remarks
    At least one geometry must have a spatial reference that is not null or Unknown. The spatial reference of the output geometries is the first valid spatial reference found in the list of geometries. All other geometries are projected to this spatial reference, if necessary. The returned polygon is the union of all the buffered geometries.

    If the buffer distance is zero and the input geometry is a polygon or an envelope, then a polygon is created from the input geometries.

    If the distance is less than or equal to zero and the input geometry is not a polygon or an envelope, then an empty polygon is created.

    Example
    Create a buffer polygon at the specified geodesic distance
    // buffer a point
    MapPoint pt = MapPointBuilderEx.CreateMapPoint(1.0, 1.0, SpatialReferences.WGS84);
    Polygon outPolygon = GeometryEngine.Instance.GeodesicBuffer(pt, 5) as Polygon;
    
    double delta = SpatialReferences.WGS84.XYTolerance * 2 * Math.Sqrt(2);
    ReadOnlyPointCollection points = outPolygon.Points;
    foreach (MapPoint p in points)
    {
      double d = GeometryEngine.Instance.GeodesicDistance(pt, p);
      // d = 5 (+- delta)
    }
    
    // specify a unit for the distance
    outPolygon = GeometryEngine.Instance.GeodesicBuffer(pt, 5000, LinearUnit.Millimeters) as Polygon;
    
    // buffer of 0 distance produces an empty geometry
    Geometry g = GeometryEngine.Instance.GeodesicBuffer(pt, 0);
    // g.IsEmpty = true
    
    // buffer many points
    List<MapPoint> list = new List<MapPoint>();
    list.Add(MapPointBuilderEx.CreateMapPoint(1.0, 1.0, SpatialReferences.WGS84));
    list.Add(MapPointBuilderEx.CreateMapPoint(10.0, 20.0));
    list.Add(MapPointBuilderEx.CreateMapPoint(40.0, 40.0));
    list.Add(MapPointBuilderEx.CreateMapPoint(60.0, 60.0));
    
    outPolygon = GeometryEngine.Instance.GeodesicBuffer(list, 10000) as Polygon;
    // outPolygon.PartCount = 4
    
    // buffer different geometry types
    List<Coordinate2D> coords = new List<Coordinate2D>()
    {
      new Coordinate2D(1, 2), new Coordinate2D(10, 20), new Coordinate2D(20, 30),
      new Coordinate2D(50, 60), new Coordinate2D(70, 80), new Coordinate2D(80, 40),
      new Coordinate2D(90, 10), new Coordinate2D(110, 15), new Coordinate2D(120, 30),
      new Coordinate2D(10, 40), new Coordinate2D(-10, 40), new Coordinate2D(-10, 50)
    };
    
    List<Geometry> manyGeometries = new List<Geometry>
    {
      MapPointBuilderEx.CreateMapPoint(1.0, 1.0, SpatialReferences.WGS84),
      PolylineBuilderEx.CreatePolyline(new List<Coordinate2D>(){coords[0], coords[1], coords[2]}, SpatialReferences.WGS84),
      PolylineBuilderEx.CreatePolyline(new List<Coordinate2D>(){coords[3], coords[4], coords[5]}),
      PolygonBuilderEx.CreatePolygon(new List<Coordinate2D>(){coords[9], coords[10], coords[11]})
    };
    
    outPolygon = GeometryEngine.Instance.GeodesicBuffer(manyGeometries, 20000) as Polygon;
    
    // specify unit types
    outPolygon = GeometryEngine.Instance.GeodesicBuffer(manyGeometries, 20, LinearUnit.Miles) as Polygon;
    
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also