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):
ESRI.ArcGIS.Geometry ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)