How to create a multipoint


Summary
A multipoint geometry can be built in several ways depending on user input. This topic shows two commonly used methods for efficiently creating a multipoint geometry.


Creating a multipoint using points

The following code shows how to build a multipoint using a collection of points. This approach is preferred when you have a sequence of vertices as input.
[VB.NET]
Public Sub CreateMultipointByPoints()
    
    'Build multipoint from a sequence of points.
    'Add arrays of points to a geometry using the IGeometryBridge2 interface on the
    'GeometryEnvironment singleton object.
    
    Dim geometryBridge2 As IGeometryBridge2 = New GeometryEnvironmentClass
    Dim pointCollection4 As IPointCollection4 = New MultipointClass
    
    'TODO:
    'pointCollection4.SpatialReference = 'Define the spatial reference of the new multipoint.
    
    Dim aWKSPointBuffer() As WKSPoint
    Dim cPoints As Long = 4 'The number of points in the first part.
    ReDim aWKSPointBuffer(0 To CInt(cPoints - 1))
    
    'TODO:
    'aWKSPointBuffer = 'Read cPoints into the point buffer.
    
    geometryBridge2.SetWKSPoints(pointCollection4, aWKSPointBuffer)
    
    'pointCollection4 has now been defined.
    
End Sub
[C#]
public void CreateMultipointByPoints()
{
    //Build multipoint from a sequence of points. 
    //Add arrays of points to a geometry using the IGeometryBridge2 interface on the 
    //GeometryEnvironment singleton object.

    IGeometryBridge2 geometryBridge2 = new GeometryEnvironmentClass();
    IPointCollection4 pointCollection4 = new MultipointClass();

    //TODO:
    //pointCollection4.SpatialReference = 'Define the spatial reference of the new multipoint.

    WKSPoint[] aWKSPointBuffer = null;
    long cPoints = 4; //The number of points in the first part.
    aWKSPointBuffer = new WKSPoint[System.Convert.ToInt32(cPoints - 1) + 1];

    //TODO:
    //aWKSPointBuffer = 'Read cPoints into the point buffer.

    geometryBridge2.SetWKSPoints(pointCollection4, ref aWKSPointBuffer);

    //pointCollection4 has now been defined.
}

Creating a multipoint using existing geometries

A multipoint can be created based on existing geometries. In the following code, a multipoint is generated by buffering an existing polyline and getting the vertices of the result polygon:
[VB.NET]
Public Sub CreateMultipointFromExistingGeometry(ByVal polyline As IPolyline)
    
    'Build a multipoint from a polygon.
    'The multipoint contains point elements being the copies of buffered polygon.
    Dim topologicalOperator2 As ITopologicalOperator2 = CType(polyline, ITopologicalOperator2)
    topologicalOperator2.IsKnownSimple_2 = False
    topologicalOperator2.Simplify()
    
    'Create a buffer polygon of the input geometry.
    Dim geometryBuffer As IGeometry = topologicalOperator2.Buffer(5)
    Dim polygonBuffer As IPolygon = CType(geometryBuffer, IPolygon)
    
    'Get the points of the buffered polygon.
    Dim pointCollectionBuffer As IPointCollection = CType(polygonBuffer, IPointCollection)
    
    'Create a multipoint.
    Dim geometryMultipoint As IGeometry = New MultipointClass
    geometryMultipoint.SpatialReference = polyline.SpatialReference
    
    Dim pointCollectionlMultipoint As IPointCollection = CType(geometryMultipoint, IPointCollection)
    
    'Add copies of the polyline vertices to the multipoint.
    pointCollectionlMultipoint.AddPointCollection(pointCollectionBuffer)
    
End Sub
[C#]
public void CreateMultipointFromExistingGeometry(IPolyline polyline)
{
    //Build a multipoint from a polygon.
    //The multipoint contains point elements being the copies of buffered polygon.
    ITopologicalOperator2 topologicalOperator2 = (ITopologicalOperator2)polyline;
    topologicalOperator2.IsKnownSimple_2 = false;
    topologicalOperator2.Simplify();

    //Create a buffer polygon of the input geometry.
    IGeometry geometryBuffer = topologicalOperator2.Buffer(5);
    IPolygon polygonBuffer = (IPolygon)geometryBuffer;

    //Get the points of the buffered polygon.
    IPointCollection pointCollectionBuffer = (IPointCollection)polygonBuffer;

    //Create a multipoint.
    IGeometry geometryMultipoint = new MultipointClass();
    geometryMultipoint.SpatialReference = polyline.SpatialReference;

    IPointCollection pointCollectionlMultipoint = (IPointCollection)
        geometryMultipoint;

    //Add copies of the polyline vertices to the multipoint.
    pointCollectionlMultipoint.AddPointCollection(pointCollectionBuffer);
}






To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):