# PolygonGeometry

#### new Cesium.PolygonGeometry(options)
Core/PolygonGeometry.js 538

  A description of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. Polygon geometry can be rendered with both `Primitive` and `GroundPrimitive`.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  Object with the following properties:

  Name | Type | Default | Description
  --- | --- | --- | ---
  `polygonHierarchy` | PolygonHierarchy |  | A polygon hierarchy that can include holes.
  `height` | Number | `0.0` | optional The distance in meters between the polygon and the ellipsoid surface.
  `extrudedHeight` | Number |  | optional The distance in meters between the polygon's extruded face and the ellipsoid surface.
  `vertexFormat` | VertexFormat | `VertexFormat.DEFAULT` | optional The vertex attributes to be computed.
  `stRotation` | Number | `0.0` | optional The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.
  `ellipsoid` | Ellipsoid | `Ellipsoid.WGS84` | optional The ellipsoid to be used as a reference.
  `granularity` | Number | `CesiumMath.RADIANS_PER_DEGREE` | optional The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.
  `perPositionHeight` | Boolean | `false` | optional Use the height of options.positions for each position instead of using options.height to determine the height.
  `closeTop` | Boolean | `true` | optional When false, leaves off the top of an extruded polygon open.
  `closeBottom` | Boolean | `true` | optional When false, leaves off the bottom of an extruded polygon open.

  ##### Example:

      // 1. create a polygon from points
      var polygon = new Cesium.PolygonGeometry({
        polygonHierarchy : new Cesium.PolygonHierarchy(
          Cesium.Cartesian3.fromDegreesArray([
            -72.0, 40.0,
            -70.0, 35.0,
            -75.0, 30.0,
            -70.0, 30.0,
            -68.0, 40.0
          ])
        )
      });
      var geometry = Cesium.PolygonGeometry.createGeometry(polygon);

      // 2. create a nested polygon with holes
      var polygonWithHole = new Cesium.PolygonGeometry({
        polygonHierarchy : new Cesium.PolygonHierarchy(
          Cesium.Cartesian3.fromDegreesArray([
            -109.0, 30.0,
            -95.0, 30.0,
            -95.0, 40.0,
            -109.0, 40.0
          ]),
          [new Cesium.PolygonHierarchy(
            Cesium.Cartesian3.fromDegreesArray([
              -107.0, 31.0,
              -107.0, 39.0,
              -97.0, 39.0,
              -97.0, 31.0
            ]),
            [new Cesium.PolygonHierarchy(
              Cesium.Cartesian3.fromDegreesArray([
                -105.0, 33.0,
                -99.0, 33.0,
                -99.0, 37.0,
                -105.0, 37.0
              ]),
              [new Cesium.PolygonHierarchy(
                Cesium.Cartesian3.fromDegreesArray([
                  -103.0, 34.0,
                  -101.0, 34.0,
                  -101.0, 36.0,
                  -103.0, 36.0
                ])
              )]
            )]
          )]
        )
      });
      var geometry = Cesium.PolygonGeometry.createGeometry(polygonWithHole);

      // 3. create extruded polygon
      var extrudedPolygon = new Cesium.PolygonGeometry({
        polygonHierarchy : new Cesium.PolygonHierarchy(
          Cesium.Cartesian3.fromDegreesArray([
            -72.0, 40.0,
            -70.0, 35.0,
            -75.0, 30.0,
            -70.0, 30.0,
            -68.0, 40.0
          ])
        ),
        extrudedHeight: 300000
      });
      var geometry = Cesium.PolygonGeometry.createGeometry(extrudedPolygon);

  ##### Demo:

  - Cesium Sandcastle Polygon Demo

  ##### See:

  - PolygonGeometry#createGeometry
  - PolygonGeometry#fromPositions

### Members

#### packedLength : Number
Core/PolygonGeometry.js 595

  The number of elements used to pack the object into an array.

### Methods

#### staticCesium.PolygonGeometry.createGeometry(polygonGeometry) → Geometry|undefined
Core/PolygonGeometry.js 775

  Computes the geometric representation of a polygon, including its vertices, indices, and a bounding sphere.

  Name | Type | Description
  --- | --- | ---
  `polygonGeometry` | PolygonGeometry | A description of the polygon.

  ##### Returns:

  The computed vertices and indices.

#### staticCesium.PolygonGeometry.fromPositions(options) → PolygonGeometry
Core/PolygonGeometry.js 630

  A description of a polygon from an array of positions. Polygon geometry can be rendered with both `Primitive` and `GroundPrimitive`.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  Object with the following properties:

  Name | Type | Default | Description
  --- | --- | --- | ---
  `positions` | Array.<Cartesian3> |  | An array of positions that defined the corner points of the polygon.
  `height` | Number | `0.0` | optional The height of the polygon.
  `extrudedHeight` | Number |  | optional The height of the polygon extrusion.
  `vertexFormat` | VertexFormat | `VertexFormat.DEFAULT` | optional The vertex attributes to be computed.
  `stRotation` | Number | `0.0` | optional The rotation of the texture coordiantes, in radians. A positive rotation is counter-clockwise.
  `ellipsoid` | Ellipsoid | `Ellipsoid.WGS84` | optional The ellipsoid to be used as a reference.
  `granularity` | Number | `CesiumMath.RADIANS_PER_DEGREE` | optional The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.
  `perPositionHeight` | Boolean | `false` | optional Use the height of options.positions for each position instead of using options.height to determine the height.
  `closeTop` | Boolean | `true` | optional When false, leaves off the top of an extruded polygon open.
  `closeBottom` | Boolean | `true` | optional When false, leaves off the bottom of an extruded polygon open.

  ##### Returns:

  ##### Example:

      // create a polygon from points
      var polygon = Cesium.PolygonGeometry.fromPositions({
        positions : Cesium.Cartesian3.fromDegreesArray([
          -72.0, 40.0,
          -70.0, 35.0,
          -75.0, 30.0,
          -70.0, 30.0,
          -68.0, 40.0
        ])
      });
      var geometry = Cesium.PolygonGeometry.createGeometry(polygon);

  ##### See:

  - PolygonGeometry#createGeometry

#### staticCesium.PolygonGeometry.pack(value, array, startingIndex) → Array.<Number>
Core/PolygonGeometry.js 665

  Stores the provided instance into the provided array.

  Name | Type | Default | Description
  --- | --- | --- | ---
  `value` | PolygonGeometry |  | The value to pack.
  `array` | Array.<Number> |  | The array to pack into.
  `startingIndex` | Number | `0` | optional The index into the array at which to start packing the elements.

  ##### Returns:

  The array that was packed into

#### staticCesium.PolygonGeometry.unpack(array, startingIndex, result)
Core/PolygonGeometry.js 717

  Retrieves an instance from a packed array.

  Name | Type | Default | Description
  --- | --- | --- | ---
  `array` | Array.<Number> |  | The packed array.
  `startingIndex` | Number | `0` | optional The starting index of the element to be unpacked.
  `result` | PolygonGeometry |  | optional The object into which to store the result.