MapGuide API Reference
 All Classes Functions Variables Enumerations Enumerator Friends
MgPolygon Class Reference

An MgPolygon is a region, defined by 1 exterior boundary and 0 or more interior boundaries. More...

+ Inheritance diagram for MgPolygon:

List of all members.

Public Member Functions

virtual MgGeometricEntity * Copy ()
virtual MgCoordinateIterator * GetCoordinates ()
 Returns an iterator over the coordinates included in this geometric entity.
virtual INT32 GetDimension ()
 
virtual MgLinearRing * GetExteriorRing ()
 Gets the exterior ring of the polygon.
virtual INT32 GetGeometryType ()
virtual MgLinearRing * GetInteriorRing (INT32 index)
 
virtual INT32 GetInteriorRingCount ()
 
virtual bool IsClosed ()
virtual bool IsEmpty ()
 
virtual MgGeometricEntity * Transform (MgTransform *transform)
 Returns a transformed copy of this geometric entity.

Detailed Description

An MgPolygon is a region, defined by 1 exterior boundary and 0 or more interior boundaries.

Remarks:
Each interior boundary defines a hole in the polygon. The interior and exterior boundaries are defined with linear interpolation between points. Each consecutive pair of points defines a line segment. An object of this type is constructed by calling a non-static MgGeometryFactory::CreatePolygon() method and, once constructed, is immutable.
Example (PHP)
The following example code creates a square polygon, whose side is 3 units in length, and which contains a "hole" at its center. The "hole" is also a square, whose side is 1 unit in length.

 $geometryFactory = new MgGeometryFactory();
 $coordinateCollection = new MgCoordinateCollection();
 $interiorRingCollection = new MgLinearRingCollection();
 $wktReaderWriter = new MgWktReaderWriter();
 // note that the coordinates for the external boundary
 // are added to the coordinate collection in a
 // counterclockwise order
 // create first coordinate for external boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(0,0);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create second coordinate for external boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(3,0);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create third coordinate for external boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(3,3);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create fourth coordinate for external boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(0,3);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create fifth coordinate for external boundary that is the same as
 // the first to close the boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(0,0);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create LinearRing that defines the external boundary
 $exteriorRing = $geometryFactory->CreateLinearRing($coordinateCollection);
 // clear the collection before reusing for internal boundary
 $coordinateCollection->Clear();

 // note that the coordinates for the internal boundary
 // are added to the coordinate collection in a
 // clockwise order
 // create first coordinate for internal boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(1,1);

 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create second coordinate for internal boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(1,2);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create third coordinate for internal boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(2,2);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create fourth coordinate for internal boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(2,1);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create fifth coordinate for internal boundary that is the same as
 // the first to close the boundary
 $coordinate = $geometryFactory->CreateCoordinateXY(1,1);
 $index = $coordinateCollection->Add($coordinate);
 echo "Coordinate added to coordinate collection at index: $index\n";

 // create LinearRing that defines the internal boundary
 $interiorRing =
 $geometryFactory->CreateLinearRing($coordinateCollection);

 // add the interior ring to the interior ring collection
 $index = $interiorRingCollection->Add($interiorRing);

 // create the MgPolygon geometry
 $polygon = $geometryFactory->CreatePolygon($exteriorRing, $interiorRingCollection);

 // print out the Agf Text string for the geometry
 $polygonAgfText = $wktReaderWriter->Write($polygon);
 echo "AGF Text representation of line string: $polygonAgfText\n";
Example (C#)
The following example code creates a square polygon, whose side is 3 units in length, and which contains a "hole" at its center. The "hole" is also a square, whose side is 1 unit in length.

 using OSGeo.MapGuide;

 private MgWktReaderWriter wktReaderWriter;
 private MgGeometryFactory geometryFactory;
 // this polygon has one exterior ring and one interior ring
 private MgPolygon pner1141441411ir2223333222;
 // the following array is used for the exterior ring of a polygon
 // the points are in counter-clockwise order
 private double[,] da1141441411 = { { 1, 1 }, { 4, 1 }, { 4, 4 }, { 1, 4 }, { 1, 1 } };
 // the following array is used for the interior ring of a polygon
 // the points are in clockwise order
 private double[,] da2223333222 = { { 2, 2 }, { 2, 3 }, { 3, 3 }, { 3, 2 }, { 2, 2 } };
 // this array contains an array that will be used for an exterior ring
 // and one that will be used for an interior ring
 private double[][,] pnEr1141441411Ir2223333222Data;
 private String geometryAgfText;

 public MgLinearRing CreateALinearRingXY(double[,] ringData)
 {
     MgCoordinateCollection coords = new MgCoordinateCollection();
     for (int i = 0; i < ringData.GetLength(0); i++)
     {
         coords.Add(geometryFactory.CreateCoordinateXY(ringData[i, 0], ringData[i, 1]));
     }
     return geometryFactory.CreateLinearRing(coords);
 }

 public MgPolygon CreateAPolygonXY(double[][,] ringsData)
 {
     MgLinearRing exteriorRing = CreateALinearRingXY(ringsData[0]);
     MgLinearRingCollection interiorRings = new MgLinearRingCollection();
     for (int i = 1; i < ringsData.GetLength(0); i++)
     {
         interiorRings.Add(CreateALinearRingXY(ringsData[i]));
     }
     return geometryFactory.CreatePolygon(exteriorRing, interiorRings);
 }

 geometryFactory = new MgGeometryFactory();
 pnEr1141441411Ir2223333222Data = new double[2][,];
 pnEr1141441411Ir2223333222Data[0] = da1141441411;
 pnEr1141441411Ir2223333222Data[1] = da2223333222;
 // create a polygon using the geometry factory
 pner1141441411ir2223333222 = CreateAPolygonXY(pnEr1141441411Ir2223333222Data);

 // print out the Agf Text string for the geometry
 wktReaderWriter = new MgWktReaderWriter();
 geometryAgfText = wktReaderWriter.Write(pner1141441411ir2223333222);
 // geometryAgfText now contains:
 // "POLYGON XY ((1 1, 4 1, 4 4, 1 4, 1 1), (2 2, 2 3, 3 3, 3 2, 2 2))"