Package org.apache.lucene.geo

## Class Polygon

- java.lang.Object
- - org.apache.lucene.geo.Geometry
  - - org.apache.lucene.geo.LatLonGeometry
    - - org.apache.lucene.geo.Polygon

-     public final class Polygon
      extends LatLonGeometry

  Represents a closed polygon on the earth's surface. You can either construct the Polygon directly yourself with `double[]` coordinates, or use `fromGeoJSON(java.lang.String)` if you have a polygon already encoded as a GeoJSON string.

  NOTES:

  1. Coordinates must be in clockwise order, except for holes. Holes must be in counter-clockwise order.
  2. The polygon must be closed: the first and last coordinates need to have the same values.
  3. The polygon must not be self-crossing, otherwise may result in unexpected behavior.
  4. All latitude/longitude values must be in decimal degrees.
  5. Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side.
  6. For more advanced GeoSpatial indexing and query operations see the `spatial-extras` module
  WARNING: This API is experimental and might change in incompatible ways in the next release.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `double` | `maxLat` | maximum latitude of this polygon's bounding box area
    `double` | `maxLon` | maximum longitude of this polygon's bounding box area
    `double` | `minLat` | minimum latitude of this polygon's bounding box area
    `double` | `minLon` | minimum longitude of this polygon's bounding box area

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `Polygon​(double[] polyLats, double[] polyLons, Polygon... holes)` | Creates a new Polygon from the supplied latitude/longitude array, and optionally any holes.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `equals​(Object obj)` |
    `static Polygon[]` | `fromGeoJSON​(String geojson)` | Parses a standard GeoJSON polygon string.
    `Polygon[]` | `getHoles()` | Returns a copy of the internal holes array
    `double` | `getPolyLat​(int vertex)` | Returns latitude value at given index
    `double[]` | `getPolyLats()` | Returns a copy of the internal latitude array
    `double` | `getPolyLon​(int vertex)` | Returns longitude value at given index
    `double[]` | `getPolyLons()` | Returns a copy of the internal longitude array
    `GeoUtils.WindingOrder` | `getWindingOrder()` | Returns the winding order (CW, COLINEAR, CCW) for the polygon shell
    `int` | `hashCode()` |
    `int` | `numHoles()` | returns the number of holes for the polygon
    `int` | `numPoints()` | returns the number of vertex points
    `protected Component2D` | `toComponent2D()` | get a Component2D from the geometry object
    `String` | `toGeoJSON()` | prints polygons as geojson
    `String` | `toString()` |
    `static String` | `verticesToGeoJSON​(double[] lats, double[] lons)` |

    - ### Methods inherited from class org.apache.lucene.geo.LatLonGeometry

      `create`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### minLat

          public final double minLat

      minimum latitude of this polygon's bounding box area

    - #### maxLat

          public final double maxLat

      maximum latitude of this polygon's bounding box area

    - #### minLon

          public final double minLon

      minimum longitude of this polygon's bounding box area

    - #### maxLon

          public final double maxLon

      maximum longitude of this polygon's bounding box area

  - ### Constructor Detail

    - #### Polygon

          public Polygon​(double[] polyLats,
                         double[] polyLons,
                         Polygon... holes)

      Creates a new Polygon from the supplied latitude/longitude array, and optionally any holes.

  - ### Method Detail

    - #### numPoints

          public int numPoints()

      returns the number of vertex points

    - #### getPolyLats

          public double[] getPolyLats()

      Returns a copy of the internal latitude array

    - #### getPolyLat

          public double getPolyLat​(int vertex)

      Returns latitude value at given index

    - #### getPolyLons

          public double[] getPolyLons()

      Returns a copy of the internal longitude array

    - #### getPolyLon

          public double getPolyLon​(int vertex)

      Returns longitude value at given index

    - #### getHoles

          public Polygon[] getHoles()

      Returns a copy of the internal holes array

    - #### getWindingOrder

          public GeoUtils.WindingOrder getWindingOrder()

      Returns the winding order (CW, COLINEAR, CCW) for the polygon shell

    - #### numHoles

          public int numHoles()

      returns the number of holes for the polygon

    - #### toComponent2D

          protected Component2D toComponent2D()

      Description copied from class: `Geometry`
      get a Component2D from the geometry object
      Specified by:
        `toComponent2D` in class `Geometry`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `Object`

    - #### equals

          public boolean equals​(Object obj)

      Overrides:
        `equals` in class `Object`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

    - #### verticesToGeoJSON

          public static String verticesToGeoJSON​(double[] lats,
                                                 double[] lons)

    - #### toGeoJSON

          public String toGeoJSON()

      prints polygons as geojson

    - #### fromGeoJSON

          public static Polygon[] fromGeoJSON​(String geojson)
                                       throws ParseException

      Parses a standard GeoJSON polygon string. The type of the incoming GeoJSON object must be a Polygon or MultiPolygon, optionally embedded under a "type: Feature". A Polygon will return as a length 1 array, while a MultiPolygon will be 1 or more in length.

      See the GeoJSON specification.

      Throws:
        `ParseException`